Thank in Java
Think in Java
2.一切都是对象
2.1 引用操作对象
- Java 中一切都是对象,因此可以采用单一固定得语法。
- 操作对象得标识符实际上是对对象得一个 “引用”reference“。例如 遥控器 (引用)来 操纵电视(对象)
- 即使没有电视剧 , 遥控器 也可独立存在
- 创建引用的同时便进行初始化 String s = "abcd"
- 创建了引用 让它与一个新的对象相关联。 new "给我一个对象" String s = new String("abcd");
2.2.存储到什么地方
- 5 个地方可以存储数据
- 寄存器:最快的存储区, 处理器内部 不能直接控制,根据需求分配
- 堆栈:RAM中 (随机访问存储器)中,堆栈指针 可以从处理器哪里获得直接指出,向下移动分配新内存,向上移动,释放内存。仅次于寄存器 。Java系统必须知道存储再堆栈内所有项的确切生命周期,以便上下移动堆栈指针。这一约束限制了程序的灵活性,所以虽然某些 Java 数据存储再堆栈中,特别是 对象的引用 ,Java对象不存储其中
- 堆: 通用的内存地址 RAM区中 编译器不需要知道存储的数据再堆里存活了多长时间。 new一个对象 的时候,会自动再堆里进行存储分配。但是:用堆进行存储分配和清理可能比用堆栈需要更长的时间
- 常量存储: ROM只读存储器 常量值通常直接存放在程序代码内部,这样做是安全的,永远不会改变。
- 非RAM存储:如果数据完全存活于程序之外,那么它可以不受程序控制,在程序没有运行时也可以存在。流对象和持久化对象
2.3 基本类型
基本类型占存储空间的不变性,比大多数语言编写程序更具有移植性的原因

