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.
  • 相关阅读:
    MYSQL DDL语句
    Centos-610-Jenkins-CI系列开篇
    Centos610-FastDFS系列篇
    Oracle内存调整办法
    IIS网站安全控制
    在Docker里面安装oracle11R2
    在Centos7.*里面安装MSSQL
    在Docker上安装MSSQL
    Centos6.*安装新版Nginx1.19.5支持众多新功能
    Centos6.*同步系统时间
  • 原文地址:https://www.cnblogs.com/csiOS/p/8482262.html
Copyright © 2011-2022 走看看