对象是对类的实例化。对象具有状态和行为,变量用来表明对象的状态,方法表明对象所具有的行为。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() 方法

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

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创建对象详解相关推荐

  1. 1.7 Java创建对象详解(显式创建和隐含创建)

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

  2. Java创建对象详解:Java创建对象的几种方法

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

  3. Java 泛型详解(超详细的java泛型方法解析)

    Java 泛型详解(超详细的java泛型方法解析) 1. 什么是泛型 泛型:是一种把明确类型的工作推迟到创建对象或者调用方法的时候才去明确的特殊的类型.也就是说在泛型使用过程中,操作的数据类型被指定为 ...

  4. 常见的java设计模式详解

    常见的java设计模式详解 1. 根据目的来分 2 GoF的23种设计模式的功能 3.下面介绍几种常见的模式 单例(Singleton)模式 前言 1)单例(Singleton)模式的定义 2)特点 ...

  5. Java BigDecimal详解

    Java BigDecimal详解 1. BigDecimal概述 2. BigDecimal方法 2.1 BigDecimal常用构造函数 2.2 BigDecimal常用方法详解 3. BigDe ...

  6. Apache Thrift - java开发详解

    2019独角兽企业重金招聘Python工程师标准>>> Apache Thrift - java开发详解 博客分类: java 架构 中间件 1.添加依赖 jar <depen ...

  7. Java泛型详解-史上讲解最详细的,没有之一

    目录 1. 概述 2. 一个栗子 3. 特性 4. 泛型的使用 4.1 泛型类 4.2 泛型接口 4.3 泛型通配符 4.4 泛型方法 4.4.1 泛型方法的基本用法 4.4.2 类中的泛型方法 4. ...

  8. Java虚拟机详解----JVM常见问题总结

    [正文] 声明:本文只是做一个总结,有关jvm的详细知识可以参考本人之前的系列文章,尤其是那篇:Java虚拟机详解04----GC算法和种类.那篇文章和本文是面试时的重点. 面试必问关键词:JVM垃圾 ...

  9. java 泛型详解、Java中的泛型方法、 java泛型详解

    本文参考java 泛型详解.Java中的泛型方法. java泛型详解 概述 泛型在java中有很重要的地位,在面向对象编程及各种设计模式中有非常广泛的应用. 什么是泛型?为什么要使用泛型? 泛型,即& ...

最新文章

  1. AI论文引用排行榜丨微软第一,清华第九;Alphabet董事长看AI:美国仅领先5年,大陆追赶速度快;
  2. buider模式的缺陷
  3. iOS获取键盘的高度
  4. 汇编中的数组分配和指针
  5. 认识CentOS下boot目录和el5、el6文件
  6. [云炬创业管理笔记]第九章为创业成败而准备测试1
  7. appium定位WebView页面元素
  8. 采用redis+ThreadLocal获取全局的登录用户信息(二)增加token快失效时刷新
  9. Android IPC系列(一):AIDL使用详解
  10. Spring boot Tomcat配置
  11. 【软件开发底层知识修炼】二十四 ABI之函数调用约定
  12. 报告:5G 网络切片可能会给不法分子留下漏洞!
  13. DataTable 去重合并
  14. html 幻灯片原理,js幻灯片
  15. 教你如何测试U盘读写速度?
  16. c++中内存拷贝函数(C++ memcpy)详解
  17. FFmpeg 命令详解
  18. tf.matmul函数用法
  19. WIN10 设置或取消自动关机
  20. 尼康D90对焦模式图解

热门文章

  1. centos usb转网口_CentOS5.6系统中安装并使用USB无线网卡(配置成功) 转
  2. sata接口测试软件,如何查看电脑是否支持USB 3.0?Hwinfo32检测SATA端口的方法
  3. iterm php,iTerm2笔记
  4. python中location_使用python请求模块时的LocationValueError
  5. 搜狐视频开放平台的申请使用方法
  6. 腾讯视频怎么禁止别人登录我的会员
  7. 怎么解决机械革命笔记本蓝屏问题
  8. python内置函数面向对象_Pyhton——面向对象进阶二:类的内置函数补充、描述符...
  9. oracle 表关联索引优化,Oracle执行计划调优-超级大表关联超级小表的性能调优
  10. 大于小于优化_架构 - 以MySQL为例,详解数据库索引原理及深度优化