1。java也采用构造函数初始化类,但没有析构函数。同C++一样,构造函数名于类名相同。
java中可以在构造器中调用构造器,调用方法:
class A
{
A(int a){};
A(int a,int b){
this(a);
....
}
}
2。java使用垃圾回收机制自动回收内存。垃圾回收不等于析构,可以重载finalize()来做一些清理操作,
但不能指望finalize()。可以用System.gc()来强制执行垃圾回收。
3。成员函数初始化用指定初始化和构造器初始化。初始化顺序:假设有名Dog的类
1)当首次创建类型为Dog的对象时,或者Dog类的静态方法/静态字段首次被访问时,java解析器必须查找类路径,
以定位Dog.class文件
2)然后载入Dog.class,有关静态初始化的所有动作都会执行。因此,静态初始化只在Class对象首次加载的时候
进行一次。
3)当用new Dog()创建对象的时候,首先将在堆上为Dog对象分配足够的存储空间。
4)这块内存空间被清零,这就自动将Dog对象中的所有基本类型数据都设置成缺省值0,应用则被设置成null
5) 执行所有出现于字段定义处的初始化动作。
6)执行构造器。
4。java可以使用初始化块。如:
class A{
static int i;
static {
i = 47;
}
}
或者:
class B{
A a1;
A a2;
{
a1 = new A();
a2 = new A();
System.out.println("..");
}
}
5。java定义数组比从C++方便。java 数组实际是一个引用。可以用 int[] a={1,2,3,4};int a[] ={1,2,3,4};
数组有一个静态成员length。定义多纬数组:
...
int[][][] a = new int[2][3][4];
for(int i = 0; i < a.length ;i++)
for(int j = 0 ; j < a[i].length ; j++)
for(int k = 0 ;k < a[i][j].lenght ; k++)
....