3分钟速懂匿名对象 | 带你学《Java面向对象编程》之六-阿里云开发者社区

开发者社区> Java开发者> 正文

3分钟速懂匿名对象 | 带你学《Java面向对象编程》之六

简介: 当编程过程中仅需要调用一次对象时,为了简便编程过程,减少内存负担,诞生了对象的新形态:匿名对象。

上一篇:“生而有值”—教你使用构造函数 | 带你学《Java面向对象编程》之五
【本节目标】
通过阅读本节,你将了解到使用匿名对象时内存发生的变化,学会直接使用构造函数生成匿名对象便捷地满足一次性调用需求以及各类数据的灵活传递调用。

6.1 匿名对象

经过分析可以发现,利用构造方法可以传递属性数据,于是现在进一步分析对象的产生格式:
定义对象的名称:类名称 对象名称 = null;
实例化对象:对象名称 =new 类名称()。
如果这时只通过实例化对象来进行类的操作也是可以的,而这种形式的对象由于没有名字就称为叫它匿名对象。
范例:观察匿名对象

class Person{    //定义一个类
    private String name ;  //人员的姓名
    private int age ;       //人员的年龄
//方法名称与类名称相同,并且无返回值定义
    public Person (String n, int a) {   //定义有参构造
        name = n ;           //为类中的属性赋值(初始化)
        age = a ;            //为类中的属性赋值(初始化)
    }
    public void tell() {
        System.out.println(“姓名:”+ name +”、年龄:”+age) ;
    } 
    public void setName(String n){
        name = n ;
    }
    public void setAge(int a){
        age = a ;
    }
    public String getName(){
        return name ;
    } 
    public int getAge (){
        return age;
    } 
}
public class JavaDemo {      //主类
     public static void main(String args[]) {
         new Person(“张三”, 10).tell() ;            //进行方法的调用
     }
}

image.png
图一 执行结果一

此时依然通过了对象进行了类中tell()方法的调用,但是由于此对象没有任何的引用名称,所以该对象使用一次之后就将成为垃圾,而所有的垃圾将被GC进行回收与释放。
现在发现此时程序中已经存在有构造方法了,那么下面通过一个程序来利用构造方法进行一次内存分析。
范例:编写一个分析程序

class Message{
   private String title ;
   public Message(String t){
       title = t ;
   }
   public String getTitle(){
      return title;
   }
   public void setTitle( String t){     //具有修改功能
      title = t ;
   }
}
class Person{    //定义一个类
    private String name ;  //人员的姓名
    private int age ;       //人员的年龄
    public Person (Message msg, int a) {   //定义有参构造
        name = msg.getTitle()  ;           //为类中的属性赋值(初始化)
        age = a ;            //为类中的属性赋值(初始化)
    }
    public Message getInfo(){
        return new Message(name + “:” + age)
    }
    public void tell() {
        System.out.println(“姓名:”+ name +”、年龄:”+age) ;
    } 
}
public class JavaDemo {      //主类
    public static void main(String args[]) {
        Message msg = new Message(“mldn”)
        Person per =new Person(msg , 20);
        msg = per.getInfo() ;
        System.out.println(msg.getTitle());
    }
}

image.png
图二 执行结果二

通过此程序进行一个简短的内存分析。

image.png
图三 内存分析结果

只要是方法都可以传递任意的数据类型(基本数据类型、引用数据类型)。
想学习更多的Java的课程吗?从小白到大神,从入门到精通,更多精彩不容错过!免费为您提供更多的学习资源。
本内容视频来源于阿里云大学

下一篇:揭开this的神秘面纱-属性篇 | 带你学《Java面向对象编程》之七
更多Java面向对象编程文章查看此处

版权声明:本文中所有内容均属于阿里云开发者社区所有,任何媒体、网站或个人未经阿里云开发者社区协议授权不得转载、链接、转贴或以其他方式复制发布/发表。申请授权请邮件developerteam@list.alibaba-inc.com,已获得阿里云开发者社区协议授权的媒体、网站,在转载使用时必须注明"稿件来源:阿里云开发者社区,原文作者姓名",违者本社区将依法追究责任。 如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:developer2020@service.aliyun.com 进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
+ 订阅

Java开发者成长课堂

官方博客
官网链接