java中this的两个作用--区分参数和域/调用同类的其他构造函数
2014-06-18 00:03
519 查看
使用this调用本类中的属性 现在观察以下代码,看会有那些问题: public void setName(String name){ name = name ; } 这里面的两个name都是setName方法中的name参数。 此时,特别希望可以通过一个指定的标识明确的表示要把传入的name参数的值给类中的属性,所以此时就需要使用this关键字,使用this.name就表示类中的属性。 class Person{ private String name ; private int age ; public Person(String name,int age){ this.setName(name) ; this.setAge(age) ; } public void setName(String name){ this.name = name ; } public void setAge(int age){ this.age = age ; } public String getName(){ return this.name ; } public int getAge(){ return this.age ; } public void print(){ System.out.println("姓名:"+this.name+",年龄:"+this.age) ; } }; public class Demo35{ public static void main(String args[]){ Person p1 = new Person("张三",30) ; p1.print() ; } }; 使用this还可以从一个构造方法中调用其他构造方法。 例如:有以下一个要求,一个类中存在了三个构造方法,但是要求,不管怎么调用,最终都要求可以在对象实例化的时候打印一个“新的对象产生了”的提示。 class Person{ private String name ; private int age ; public Person(){ System.out.println("新的对象产生了。。。") ; } public Person(String name){ System.out.println("新的对象产生了。。。") ; this.setName(name) ; } public Person(String name,int age){ System.out.println("新的对象产生了。。。") ; this.setName(name) ; this.setAge(age) ; } public void setName(String name){ this.name = name ; } public void setAge(int age){ this.age = age ; } public String getName(){ return this.name ; } public int getAge(){ return this.age ; } public void print(){ System.out.println("姓名:"+this.name+",年龄:"+this.age) ; } }; 以上代码虽然可以实现功能,但是同样的代码出现了三次,而且后面的两次出现纯属多余吧。用this()的形式可以调用类中的无参构造方法。 class Person{ private String name ; private int age ; public Person(){ System.out.println("新的对象产生了。。。") ; } public Person(String name){ // 最终都是调用无参构造方法 this() ; this.setName(name) ; } public Person(String name,int age){ this(name) ; this.setAge(age) ; } public void setName(String name){ this.name = name ; } public void setAge(int age){ this.age = age ; } public String getName(){ return this.name ; } public int getAge(){ return this.age ; } public void print(){ System.out.println("姓名:"+this.name+",年龄:"+this.age) ; } }; public class Demo36{ public static void main(String args[]){ Person p1 = new Person("张三",30) ; p1.print() ; } }; 注意点1: 如果使用了this调用其他构造方法,则此语句,必须写在构造方法的首行。 public void fun(){ // 发现在调用fun方法的时候,必须先设置name的值 this("zhangsan") ; } public Person(String name,int age){ this.setAge(age) ; this(name) ; //--> 必须放在首行 } 注意点2: 使用this可以调用本类中的其他构造方法,但是至少留一个构造方法,作为程序的出口。 public Person(){ this("a",10) ; System.out.println("新的对象产生了。。。") ; } public Person(String name){ // 最终都是调用无参构造方法 this() ; this.setName(name) ; } public Person(String name,int age){ this(name) ; //--> 必须放在首行 this.setAge(age) ; } this最重要的特性 —— 表示当前对象 当前对象在程序中用以下形式体现: · 当前操作此方法的对象,就称为当前对象。 class Demo{ public void print(){ System.out.println(this) ; } }; public class Demo38{ public static void main(String args[]){ Demo d1 = new Demo() ; System.out.println(d1) ; d1.print() ; System.out.println("---------------------") ; Demo d2 = new Demo() ; System.out.println(d2) ; d2.print() ; } }; 回顾: 之前讲解的两个对象比较的程序。 // 在类的内部增加一个比较的方法 public boolean compare(Person p){ Person p1 = this ; Person p2 = p ; if(p1.name.equals(p2.name)&&p1.age==p2.age){ return true ; }else{ return false ; } } 分析程序的运行过程: class A{ private B b = null ; public A(){ this.b = new B(this) ; this.b.fun() ; } public void hello(){ System.out.println("Hello World!!!") ; } }; class B{ private A a = null ; public B(A a){ this.a = a ; } public void fun(){ this.a.hello() ; } }; public class OODemo40{ public static void main(String args[]){ A aa = new A() ; } };
相关文章推荐
- JAVA一个类有两个构造函数,当在一个构造函数中调用另外一个构造函数时为什么要用this.()而不能用类名.()
- java中的this和super的作用和异同和C++中调用父类的构造函数
- JAVA学习,this(),super()调用构造函数研究
- 使用this调用本类中的其他构造函数
- java一个方法形参有两个,如何在调用的时候只传入一个参数
- java 构造函数、非构造函数的this调用
- JAVA中super和this调用构造函数
- 关于java 反射 创建对象 调用 有参数 的 构造函数
- java中this语句来调用其他构造方法的规则
- this关键字的作用 使用this调用其他构造方法 使用this表示当前对象
- java中父类与子类, 不同的两个类中的因为构造函数由于递归调用导致栈溢出问题
- java:当父类无无参构造函数并且有其他构造函数时,子类不能调用默认构造函数
- Java与C++在构造函数中调用虚函数时的区别
- Java继承时构造函数的调用
- Oracle集合类型输出参数的PL/SQL存储过程及其Java调用
- Java中final修饰参数的作用之一
- 用java写的调用.net写的WebService时,调用成功,参数传不过去的原因
- dwr例子2调用有简单参数的java方法
- 关于Java中方法调用时参数的传递
- JAVA C# 构造函数调互相调用(构造函数调用另一个构造函数)的不同