《java编程思想》读书笔记之初始化与清理

1.只有在没有默认构造函数的时候,编译器才会默认生成一个,当用户定义了构造函数,编译器便不会再生成默认构造函数。

可以使用private默认构造函数来禁止继承

2.方法的构造要素为:方法名和参数列表(不包括返回值),因此重载只能由返回值来重载,无法通过返回值来重载方法

3.float类型范围大于int但是精度小于int,因此可以在方法需要一个float的时候,传入一个int

float的范围大概为-2128次幂-2128次幂

4.调用一个对象的方法的时候,实际上是将这个对象引用作为一个参数传入指定的方法中,用来表示是那个对象调用了此方法

Student student =new Student();student.getName();//实际上是:Student.getName(student)

5.可以通过this(xx,xxx)来调用其他构造函数

6.finalize()方法不同于C++中的析构函数

  1. 并不能确定什么时候才会调用此方法,也有可能不会调用
  2. 此方法只于内存有关,只有在JVM可用内存到达极限的时候,才会进行垃圾回收并调用此方法。

7.finlize()方法可用来做对象终结验证的条件,比如某些对象在被回收之前必须经过某些操作才能回收

  • Closeable对象的close()方法可以放在这里做二次验证,比如关闭文件流等

8.垃圾回收器:

找到垃圾

  1. 引用计数法(有循环引用问题)
  2. 追溯引用法

处理垃圾

  1. 停止-复制法
  2. 标记-清扫法

一般更多的是将他们结合起来,大对象标记,小对象复制

9.未初始化的局部对象很有可能是程序员的疏忽,因此对于局部变量,未经初始化就直接使用会出现编译错误

10.类的成员变量不初始化会默认初始化一个值。boolean默认为false,引用为null

11.默认初始化是必然的,对于任何初始化形式(定义初始化或者构造函数初始化),成员变量都会先被赋值为默认值,然后再被赋值,因此编译器不会检查是否有已经初始化,因为初始化已经通过上述形式得到了保证

12.静态对象(static)是在第一次访问此类的时候(使用此类初始化对象或者访问静态数据)的时候才初始化,并且只会被初始化一次

13.对象的成员初始化顺序为先静态成员,再非静态成员,每个类别中根据定义的顺序进行默认或者赋值初始化

14.构造函数可以被看作为静态方法

15.创建对象的过程:假设有个Dog类

  • 第一次访问Dog的静态方法或者静态对象的时候,Java 解释器会先查找Dog类的路径
  • JVM会载入Dog.class,并按定义顺序初始化所有静态变量
  • 当使用new Dog()创建对象的时候,首先在堆上分配足够的存储空间
  • 将分配的存储空间清零并将对象所有的成员默认初始化
  • 执行所有出现在字段定义的时候的赋值操作
  • 执行构造函数

16.Java所有对象都定义在堆上,其他语言在堆上分配空间性能比较低,但是Java的内存管理是连续的,因此性能依然比较快

17.Java允许使用静态块初始化,也就是可以定义

static{

//do something

}

一般用于使用一个方法来初始化一个对象的时候

18.数组允许两种申明方式:int[] a1或者int a1[]

19.数组算是一个对象,它包含Object中的所有方法

20.Java 数组维护了一个length字段,每次存取都会用length来维护数组越界的安全,虽然效率降低是更加安全

21.当数组作为一个类的成员的时候,默认是null

22.默认toString()方法打印出来是这个类型名称@对象的地址(修改:已由R大回答得知,toString()打印的不是地址,而是hashCode()或者identifyHashCode()的返回结果)

23.可变参数本质上还是一个数组(编译器自动填充的语法糖),对于可变数组可以不传参数,此时数组为length为0的数组

24.可变方法也接受数组对象,并且当传入一个数组对象的时候,编译器便不会再自动填充

25.可变参数可能带来的问题:重载,当使用重载的时候,最好不要使用可变参数,或者只在一个版本上使用可变参数

关注我简信回复【资料】可以领取到收集的面试及电子书资料,或许对你有帮助!每天仅限10人

《java编程思想》读书笔记之初始化与清理_第1张图片
《java编程思想》读书笔记之初始化与清理
《java编程思想》读书笔记之初始化与清理

你可能感兴趣的:(《java编程思想》读书笔记之初始化与清理)