02_JavaSE之OOP--面向对象(对象的内存图、匿名对象、this)

面向对象(二)

一、对象在内存中的状态

  1.以下面的代码为例

 1 class Demo {
 2     
 3     public static void main(String[] args) {
 4         //创建对象
 5         Person p = new Person();
 6         
 7         //调用属性并赋值
 8         p.name = "李白";      //人的姓名赋值
 9         p.age = 49;            //人的年龄赋值
10         
11         //调用学习的方法 (调用行为)
12         p.study();
13         
14     }
15     
16 }
17 
18 //人的
19 class Person {
20     //成员变量
21     String name;                          //姓名
22     int age;                              //年龄    
23         
24     public void study {                    //人在学习
25     System.out.println("年龄为" + age + "的" + name + "正在学习");
26     }
27 }

  具体的执行方法,如图:

二、匿名对象

  接下来谈的只是简单的了解,并没有深入研究。

  1.匿名对象是什么

  所谓匿名对象也就是没有名字的对象。什么又叫有名字的对象呢?如:Person p = new Person()。这个就是有名字的对象,他的名字叫p。而直接new Person()就是没有名字的对象。

  2.匿名对象的应用场景是什么呢,它如何用呢?

  场景:匿名对象主要用在仅仅只调用一次的时候。那么他有什么好处呢?节省代码。

     匿名对象也可以作为参数传递。如:一个方法 setXXX( new Person() )。

  同时应知道,调用一次之后,匿名对象就是垃圾,会被垃圾回收机制回收。

  用法:以上面的代码为例。

1 Person p = new Person();
2 p.study();
3 
4 //匿名对象调用
5 new Person().study();

三、this的用法

  this是一个关键字,代表着当前对象的引用。也就是代表当前对象。

  正式说this之前我们先来了解一下private这个关键字。

  private是干什么呢?他表面的意思是私有的,为了类的属性不能被人随意修改(出于安全性考虑),因此有了private,protect,default,public等关键字。private是私有的,我们不能直接通过创建对象p,p.name赋值,那么我们如何赋值呢。这时候我们就得在类的内部提供一个方法去给他赋值,同时提供一个获取的方法即set/get方法。

 1 public class Person {
 2     //成员变量
 3     String name;                        //姓名
 4     int age;                            //年龄
 5 
 6     //set and get方法
 7     public String getName() {
 8         return name;
 9     }
10 
11     public void setName(String name) {
12         this.name = name;
13     }
14 
15     public int getAge() {
16         return age;
17     }
18 
19     public void setAge(int age) {
20         this.age = age;
21     }
22 }
23 
24 class Demo2 {
25     public static void main(String[] args){
26         Person p = new Person();
27         p.setAge(1);
28         p.setName("苏轼");
29         
30     }
31 }

  这个时候this就代表着当前对象的引用,this.name就是Person的成员变量name.用来区分成员变量和局部变量重名问题

 

如有错误之处,欢迎指正。

邮箱:it_chang@126.com

stay hungry,stay foolish.
原文地址:https://www.cnblogs.com/csiOS/p/8482262.html