• Java创建对象的两种情况(显式创建和隐含创建)


    对象是对类的实例化。对象具有状态和行为,变量用来表明对象的状态,方法表明对象所具有的行为。 Java 对象的生命周期包括创建、使用和清除,本文详细介绍对象的创建,在 Java 语言中创建对象分显式创建与隐含创建两种情况。

    显式创建对象

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

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

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

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

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

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

    1. java.lang.Class Class 类对象名称 = java.lang.Class.forName(要实例化的类全称);
    2. 类名 对象名 = (类名)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

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

    示例代码如下:

    1. public class Student implements Cloneable {
    2. // 实现 Cloneable 接口
    3. private String Name; // 学生名字
    4. private int age; // 学生年龄
    5. public Student(String name,int age) {
    6. // 构造方法
    7. this.Name = name;
    8. this.age = age;
    9. }
    10. public Student() {
    11. this.Name = "name";
    12. this.age = 0;
    13. }
    14. public String toString() {
    15. return"学生名字:"+Name+",年龄:"+age;
    16. }
    17. public static void main(String[] args)throws Exception {
    18. System.out.println("---------使用 new 关键字创建对象---------");
    19. // 使用new关键字创建对象
    20. Student student1 = new Student("小刘",22);
    21. System.out.println(student1);
    22. System.out.println("-----------调用 java.lang.Class 的 newInstance() 方法创建对象-----------");
    23. // 调用 java.lang.Class 的 newInstance() 方法创建对象
    24. Class c1 = Class.forName("Student");
    25. Student student2 = (Student)c1.newInstance();
    26. System.out.println(student2);
    27. System.out.println("-------------------调用对象的 clone() 方法创建对象----------");
    28. // 调用对象的 clone() 方法创建对象
    29. Student student3 = (Student)student2.clone();
    30. System.out.println(student3);
    31. }
    32. }

    对上述示例的说明如下:

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

    程序执行结果如下:

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

    隐含创建对象

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

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

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

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

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

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

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

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

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

    Java入门基础视频教程,java零基础自学就选黑马程序员Java入门教程(含Java项目和Java真题)

  • 相关阅读:
    一阶段Linux整理
    浅谈Web开发的三大主流框架:Angular、React和Vue.js
    荧光染料Cy7 酰肼,Cy7 hydrazide,Cy7 HZ参数及结构式解析
    Python爬虫实战案例——第六例
    图解LeetCode——1422. 分割字符串的最大得分(难度:简单)
    【电路笔记】-诺顿定理(Norton‘s Theorem)
    60天零基础干翻C++————双指针问题
    java有关的HttpsUtils工具类 https请求工具类
    全国所有地级市环境污染、企业、公路、固定资产、外商投资-最新面板数据
    信奥一本通1187:统计字符数
  • 原文地址:https://blog.csdn.net/Itmastergo/article/details/128181883