今天同学给我发了这个图片,问我这是什么原因,我虽然知道这是this关键字的问题,但是看了半天没看出来,查找了资料以后才解决出来,突然感觉自己好菜。下面是我处理的代码和运行结果:
public class card {
private String name;
private double money;
public card() {
name = "无";
money = 10;
}
public card(String name1) {
// this();
this.name = "张三";
}
public card(String name2,double money1) {
// this();
this.money = 6000;
this.name = "张三";
}
public boolean check() {
if(money>=0) {
return true;
}else {
return false;
}
}
public void showInfo() {
boolean z=this.check();
if(z==true) {
System.out.println("办卡人姓名:"+name+"\t余额:" + money);
}else {
System.out.println("余额不足");
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
card c1 = new card();
c1.showInfo();
card c2 = new card("刘然然");
c2.showInfo();
card c3 = new card("刘然然",-6000);
c3.showInfo();
}
}
注意看,我再this()上加了注释,首先我们来看this()上没有注释的结果:
然后我们来看一下this()上加了注释的结果:
首先我们先来分析一下第一张运行结果:
第一张是this()没被注释,那么this()就会调用我们开头定义的无参构造方法,而我们无参构造方法中定义的name=无,money=10,调用以后name被我们的有参构造方法中的this.name=张三所覆盖,而money却无,所有我们看到第一张输出结果的第二行name=张三,money=10。第二个有参构造方法与第一个运行方式一样。
第二张运行结果:
下面运行结果的图片是我们把this()给注释了,因此有参构造方法没有调用无参构造方法,此时name赋值为张三,但是money没赋值,因此输出结果为:张三 0.0。
一开始错误的结果是因为:this(“张三”),在构造方法中这样使用是不对的,此时的this不知道调用那个构造方法。
this关键字有三种用法:
1.访问成员变量
private String name;
private double money;
public card(String name) {
this.name = name
}
这里的this.name指的就是成员变量的name,把有参构造中局部变量的值赋值给成员变量的name。
2.调用成员方法
3.访问构造方法。就是我们上面讲的。