Java基础知识——初始化与清理

本文最后更新于:2023-03-13, 23:48:49

1、用构造器确保初始化

​ 在Java中,通过类构造器,确保每个类都会得到初始化。构造器采用与类相同的名称。

​ 不接受任何参数的构造器叫默认构造器,术语无参构造器。如果你的类里没有构造器,编译器会自动创建一个默认构造器,如果你的类里有构造器(不管是有参还是无参),则编译器不会自动创建默认编译器。

​ 构造器不返回任何东西,这和返回值为空(void)不同,空返回值可以有return语句。

2、方法重载

​ 方法重载就是几个方法拥有相同的名字,但是参数类型或参数个数或参数顺序不同。

​ 一个类的构造器也可以拥有多个,这也是方法重载。

​ 基本类型能从一个较小的类型自动提升到一个较大的类型(例:short >> int >> long),这样可能会在重载时造成混淆。

​ 不能以返回值区分重载方法,因为有时我们并不关心一个方法的返回值。例:

1
2
3
int f1(){...}
char f1(){...}
f1(); //此时编译器不知道调用哪个

3、this关键字

​ this关键字只能在方法内使用,表示对“调用方法的那个对象”的引用。this的用法和其他的对象引用相同。

​ 在构造器中使用构造器:

1
2
3
4
5
6
7
8
9
class A{
int i;
A(){
this(10);
}
A(int i){
this.i = i;
}
}

​ 只可以在构造器里用this调用一个构造器,而且不能在其他方法中调用构造器。

​ static方法就是没有this的方法,在static方法内不能调用非静态方法(反过来倒是可以)。

4、清理:终结处理和垃圾回收

​ 一个对象如果失去用处,它就会被垃圾回收器回收掉,一个类的finalize方法会在对象回收前被调用,因此可以用finalize方法在垃圾回收时做一些清理工作。但是,垃圾回收不一定会发生,所以不能指望finalize()一定会被调用。更不要直接调用finalize(),这样并不能清理掉一个对象。一旦垃圾回收器准备好释放对象占用的空间,将首先调用finalize方法,并且在下一次垃圾回收动作发生时才真正回收对象占用的内存。

5、构造器初始化

​ 初始化顺序:在类的内部,变量定义的先后顺序决定了初始化的顺序,即使变量定义散布于在方法定义之间,它们仍会在任何方法(包括构造器)被调用之前得到初始化。并且,静态对象的初始化会先于非静态对象。静态初始化动作只进行一次。

​ 静态初始化子句,例:

1
2
3
4
5
6
7
8
public 	class Spoon{
static int i;
static String s;
static {
i = 47;
s = "aaa";
}
}

​ 实例初始化,和静态初始化一样,只不过少了static关键字。

6、数组初始化

1
2
3
4
5
6
7
//两种定义方式
int[] a1; //推荐这种
int a2[];
//初始化方式
a1 = new int[5];
a2 = new int[]{1,2,3};
int[] a3 = {1,2,3};

​ 可变参数列表,例:

1
2
3
4
5
6
//两种方法
void f1(Object[] args){...}
void f2(Object... args){...} //这种简便一点
f1(new Object[]{new Integer(1), new Float(1.1), new Double(11.11)});
f2(new Integer(1), new Float(1.1), new Double(11.11));
f2(); //参数可以为空,f1()不行