初始化与清理
1.在java中用构造函数来确保对象被初始化,构造函数的名字和类名一样,并且编程风格要求的方法首字母小写的要求不适用于构造函数,因为构造函数必须和类名完全一致。
构造函数也能有参数,让你能对对象的初始化提供参数。 默认的构造函数是不带参数的。当你定义了构造函数,就不会再有默认的构造函数。
构造函数是一种特殊的方法,它没有返回值。这点同 void 有本质的区别,void 的方法什么都不返回,这是由你决定的,你也可以返回值,但构造函数什么都不返回,你别无选择。
new 表达式会返回这个对象的 reference ,但构造函数本身并不返回任何东西。
public class TestConsctuctor{
TestConstructor(String argument){} //带参数的构造函数
}
2. 方法重载(reload)是在面向对象开发中是一种很重要的方法。
class TestReload{
TestReload(){} // construct method
TestReload(String argument){} //reload construct method
private void testMethod(){} // ordinary method
private String testMethod(List list){} //reload ordinary method
}
3.区分重载的方法:每一个经过重载的方法都必须有唯一的参数类型的列表。即使是参数位置的颠倒也能区分开两个方法。
4.this 只能用在方法的内部,它负责返回调用这个方法的对象的reference.它常用于return语句以返回当前对象的reference.this还可用来再构造函数里面调用构造函数,如:
class TestThis{
int a = 0;
TestThis(){...}
TestThis(int a){...}
testThis(string d){...}
TestThis(int a ,String d){
this(a); //invoke TestThis(int a)
this.a = a; // this.a present class variable
}
}
5.static :你不能在static方法里面调用非static方法,反过来可以。类的static 方法只能访问其它static方法和static 数据成员。
6.对象不一定被垃圾回收器回收,所以定义了finalize()方法,不同于c++中的拆构函数。垃圾回收只与内存有关。垃圾回收的时候会先调用finalize()方法。一般只用于清理一些
不是通过new生成在内存中的东西。比如native方式生成的本地代码。
7.垃圾回收和finalize()方法都是靠不住的,只要jvm还没有到耗尽内存的时候,它是不会浪费时间来回收垃圾以恢复内存的。因此,在某些特别的场合下,你必须自己创建清理垃圾
的方法,并且明明白白的调用它。
8.垃圾回收原理:reference counting; adaptive;stop-and-copy; mark-and-sweep;
9.初始化:默认初始化值,primitive一般为0,object为null; 自己指定初始化值; 构造函数进行初始化。
10.初始化的顺序:变量的初始化会先于任何方法,甚至是构造函数的调用;static变量->变量->构造函数->方法.static成员只会在需要的时候才进行初始化,static初始化
只执行一次。
11.创建对象的步骤:以Dog类举例,
a.第一次创建Dog对象,或访问Dog类的static成员时,java会自动搜索classpath,找到Dog.class
b.装载class对象之后会对所有的static成员进行初始化
c.用new Gog()创建新的对象的时候,Dog对象的构建进程会现在堆里为对象分配足够的内存
d.这快内存被清零,这样就自动把Dog对象的primitive默认为0,reference为null
e.执行定义成员数据时的初始化
f.执行构造函数