Java创建对象(显式创建和隐含创建)

 更新时间:2021年09月26日 16:30:31   作者:编程帮  
本文详细介绍对象的创建,在 Java 语言中创建对象分显式创建与隐含创建两种情况,显式创建和隐含创建,,需要的朋友可以参考下面文章的具体内容

对象是对类的实例化。对象具有状态和行为,变量用来表明对象的状态,方法表明对象所具有的行为。Java 对象的生命周期包括创建、使用和清除。

一、显式创建对象

对象的显式创建方式有 4 种。

1. 使用 new 关键字创建对象

这是常用的创建对象的方法,语法格式如下:

类名 对象名 = new 类名();

2. 调用 java.lang.Class

或者 java.lang.reflect.Constuctor 类的 newlnstance() 实例方法

在 Java 中,可以使用 java.lang.Class 或者 java.lang.reflect.Constuctor 类的 newlnstance() 实例方法来创建对象,代码格式如下:

java.lang.Class Class 类对象名称 = java.lang.Class.forName(要实例化的类全称);
类名 对象名 = (类名)Class类对象名称.newInstance();

调用 java.lang.Class 类中的 forName() 方法时,需要将要实例化的类的全称(比如 com.mxl.package.Student)作为参数传递过去,然后再调用 java.lang.Class 类对象的 newInstance() 方法创建对象。

3. 调用对象的 clone() 方法

该方法不常用,使用该方法创建对象时,要实例化的类必须继承 java.lang.Cloneable 接口。 调用对象的 clone() 方法创建对象的语法格式如下:

类名对象名 = (类名)已创建好的类对象名.clone();

4. 调用 java.io.ObjectlnputStream 对象的 readObject() 方法

例 1:

下面创建一个示例演示常用的前三种对象创建方法。示例代码如下:

public class Student implements Cloneable {   
    // 实现 Cloneable 接口
    private String Name;    // 学生名字
    private int age;    // 学生年龄
    public Student(String name,int age) {    
        // 构造方法
        this.Name = name;
        this.age = age;
    }
    public Student() {
        this.Name = "name";
        this.age = 0;
    }
    public String toString() {
        return"学生名字:"+Name+",年龄:"+age;
    }
    public static void main(String[] args)throws Exception {
        System.out.println("---------使用 new 关键字创建对象---------");
       
        // 使用new关键字创建对象
        Student student1 = new Student("小刘",22);
        System.out.println(student1);
        System.out.println("-----------调用 java.lang.Class 的 newInstance() 方法创建对象-----------");
       
        // 调用 java.lang.Class 的 newInstance() 方法创建对象
        Class c1 = Class.forName("Student");
        Student student2 = (Student)c1.newInstance();
        System.out.println(student2);
        System.out.println("-------------------调用对象的 clone() 方法创建对象----------");
        // 调用对象的 clone() 方法创建对象
        Student student3 = (Student)student2.clone();
        System.out.println(student3);
    }
}

对上述示例的说明如下:

  • 使用 new 关键字或 Class 对象的 newInstance() 方法创建对象时,都会调用类的构造方法。
  • 使用 Class 类的 newInstance() 方法创建对象时,会调用类的默认构造方法,即无参构造方法。
  • 使用 Object 类的 clone() 方法创建对象时,不会调用类的构造方法,它会创建一个复制的对象,这个对象和原来的对象具有不同的内存地址,但它们的属性值相同。
  • 如果类没有实现 Cloneable 接口,则 clone。方法会抛出 java.lang.CloneNotSupportedException 异常,所以应该让类实现 Cloneable 接口。

程序执行结果如下:

---------使用 new 关键字创建对象---------
学生名字:小刘,年龄:22
-----------调用 java.lang.Class 的 newInstance() 方法创建对象-----------
学生名字:name,年龄:0
-------------------调用对象的done()方法创建对象----------
学生名字:name,年龄:0

二、隐含创建对象

除了显式创建对象以外,在 Java 程序中还可以隐含地创建对象,例如下面几种情况。

1)String strName = "strValue",其中的“strValue”就是一个 String 对象,由 Java 虚拟机隐含地创建。

2)字符串的“+”运算符运算的结果为一个新的 String 对象,示例如下:

String str1 = "Hello";
String str2 = "Java";
String str3 = str1+str2;    // str3引用一个新的String对象


