zoukankan      html  css  js  c++  java
  • 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.
  • 相关阅读:
    Haskell Interactive Development in Emacs
    Access Java API in Groovy Script
    手工设置Eclipse文本编辑器的配色
    Color Theme of Emacs
    Gnucash的投资记录
    Special Forms and Syntax Sugars in Clojure
    Use w3m as Web Browser
    SSE指令集加速之 I420转BGR24
    【图像处理】 增加程序速度的方法
    TBB 入门笔记
  • 原文地址:https://www.cnblogs.com/csiOS/p/8482262.html
Copyright © 2011-2022 走看看