数组:
当创建了一个数组对象时,实际上是创建了一个 引用数组,并且每个引用都会被自动被初始化为一个特定的值, Null,当Java看到Null ,就知道这个引用还没有指向某个对象。在使用任何引用前 ,需要为其指定对象。如果使用是 还是 Null,Java会报错。 存放基本类型的数组,初始化为 0.
2.4 永远不要销毁对象
变量生命周期的概念,占据了程序设计工作中非常重要的部分。变量存活多久?如何销毁?什么时候销毁?什么周期混乱 会引起大量的程序Bug。Java 替我们完成了所有的清理工作。
2.4.1 作用域
- 大多数过程型语言都有作用域(scope)的概念。
- Java 由new创建的对象 ,只要你需要 就 一直存在
- Java有垃圾回收机制,监视 new 创建的所有对象,并辨别那些不会再被引用的对象。随后,释放这些对象的内存空间。(不必担心内存回收问题,你只要创建对象,一旦你不需要,自行消失 )
2.4.2 类
Java 中你所做的全部工作就是定义类,产生哪些类的对象,以及发送消息给这些对象
- class 创建 一个 类
- new 一个对象
- 类中的元素
- 字段 (数据成员)
- 方法 (成员函数)
- Java中方法只能作为类的一部分来创建。方法只有通过对象才能调用,且这个对象必须能执行这个方法调用。
- 你想使用 程序里面预先定义好的类 Import
2.4.3 static 关键字
static 字段对每个类来说都只有一份存储空间,非static字段则是对每个对象有一个存储空间,这一点对main 方法很重要 ,程序的入口
重要用法:
声明一个事物是static就意味这这个域或者方法不会包含它的那个类的任何对象实例管理在一起
未创建某个类的任何对象,也可以调用static方法,访问其static域
class StaticTest{
static int i = 47;
}
StaticTest st1 = new StaticTest();
调用方法:
- st1.i
- StaticTest.i ++
调用静态方法和调用静态变量相似
2.4.4 第一个 Java程序
Java最强大的优势就是,他又庞大的标准类库
// 打印日期
System.out.println(new Data());
传递的参数 是一个 Data对象,一旦创建它之后,就可以直接将它的值(自动转换为String类型)发送给println().当这条语句被执行完毕之后,Data对象就不再被使用,而垃圾回收器会发现这一情况,并再任意时候将其回收。
2.4.5 Javadoc
提取注释工具 /** */ 只能为 public 和 protected 成员进行文档注释。因为 public 和 protected 能再文件之外被使用。 private 可以用 -privateb标记
标签
- @see 引用其他类文档
- @link 超连接文本
- @docRoot 文件树页面的显示超链接
- @inheritDoc 从基类中继承相关的文档到当前类中
- @version 格式如下 @version version-information 提取版本信息
- @author author - information 提取作者信息
- @since 此类支持的JDK版本
- @param 方法文档中
- @return 方法文档中
2.5 编码风格
类名 驼峰原则
课后题
public class 练习1 {
static int i;
static char c;
public static void main(String[] args) {
System.out.println("int = " +i);
System.out.println("char = " + c);
}
}
===============================
int = 0
char =
class StaticTest{
static int i = 47;
}
class Incrementable{
static void increment(){
StaticTest.i++;
}
}
public class 练习8 {
public static void main(String[] args) {
System.out.println("StaticTest.i = "+StaticTest.i);
StaticTest st1 = new StaticTest();
StaticTest st2 = new StaticTest();
System.out.println("st1.i="+st1.i);
System.out.println("st1.i="+st2.i);
// i+1
Incrementable.increment();
System.out.println("StaticTest.i = "+StaticTest.i);
System.out.println("st1.i="+st1.i);
System.out.println("st1.i="+st2.i);
//st1.i = 3
st1.i = 3;
System.out.println("StaticTest.i = "+StaticTest.i);
System.out.println("st1.i="+st1.i);
System.out.println("st1.i="+st2.i);
StaticTest st3 = new StaticTest();
System.out.println("st3.i="+st3.i);
}
}
============================
StaticTest.i = 47
st1.i=47
st1.i=47
StaticTest.i = 48
st1.i=48
st1.i=48
StaticTest.i = 3
st1.i=3
st1.i=3
st3.i=3
Process finished with exit code 0
第九题
在java语言中,有一种自动包装机制,它的主要作用是用于将基本类自动转换成与基本类对应的包装类,以便将基本类可以应用于容器中,而不用程序手动建立包装类,使编程过程更加简单,还可以减少错误。
基本类型和包装器类型对应表:
基本类型 包装类型
boolean Boolean
char Character
byte Byte
short Short
int Integer
long Long
float Float
double Double
void Void
public class 练习9 {
public static void main(String[] args) {
boolean a = false;
Boolean A = a;
System.out.println(a);
System.out.println(A);
int b = 1;
Integer B = b;
System.out.println(b);
System.out.println(B);
}
}
========================================
false
false
1
1
public class 练习10 {
public static void main(String[] args) {
System.out.println("args[0] = " + args[0]);
System.out.println("args[1] = " + args[1]);
System.out.println("args[2] = " + args[2]);
}
}
Thank in Java的更多相关文章
- Spark案例分析
一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...
- 故障重现(内存篇2),JAVA内存不足导致频繁回收和swap引起的性能问题
背景起因: 记起以前的另一次也是关于内存的调优分享下 有个系统平时运行非常稳定运行(没经历过大并发考验),然而在一次活动后,人数并发一上来后,系统开始卡. 我按经验开始调优,在每个关键步骤的加入如 ...
- Elasticsearch之java的基本操作一
摘要 接触ElasticSearch已经有一段了.在这期间,遇到很多问题,但在最后自己的不断探索下解决了这些问题.看到网上或多或少的都有一些介绍ElasticSearch相关知识的文档,但个人觉得 ...
- 论:开发者信仰之“天下IT是一家“(Java .NET篇)
比尔盖茨公认的IT界领军人物,打造了辉煌一时的PC时代. 2008年,史蒂夫鲍尔默接替了盖茨的工作,成为微软公司的总裁. 2013年他与微软做了最后的道别. 2013年以后,我才真正看到了微软的变化. ...
- 故障重现, JAVA进程内存不够时突然挂掉模拟
背景,服务器上的一个JAVA服务进程突然挂掉,查看产生了崩溃日志,如下: # Set larger code cache with -XX:ReservedCodeCacheSize= # This ...
- 死磕内存篇 --- JAVA进程和linux内存间的大小关系
运行个JAVA 用sleep去hold住 package org.hjb.test; public class TestOnly { public static void main(String[] ...
- 【小程序分享篇 一 】开发了个JAVA小程序, 用于清除内存卡或者U盘里的垃圾文件非常有用
有一种场景, 手机内存卡空间被用光了,但又不知道哪个文件占用了太大,一个个文件夹去找又太麻烦,所以我开发了个小程序把手机所有文件(包括路径下所有层次子文件夹下的文件)进行一个排序,这样你就可以找出哪个 ...
- Java多线程基础学习(二)
9. 线程安全/共享变量——同步 当多个线程用到同一个变量时,在修改值时存在同时修改的可能性,而此时该变量只能被赋值一次.这就会导致出现“线程安全”问题,这个被多个线程共用的变量称之为“共享变量”. ...
- Java多线程基础学习(一)
1. 创建线程 1.1 通过构造函数:public Thread(Runnable target, String name){} 或:public Thread(Runnable target ...
- c#与java的区别
经常有人问这种问题,用了些时间java之后,发现这俩玩意除了一小部分壳子长的还有能稍微凑合上,基本上没什么相似之处,可以说也就是马甲层面上的相似吧,还是比较短的马甲... 一般C#多用于业务系统的开发 ...
随机推荐
- linux seccomp使用和原理
linux seccomp使用和原理 概要 linux的沙箱机制,可以限制进程对系统调用的访问,从系统调用号,到系统调用的参数,都可以检查和限制 有两种模式 SECCOMP_MODE_STRICT, ...
- Task1:知识图谱介绍(1天)
一.知识图谱简介 "知识图谱本质上是语义网络(Semantic Network)的知识库".但这有点抽象,所以换个角度,从实际应用的角度出发其实可以简单地把知识图谱理解成多关系图( ...
- Socket粘包问题终极解决方案—Netty版(2W字)!
上一篇我们讲了<Socket粘包问题的3种解决方案>,但没想到评论区竟然炸了.介于大家的热情讨论,以及不同的反馈意见,本文就来做一个扩展和延伸,试图找到问题的最优解,以及消息通讯的最优解决 ...
- Flutter 应用入门:路由管理
路由(Route)在移动开发中通常指页面(Page),这跟web开发中单页应用的Route概念意义是相同的,Route在Android中通常指一个Activity,在iOS中指一个ViewContro ...
- Js中函数式编程的理解
函数式编程的理解 函数式编程是一种编程范式,可以理解为是利用函数把运算过程封装起来,通过组合各种函数来计算结果.函数式编程与命令式编程最大的不同其实在于,函数式编程关心数据的映射,命令式编程关心解决问 ...
- 【Docker】在Linux系统中安装Docker虚拟机、启动停止重启查看Docker命令
安装Docker 文章目录 安装Docker Docker虚拟机架构 在Linux系统中安装Docker虚拟机 管理Docker虚拟机 参考资料 Docker虚拟机架构 Docker创建的所有虚拟实例 ...
- 奇技淫巧,还是正统功夫? - Python推导式最全用法
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取 python免费学习资 ...
- 聊聊 React
都说 React 开发效率高,但效率高在哪呢?来细看看. 用 d3 写一个 List: const renderList = data => { d3.select("ul" ...
- kafka(二)基本使用
一.Kafka线上集群部署方案 既然是集群,那必然就要有多个Kafka节点机器,因为只有单台机器构成的kafka伪集群只能用于日常测试之用,根本无法满足实际的线上生产需求. 操作系统: kafka由S ...
- CMU数据库(15-445)实验2-b+树索引实现(上)
Lab2 在做实验2之前请确保实验1结果的正确性.不然你的实验2将无法正常进行 环境搭建地址如下 https://www.cnblogs.com/JayL-zxl/p/14307260.html 实验 ...