This 的作用
- 解决类变量与局部变量重名问题
- this永远代表的是调用某个变量或方法的类对象
先看看没有this的情况
class Person { private String name; Person(String name) { name = name;//这里的两个name都是构造方法形参的name,与类变量name无关 } public void speak() { System.out.println("I am:" + name); } } class PersonTest { public static void main(String[] args) { Person person = new Person("武则天"); person.speak(); } }
结果:
I am:null
由结果可见,我们调用有参构造方法的参数并没有传递给Person的类变量“name”
加上this关键字
Person(String name) { this.name = name; }
结果
I am:武则天
二:this在构造函数之间的调用
class Person { private String name; private String position; Person(String name) { this.name = name; } Person(String name,String position){ this(name);//注意:这里的this后面没有小数点,它就是代表一个对象的引用 this.position=position; } public void speak(){ System.out.println(name+"是大唐的"+position); } } class PersonTest { public static void main(String[] args) { Person p1 = new Person(" 狄仁杰","宰相"); p1.speak(); } }
结果
狄仁杰是大唐的宰相
this的位置很重要。在构造函数当中,this必须放在第一行。
如下:把this(name)没有放在第一行,此时idea立即报错并提示this应该在第一行。
Person(String name,String position){ this.position=position; this(name); }
以下代码演示,请仔细阅读
class Person { private String name; private String position; Person(String name) { this.name ="武则天"; System.out.println("i am---"+this.name); } Person(String name,String position){ this(name); System.out.println("i am==="+name); this.name=name; this.position=position; System.out.println("i am"+name); } public void speak(){ System.out.println(name+"是大唐的"+position); } } class PersonTest { public static void main(String[] args) { Person p1 = new Person(" 狄仁杰","宰相"); p1.speak(); } }
结果
i am---武则天 i am=== 狄仁杰 i am 狄仁杰 狄仁杰是大唐的宰相
后记:
2020年2月29日 星期六 上海 雨 冷 农历2020年二月初七
每4年才会有2月29日