> 文章列表 > 读书笔记:《On Java 8》

读书笔记:《On Java 8》

读书笔记:《On Java 8》

大佬推荐下开始看这本书,希望不会太晚,记录下自己的收获吧。

第三章

代码String s创建的其实是String对象的引用,这也就解释了为什么直接用会出错,因为根本没有给变量s赋值也就是s没有指向任何的对象,应该创建引用同时初始化。
代码String s = new String("abcd") 用new来创建一个新的对象实例。

基本类型的存储因为使用频率很高,就不需要用new来创建,使用一个“自动”变量,这个变量直接存储“值”,存在栈内存中,更高效。

创建对象数组时候,实际上是在创建了一个引用数组,并且每个引用的初始值都为null。

当我们使用 new 关键字来创建 Java 对象时,它的生命周期将会超出作用域。比如这段代码

{String s = new String("a string");
} 
// 作用域终点

上例中,引用 s 在作用域终点就结束了。但是,引用 s 指向的字符串对象依然还在占用内存。在这段代码中,我们无法在这个作用域之后访问这个对象,因为唯一对它的引用 s 已超出了作用域的范围(这也是GC需要处理的)。

默认值的赋予并不适用于局部变量,这也就是为什么在方法中直接int x 会报错。比如在方法中直接这样定义int x

关于static
通常来说,只有在使用new创建类的对象后,数据存储空间才被分配,对象的方法才能够供外界调用。这种方式在两种情况下是不足的。
1.有时候只想为特定字段分配一个共享存储空间,而不去考察究竟要创造多少对象、甚至根本就不创建对象
2.创建一个与此类的任何对象无关的方法。就是说没有创建对象,也可以调用该方法
static 关键字(从 C++ 采用)就符合上述两点要求。当我们说某个事物是静态时,就意味着该字段或方法不依赖于任何特定的对象实例 。 即使我们从未创建过该类的对象,也可以调用其静态方法或访问其静态字段。相反,对于普通的非静态字段和方法,我们必须要先创建一个对象并使用该对象来访问字段或方法。
可以通过类名直接引用静态对象。列如:

class StaticTest {static int i = 47;
}

即使创建了两个 StaticTest 对象,但是静态变量 i 仍只占一份存储空间。两个对象都会共享相同的变量 i。 代码示例:

StaticTest st1 = new StaticTest();
StaticTest st2 = new StaticTest();

st1.i 和 st2.i 指向同一块存储空间,因此它们的值都是 47。引用静态变量有两种方法。在前面的示例中,我们通过一个对象来定位它,例如 st2.i。我们也可以通过类名直接引用它,这种方式对于非静态成员则不可行

StaticTest.i++;

++ 运算符将会使变量结果 + 1。此时 st1.i 和 st2.i 的值都变成了 48。
使用类名直接引用静态变量是首选方法,因为它强调了变量的静态属性。

第四章

第四章运算符先跳过。。。

第五章

第五章控制流也跳过。。。

第六章