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面向对象编程文章查看此处

相关文章
|
2天前
|
Java API
Java 对象释放与 finalize 方法
关于 Java 对象释放的疑惑解答,以及 finalize 方法的相关知识。
30 17
|
2天前
|
存储 安全 Java
Java编程中的对象序列化与反序列化
【10月更文挑战第22天】在Java的世界里,对象序列化和反序列化是数据持久化和网络传输的关键技术。本文将带你了解如何在Java中实现对象的序列化与反序列化,并探讨其背后的原理。通过实际代码示例,我们将一步步展示如何将复杂数据结构转换为字节流,以及如何将这些字节流还原为Java对象。文章还将讨论在使用序列化时应注意的安全性问题,以确保你的应用程序既高效又安全。
|
11天前
|
存储 Java 数据管理
Java零基础-Java对象详解
【10月更文挑战第7天】Java零基础教学篇,手把手实践教学!
22 6
|
15天前
|
Oracle Java 关系型数据库
重新定义 Java 对象相等性
本文探讨了Java中的对象相等性问题,包括自反性、对称性、传递性和一致性等原则,并通过LaptopCharger类的例子展示了引用相等与内容相等的区别。文章还介绍了如何通过重写`equals`方法和使用`Comparator`接口来实现更复杂的相等度量,以满足特定的业务需求。
14 3
|
15天前
|
存储 Java
Java编程中的对象序列化与反序列化
【10月更文挑战第9天】在Java的世界里,对象序列化是连接数据持久化与网络通信的桥梁。本文将深入探讨Java对象序列化的机制、实践方法及反序列化过程,通过代码示例揭示其背后的原理。从基础概念到高级应用,我们将一步步揭开序列化技术的神秘面纱,让读者能够掌握这一强大工具,以应对数据存储和传输的挑战。
|
16天前
|
存储 Java 数据管理
Java零基础-Java对象详解
【10月更文挑战第3天】Java零基础教学篇,手把手实践教学!
11 1
|
20天前
|
XML Java Maven
在 Cucumber 测试中自动将 Cucumber 数据表映射到 Java 对象
在 Cucumber 测试中自动将 Cucumber 数据表映射到 Java 对象
38 7
|
19天前
|
Java 数据安全/隐私保护
java类和对象
java类和对象
20 5
|
2月前
|
Java
java基础(12)抽象类以及抽象方法abstract以及ArrayList对象使用
本文介绍了Java中抽象类和抽象方法的使用,以及ArrayList的基本操作,包括添加、获取、删除元素和判断列表是否为空。
23 2
java基础(12)抽象类以及抽象方法abstract以及ArrayList对象使用
|
20天前
|
Java 编译器 C语言
【一步一步了解Java系列】:类与对象的联系
【一步一步了解Java系列】:类与对象的联系
17 4