构造函数
-
Java构造函数的名称必须和类名一样,且没有返回值
-
Java有构造函数,但是没有析构函数
-
构造函数是制造对象的过程,析构函数是清除对象的过程
-
-
每个变量都是有生命周期的,他只能存储在离它最近的一对{}中
public class LifeCycleTest{ public static void main(String[] args){ int a = 0; //a在main函数中都是active //i只能活在for循环中 for(int i=0;i<5;i++){ int k = 0; k++; } if(a>0){ Object obj1 = new Object(); //obj1只能在if分支中 System.out.println("a is positive"); }else{ Object obj2 = new Object(); //obj2只能在else分支中 System.out.println("a is non-positive"); } } }
-
-
Java具有内存自动回收机制的,当变量退出其生命周期后,JVM会自动回收所分配的对象的内存。所以不需要析构函数来释放内存
-
对象回收效率依赖于垃圾回收器GC(Garbage Collector),其回收算法关系到性能好坏,是JVM的研究热点
-
每个Java类都必须有构造函数
-
如果没有显示定义构造函数,Java编译器自动为该类产生一个空的无形参构造函数。如果已经有了显式的有参构造函数,编译器就不会越俎代庖了
-
每个子类的构造函数的第一句话,都默认调用父类的无参数构造函数super(),除非子类的构造函数第一句话是super,而且super语句必须放在第一条,不会出现连续两条super语句
-
一个类可以有多个构造函数,只要形参列表不相同即可
-
class MyPairNumber { int m; int n; public MyPairNumber() { m = 0; n = 0; } public MyPairNumber(int a) { m = a; n = 0; } public MyPairNumber(int a,int b) { m = a; n = b; } } public class ConstructorTest{ public static void main(String[] args){ MyPairNumber obj1 = new MyPairNumber(); MyPairNumber obj2 = new MyPairNumber(5); MyPairNumber obj3 = new MyPairNumber(10,20); System.out.println("obj1 has " + obj1.m + "," + obj1.n); System.out.println("obj2 has " + obj2.m + "," + obj2.n); System.out.println("obj3 has " + obj3.m + "," + obj3.n); // A a = new A(); //error,A类中没有无参数的构造函数 } }
-
-
Java具有内存自动回收机制的,当变量退出其生命周期后,JVM会自动回收所分配的对象的内存。所以不需要析构函数来释放内存
-
对象回收效率依赖于垃圾回收器GC(Garbage Collector),其回收算法关系到性能好坏,是JVM的研究热点
-
每个Java类都必须有构造函数
-
如果没有显示定义构造函数,Java编译器自动为该类产生一个空的无形参构造函数。如果已经有了显式的有参构造函数,编译器就不会越俎代庖了
-
每个子类的构造函数的第一句话,都默认调用父类的无参数构造函数super(),除非子类的构造函数第一句话是super,而且super语句必须放在第一条,不会出现连续两条super语句
-
一个类可以有多个构造函数,只要形参列表不相同即可
-