第6章 初始化和清理
-
构造器初始化
Java中使用构造器也称为构造方法来进行初始化,它的特点是方法名就是类名,参数分有参数和无参数两种,无返回值。该方法只能在new 关键字后跟随使用。
public class A{
private int age;
private String str;
public A(){
// 无参构造方法
}
public A(int a,String b){
// 有参构造方法
this.age=a;
this.str=b
}
public String getString(int a){
this.age=a;
return "" + a;
}
public String getString(String str){
this.str=str;
return str;
}
}
public class Test{
public static void main(String[] args){
A a1 = new A();
A a2 = new A( 6, "hello");
}
}
一个类里没有构造方法时,Java会默认有个无参构造方法;
没有无参,只有有参时,默认的无参构造方法不生效。
使用构造器方式初始化,会引入下面的内容:
重载:
同一个类里,方法名相同、方法参数不同(类型、顺序不同)的方法被称为方法的重载体现。
也分为构造器方法重载,如上面代码中的两个构造器初始化方式;
非构造器方法重载,如上面代码中的两个getString方法。
程序在编译的时候,才知道访问的是具体的哪个重载方法,因为它是通过方法参数来定位到的。
不通过方法返回类型定义,是因为有时有返回值的方法在业务中不使用返回值,导致在编译阶段无法区分具体使用了哪个重载方法。
2.this关键字
只能在非静态方法中使用,如普通方法和构造方法。
this点后只能跟属性和方法,并且是当前这个类里的非静态属性和非静态方法。
3.清理:终结和垃圾收集
finalize()方法是Java对象被进行垃圾回收的关键方法。
垃圾收集器的工作原理:
-
找到垃圾对象,有引用计数法,简单但是很慢;可达性分析法,复杂但是快。
-
采用复制算法,把存活对象移动到另一块内存块里,把对象所在的原先的内存块清空。
-
大对象的特殊处理;
4.成员初始化
指定初始化:给成员变量赋值,基本类型,引用类型都赋值;
5.构造器初始化:在构造方法内部,对成员变量进行赋值,作为对象里的成员变量初始化过程。
初始化顺序:类构造器外部的成员变量初始化要早于该类的构造器方法初始化。外部成员变量的初始化按照编码顺序进行。
类内部的镜头成员变量初始化只发生在第一次进行类对象被访问时。
静态代码块也是一样,只初始化一次。
非静态代码块在每次创建该类对象时都会被初始化。
6.数组初始化
数组本质也是一个引用类型对象。
数组是有固定长度(个数)的相同类型的元素按照顺序排列好的集合;
可变参数列表:参数是数组形式传递到方法
7.枚举类型
枚举类型也是 一个类,并且有自己的方法.
第7章 实现隐藏
实现隐藏主要讲述的是Java对于代码的访问权限,会通过一些关键字信息表示出来,这些被关键字修饰的代码,在被访问是有限制的。
1.package:库单元
Java程序文件都是以【.java】格式的文件。package可看作是文件夹,同一个文件夹里不允许有相同名字的文件。所以package的作用就是对同名的文件进行唯一路径地址的区分,同时对同一个package下的所有Java文件里的某些方法都是可直接访问的。
要求:包名要唯一
2.Java访问权限修饰符
包访问:包中的类可以访问该包里具有包访问权限的成员
public 接口访问权限:被public修饰的方法,对于所有人都是可用的,构造方法默认是public无参方法。
private,被修饰的方法只能在类本身文件里被使用,不能被非本类文件使用
protected,继承访问权限,子类可以访问父类里的protected修饰的方法,非子类则不能直接使用。
3.接口和实现
访问控制常常被称为实现隐藏。
将数据和方法包装在类中,并与实现隐藏相结合,称为封装。其结果就是具有特征和行为的数据类型。
4.类的访问权限
通过使用import 类全路径方式,将目标类引入到操作类中,这样操作类就可以使用目标类。
或者直接在操作类中,使用目标类全路径方式进行使用,不过这样导致代码不简洁。