package com.constructor.test;
public class ConstuctorTest{
public static void main(String[] args) {
base b= null;
base c= null;
//c = new base(); The constructor base() is undefined,证明不能调用 void base()!所以不是构造器
try{
b=new base(28);//不会调用 int base(int c)方法,因为前者不是构造器
c=new base(20);
b.base(5); //lol。和类名一样的方法。不是构造器。
b.base(); //void base
c=new base(35); //赋值失败!则仍然是之前的引用,抛出错误。
}catch(Exception e) {
e.printStackTrace();
}finally{
System.out.println(b.i);//28
System.out.println(c.i);//20,因为上面赋值失败,所以保持引用,所以是一开始的20
}
}
}
class base{
int i = 10;
base(int i) throws Exception { //构造器可以有异常出现!出现异常就是当前初始化失败,赋值失败。
if(i > 30)
throw newException(i+" is greaterthan 30");
this.i= i;
return; //可以return!
}
int base(int c) { //和类名一样的方法。
System.out.println("lol");
return 0;
}
void base(){ //貌似是Constructor的方法,但是不是!
System.out.println("void base");
}
}
输出结果:
lol
void base
java.lang.Exception: 35 is greater than 30
atcom.constructor.test.base.<init>(ConstuctorTest.java:30)
at com.constructor.test.ConstuctorTest.main(ConstuctorTest.java:14)
28
20
几点内容:
1. Constructor如果全部是私有的,则不能继承,也不能被实例化。。
2. Constuctor只能用private,protected, public或者空修饰。不能用static, final,transient, native之类
3. 默认Constructor的访问属性和该类的默认访问属性一致。
4. 可以允许有和类名一样的方法名。但是那个绝对不是Constructor
5. 返回值为null,构造函数永远是void类型,但是void不写出来!
6. 可以抛出异常,但是异常被抛出之后,该类会被视为初始化失败,而导致赋值失败
7. 如果要引用别的Constructor,必须卸载构造类第一行。Super();..this()…
8. 写过任何构造器之后,默认构造器失效!