关闭

构造函数的变量命名

355人阅读 评论(0) 收藏 举报
分类:
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就代表哪个对象。


 

 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:40533次
    • 积分:1150
    • 等级:
    • 排名:千里之外
    • 原创:118篇
    • 转载:12篇
    • 译文:0篇
    • 评论:11条
    文章分类
    最新评论