Java 构造函数(重载)this();

2,748 阅读2分钟

都知道,Java中没有默认赋值的操作,无论是类还是方法

比如像:这样都是错误的

public void hello(String a="123"){
}

但是,参数很多肯定不能每次都重写,毕竟重复的代码很多。

所以Java中有函数的重载,这样就是正确的

public void hello(String a){
hello(String a,"123");
}
public void hello(String a,String b){
	
}

但是构造函数不行,这样会报错

public class Hello{
 public Hello(){
 }
 public Hello(String a){
 Hello(a,"123");
 }
 public Hello(String a,String b){
 }
}

而编译器会告诉你,这样(-。-)

public class Hello{
private String b;
 public Hello(){
 }
 public Hello(String a){
 	new Hello(a,"123");
 }
 public Hello(String a,String b){
 this.b=b;
 }
 public String getB(){ return this.b}
}

这样确实不报错了,但是这肯定不对,比如

访问b的时候就是空的了

public static void main(String[] args){
	String b=new Hello("666").getB();
    System.out.println(b);
}

按道理,会默认给它的b赋值为"123",但是为啥是null呢?

很简单,构造函数里面new Hello(a,"123");

这样是新创建了一个匿名的对象,而不是实例化了当前的对象,所以当前的对象还是空的吖。

那怎么办呢?

我开始想到的办法是创建一个Init()函数,构造函数都调用这个函数,这样就没问题了。

但是这样显得我很呆!我觉得Java不可能不支持这样的语法。!。!

其实上学的时候讲过,但是这个真的好久没用的。就是this();

public class Hello{
private String b;
 public Hello(){
 }
 public Hello(String a){
 	this(a,"123");
 }
 public Hello(String a,String b){
 	this.b=b;
 }
 public String getB(){ return this.b}
}

需要注意的是,必须放在构造函数的第一行,这样的目的是确保复制成功,可能是有的人写着写着就忘了赋值了。

果然不用就会忘记啊,记得当时写构造函数的时候写的可6了,嘿嘿嘿。