都知道,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了,嘿嘿嘿。