JAVA学习日记---Thinking in Java学习笔记,第5章总结
第五章 初始化与清理
5.1 用构造器确保初始化
1.构造器命名必须与类名相同
2.构造器也是方法,满足方法的各种特征,无参数的构造器称为默认构造器,默认构造方法或者无参构造器。在没有其他构造方法的时候可以省略不写
需要注意的是,构造器虽然是方法但是它没有返回值。
3.使用构造器可以创建对象 关键字:new 创建对象时将在堆内存中给对象分配空间
5.2 方法重载
1. 什么是方法重载:在同一个类中,方法名相同但提供的参数个数和类型不同的两个方法叫做方法重载。
需要注意的是(返回值类型不同是不构成方法重载的)
2. 构造器也是方法,同样可以被重载
5.3 默认构造器
默认构造器又称为无参构造器,在没有其他构造器的情况下,JAVA会帮助类生成一个默认的构造器即无参构造器,可以被省略不写。
5.4 this关键字
1. this关键字可以指当前对象,即当前类的对象
2. this关键字在同一个类中可以调用构造函数,如:this()表示调用此类无参的构造函数
需要注意的是:在构造器中使用this关键字调用构造器时,必须要写在构造器的第一行。
3. Static关键字用法之前在第二章时候提到过如下:
作用一:static关键字的作用,static关键字修饰的方法和域不会与包含它的那个类的任何对象实例关联,直接可以用类名调用static修饰的域或方法。
static修饰的域属于类,不论这个类的几个对象调用,都是同一个域
作用二:static表示静态的概念,static方法没有this关键字,会报错;并且在静态方法中不能直接调用非静态方法,需要在方法中创建一个对象才可以调用,但是在非静态方法中既可以调用非静态方法又可以调用静态方法
作用三: static关键字还可以用在静态初始化块
作用四: static关键字还可以用在静态导入
5.5 清理:终结处理和垃圾回收
垃圾回收和清除都不一定会发生,如果JAVA虚拟机(JVM)并未面临内存耗尽的情况,它是不会浪费时间去执行垃圾回收以恢复内存的
JAVA适用的是一种自适应的清理机制:自适应的,分代的,停止-复制,标记-清扫式的垃圾回收机制。
停止-复制:stop-and-copy,先暂停程序的运行,然后将所有存活的对象从当前的堆复制到另一个堆,没有被复制的全部都是垃圾,当对象被复制到新的堆时,它们是一个挨着
一个的
标记-清扫:mark-and-sweep,当程序进入稳定状态之后,可能只会产生少量垃圾,甚至没有垃圾。这个时候再使用停止复制的方法去清理垃圾就会效率很低,所以专用标记清扫的方法,方法所依据的思路同样是从堆栈和静态存储区出发,遍历所有的引用,进而找出所有存活的对象。每当它找到一个存活对象,就给对象一个标记,这个过程不会回收任何对象。只有当标记工作完成时,清理才会开始,在清理的过程中没有标记的对象将被释放,不会发生任何复制动作,所以剩下的堆空间是不连续的,垃圾回收器要是希望得到连续的空间话,将重新整理剩下的对象
JAVA的垃圾回收机制就是上面两种机制的结合
5.6 成员初始化
成员初始化分为全局初始化(类的数据成员)和局部初始化
类的数据成员初始化:JAVA会分配默认的初始化值给基础数据类型,不会报错
局部变量初始化:如果不初始化会报错
5.7 构造器初始化
在初始化之前要先初始化类
初始化顺序:先初始化常量,静态变量,然后在类的内部,变量定义的先后顺序决定了初始化的顺序
总之就是先初始化静态对象,然后非静态的
非静态实例初始化:与静态初始化块仅差一个static关键字,其他语法一致,主要用在匿名内部类中
5.8 数组初始化
1.int [] a = {1,2,3,4};
2.int[] a = new int[]{1,2,3,4};
3.int[] a = new int[7];
4.可变参数列表:static void printArray(Object ...args)
5.9 枚举类型
用到关键字enum,枚举类型的实例是常量
enum特别适用的特性,它可以在switch语句内使用