构造函数的变量命名

原创 2015年07月09日 08:57:26
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就代表哪个对象。


 

 

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

有关复制构造函数和变量声明

  • 2013年05月23日 12:11
  • 196KB
  • 下载

C++类成员变量和构造函数初始化

内容整理自: C++中各种类型的成员变量的初始化方法 C++成员变量、构造函数的初始化顺序...

Java 类的实例变量初始化的过程 静态块、非静态块、构造函数的加载顺序

java中的块分为静态块(static{})和非静态块({}),这两种的执行是有区别的: 非静态块的执行时间是:在执行构造函数之前。 静态块的执行时间是:class文件加载时执行...

java中构造函数中变量初始化时机

我们知道,对象在调用自身构造函数时: 首先要通过JVM把class文件加载进来,并完成static代码块的初始化操作; 然后为变量分配栈空间,这样就可以用变量的值了。 但有一种情况比较特殊,就是在ne...

java变量,初始化快,构造函数的执行顺序

对于JAVA中类的初始化是一个很基础的问题,其中的一些问题也是易被学习者所忽略。当在编写代码的时候碰到时,常被这些问题引发的错误,感觉莫名其妙。而且现在许多大公司的面试题,对于这方面的考查也是屡试不爽...

java反射,获取类的方法,成员变量,构造函数信息

package com.office;import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java...

Java反射机制:获取成员变量和构造函数的信息

成员变量 成员变量也是对象 Field类封装了关于成员变量的操作 getFields()获取所有public成员变量的信息 getDeclaredFields()获取所有自己声明的变量 1.Cla...

黑马程序员_06_面向对象_成员变量_匿名对象_封装_构造函数_thisPrivate

---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------   0501-0501-0...

QT中用父类构造函数初始化子类的成员变量

分类: C++技术总结 2012-02-27 17:11 998人阅读 评论(0) 收藏 举报 qtstringclass2010   2010-12-21 20:44 ...

OC中的点语法,成员变量,@property和@synthesize:id类型,构造函数

Xcode特有的注释   #pragma  mark - 年龄的geter和seter方法   快速寻找到对应的代码 一.点语法: 1.  利用点语法替换set方法和get方法 ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:构造函数的变量命名
举报原因:
原因补充:

(最多只允许输入30个字)