this

JAVA学习网 2017-09-27 08:54:03

看如下代码:

 1 public class ThisDemo{
 2     public static void main(String[] args){
 3         Dog d1 = new Dog(2,"小黄");
 4         Person p1 = new Person(d1,101,"周易");
 5         Person p2 = new Person(d1,10,"易周");
 6         p1.showInfo();
 7         p2.dog.showInfo();
 8     }
 9 }
10 //定义一个人类
11 class Person{
12     //成员变量
13     int age;
14     String name;
15     Dog dog;//引用类型
16     public Person(Dog dog,int age,String name){
17         /*可读性不好
18          age=age;
19          name=name;
20          */
21         //使用this区分局部变量与实例变量,提高可读性
22         this.age=age;
23         this.name=name;
24         this.dog = dog;
25     }
26     //显示人名字
27     public void showInfo(){
28         System.out.println("人名是:"+name);
29     }
30 }
31 class Dog{
32     int age;
33     String name;
34     public Dog(int age,String name){
35         this.age = age;
36         this.name = name;
37     }
38     public void showInfo(){
39         System.out.println("狗名叫"+this.name);
40     }
41 }

通过class Person创建了2个对象,在创建对象p1、p2的同时,java虚拟机将this代词指向了创建的对象p1、p2。this是属于对象的而不是属于类的。this只能在类定义方法中使用,不能在外部使用。

引用数据类型在内存中存在的形式:

如果数据是基本类型可以简单的认为将数据放置在源对象空间中,String对象准确地讲指向外边的空间。

p1空间的d1对象只是在此空间存储了一个d1引用名(对象名),d1对象放置的数据并不在p1里而是指向了独立的d1空间,所以说当p2也如此这般,p2里的d1对象也将指向同一个(地址)独立d1空间,达到了共享。当通过p1改变d1属性、属性值时,于是p2也会做相同改变。

阅读(776) 评论(0)