构造函数的变量命名

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就代表哪个对象。


 

 

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/l55iuming/article/details/46812075
个人分类: javase基础学习
上一篇封装(面向对象)
下一篇this的应用
想对作者说点什么? 我来说一句

c语言匈牙利试变量命名法则

2010年12月25日 37KB 下载

没有更多推荐了,返回首页

关闭
关闭