3)当 Java 虚拟机加载一个类时,会隐含地创建描述这个类的 Class 实例。

提示:类的加载是指把类的 .class 文件中的二进制数据读入内存中,把它存放在运行时数据区的方法区内,然后在堆区创建一个 java.lang.Class 对象,用来封装类在方法区内的数据结构。

无论釆用哪种方式创建对象,Java 虚拟机在创建一个对象时都包含以下步骤:

  • 给对象分配内存。
  • 将对象的实例变量自动初始化为其变量类型的默认值。
  • 初始化对象,给实例变量赋予正确的初始值。

注意:每个对象都是相互独立的,在内存中占有独立的内存地址,并且每个对象都具有自己的生命周期,当一个对象的生命周期结束时,对象就变成了垃圾,由 Java 虚拟机自带的垃圾回收机制处理。

到此这篇关于Java创建对象(显式创建和隐含创建)的文章就介绍到这了,更多相关Java创建对象内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java如何根据根据IP地址获取省市

    Java如何根据根据IP地址获取省市

    这篇文章主要为大家详细介绍了两种在Java中获取IP地址对应地理位置信息的方法,分别是使用ip2region库和GeoIP库,感兴趣的小伙伴可以了解下
    2025-01-01
  • java RSAUtils 加密工具类操作

    java RSAUtils 加密工具类操作

    这篇文章主要介绍了java RSAUtils 加密工具类操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08
  • Springboot集合前端实现进度条显示功能实例

    Springboot集合前端实现进度条显示功能实例

    这篇文章主要介绍了使用进度条提升用户体验的原因,特别是在处理大文件上传、下载或长时间运行的操作时,进度条通过实时反馈任务进度,减少用户的不确定感,文中给出了详细的代码示例,需要的朋友可以参考下
    2024-11-11
  • 详解Spring Boot 事务的使用

    详解Spring Boot 事务的使用

    spring Boot 使用事务非常简单,首先使用注解 @EnableTransactionManagement 开启事务支持后,然后在访问数据库的Service方法上添加注解 @Transactional 便可。接下来通过本文重点给大家介绍spring boot事务的使用,需要的的朋友参考下吧
    2017-04-04
  • Java使用正则表达式判断独立字符的存在(代码示例)

    Java使用正则表达式判断独立字符的存在(代码示例)

    通过使用正则表达式,我们可以更加灵活地判断字符串中是否包含特定的字符,并且可以控制匹配的条件,如独立的字符,这为我们处理字符串提供了更多的选择和功能,这篇文章主要介绍了Java使用正则表达式判断独立字符的存在,需要的朋友可以参考下
    2023-10-10
  • Java RPC框架熔断降级机制原理解析

    Java RPC框架熔断降级机制原理解析

    这篇文章主要介绍了Java RPC框架熔断降级机制原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • Mybatis之动态SQL使用小结(全网最新)

    Mybatis之动态SQL使用小结(全网最新)

    MyBatis令人喜欢的一大特性就是动态SQL, 在使用JDBC的过程中, 根据条件进行SQL的拼接是很麻烦且很容易出错的,MyBatis通过OGNL来进行动态SQL的使用解决了这个麻烦,对Mybatis动态SQL相关知识感兴趣的朋友跟随小编一起看看吧
    2024-05-05
  • Java CompletableFuture 异步超时实现深入研究

    Java CompletableFuture 异步超时实现深入研究

    这篇文章主要为大家介绍了Java CompletableFuture 异步超时实现深入研究,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-02-02
  • 利用Java实现图片转化为ASCII图的示例代码

    利用Java实现图片转化为ASCII图的示例代码

    本文将详细讲解如何利用 Java 实现图片转化为 ASCII 图,从项目背景与意义、相关技术知识,到系统需求与架构设计,再到详细实现思路、完整代码和代码解读,最后对项目进行总结与展望,需要的朋友可以参考下
    2025-03-03
  • SpringBoot用JdbcTemplates操作Mysql实例代码详解

    SpringBoot用JdbcTemplates操作Mysql实例代码详解

    JdbcTemplate是Spring框架自带的对JDBC操作的封装,目的是提供统一的模板方法使对数据库的操作更加方便、友好,效率也不错,这篇文章主要介绍了SpringBoot用JdbcTemplates操作Mysql
    2022-10-10

最新评论