愿每次回忆,对生活都不感到负疚。
——郭小川
前言:
本周我们学习Java对象的创建,我们在前面进阶篇(一)中已经详细说明了类和对象的区别与联系,大家还记得么?比如“人”是一个类,而编写此篇推文的我和正在看此推文的你都是一个对象,类是一个抽象的概念,而对象就是一个具体的事物。对象是对类的实例化。对象具有状态和行为,变量用来表明对象的状态,方法表明对象所具有的行为。Java 对象的生命周期包括创建、使用和清除,本文详细介绍对象的创建,在 Java 语言中创建对象分显式创建与隐含创建两种情况。下面我们分别来说明。
一、显式创建对象
对象的显式创建方式有 4 种。
1.1、使用 new 关键字创建对象
这是常用的创建对象的方法,语法格式如下:
类名 对象名 = new 类名();
1.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() 方法创建对象。
1.3、调用对象的 clone() 方法
该方法不常用,使用该方法创建对象时,要实例化的类必须继承 java.lang.Cloneable 接口。调用对象的 clone() 方法创建对象的语法格式如下:
类名对象名 = (类名)已创建好的类对象名.clone();
1.4、用 java.io.ObjectlnputStream 对象的 readObject() 方法
二、隐式创建对象
Java 程序中还可以隐含地创建对象,例如下面几种情况。
1)String strName = "strValue",其中的“strValue”就是一个 String 对象,由 Java 虚拟机隐含地创建。
2.1
2)字符串的“+”运算符运算的结果为一个新的 String 对象,示例如下:
String str1 = "Hello";
String str2 = "Java";
String str3 = str1+str2; // str3引用一个新的String对象
2.2
3)当 Java 虚拟机加载一个类时,会隐含地创建描述这个类的 Class 实例。
2.3
提示:类的加载是指把类的 .class 文件中的二进制数据读入内存中,把它存放在运行时数据区的方法区内,然后在堆区创建一个 java.lang.Class 对象,用来封装类在方法区内的数据结构。
三、创建对象步骤
无论釆用哪种方式创建对象,Java 虚拟机在创建一个对象时都包含以下步骤:
① 给对象分配内存。
② 将对象的实例变量自动初始化为其变量类型的默认值。
③ 初始化对象,给实例变量赋予正确的初始值。
注意:每个对象都是相互独立的,在内存中占有独立的内存地址,并且每个对象都具有自己的生命周期,当一个对象的生命周期结束时,对象就变成了垃圾,由 Java 虚拟机自带的垃圾回收机制处理。
四、实战
下面我简单的介绍一下常用的两种对象的创建方法,后面的学习过程中我们也会继续用到。运行结果及截图如下:
源码如下:
package second.Test5;
import java.lang.*;
public class People implements Cloneable {
// 实现 Cloneable 接口
private String Name; // 名字
private String sex; // 性别
public People(String name,String sex) {
// 构造方法
this.Name = name;
this.sex = sex;
}
public People() {
this.Name = "小陈";
this.sex = "男";
}
public String toString() {
return"名字:"+Name+",性别:"+sex;
}
public static void main(String[] args)throws Exception {
System.out.println("---使用 new 关键字创建对象---");
// 使用new关键字创建对象
People people1 = new People("小李","女");//调用两个参数的构造方法
System.out.println(people1);
People people2 = new People();//调用无参数的构造方法
System.out.println(people2);
System.out.println("---调用对象的 clone() 方法创建对象---");
// 调用对象的 clone() 方法创建对象
People people3 = (People)people2.clone();
System.out.println(people3);
}
}
小编有话说:
半学期的时光转瞬即逝,谢谢大家的陪伴,寒假将至,但我仍希望和大家一起按照之前的进度继续学习Java,学习犹如逆水行舟,不进则退。我们先攻克类和对象这座大山,小编现在也在努力学习中,调用 java.lang.Class类的 newlnstance() 实例方法小编暂时没调试出来,大家有兴趣可以试一下。好了,我们下周再会~
编辑:玥怡居士|审核:世外居士