class Person { private String name; private int age; Person() { System.out.println("name="+name+",age="+age); cry(); } Person(String n)//注意!!!! { name=n; System.out.println("name="+name+",age="+age); cry(); } public void cry() { System.out.println("cry...."); } } class PersonDemo2 { public static void main(String[] args) { Person p1=new Person("lisi"); p1.cry(); } }
代码注意部分构造函数的变量命名为n,但这样没有阅读性,因为此变量是代表姓名,所以我们命名为 name;
class Person { private String name; private int age; Person() { System.out.println("name="+name+",age="+age); cry(); } Person(String name)//!!!!! { name=name;//!!!!! System.out.println("name="+name+",age="+age); cry(); } public void cry() { System.out.println("cry...."); } } class PersonDemo2 { public static void main(String[] args) { Person p1=new Person("lisi"); p1.cry(); } }
结果却出现name=null;而不是lisi
Person(String name) {name=name;}
而当我们把局部变量设为n时,却可以赋值,这是因为当命名为name时,构造函数并没有把局部变量的name值赋给成员变量;
原因:赋值时,构造函函数里先在局部变量中找变量,找到了就使用局部变量,若没找到则找成员使用,例如当局部和成员的都有name时,构造函数的就使用局部变量的name,而不会调用成员;
若要赋值,就应该把赋值对象标记一下,引用关键字 this
this:看上去,是用于区分局部变量和成员变量同名情况;
class Person { private String name; private int age; Person() { System.out.println("name="+name+",age="+age); cry(); } Person(String name) { this.name=name;//////!!!!! System.out.println("name="+name+",age="+age); cry(); } public void cry() { System.out.println("cry...."); } } class PersonDemo2 { public static void main(String[] args) { Person p1=new Person("lisi"); p1.cry(); } }
显示lisi!!
this:就代表本类的对象,代表所在函数所属对象的引用;
简单说:哪个对象在调用this所在的函数,this就代表哪个对象。
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-11-12 09:57:30