前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Java学习历程之————进阶篇(五)

Java学习历程之————进阶篇(五)

作者头像
用户5410712
发布2022-06-01 18:06:31
发布2022-06-01 18:06:31
18900
代码可运行
举报
文章被收录于专栏:居士说AI居士说AI
运行总次数:0
代码可运行

愿每次回忆,对生活都不感到负疚。

——郭小川

前言:

本周我们学习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 虚拟机自带的垃圾回收机制处理。

四、实战

下面我简单的介绍一下常用的两种对象的创建方法,后面的学习过程中我们也会继续用到。运行结果及截图如下:

源码如下:

代码语言:javascript
代码运行次数:0
运行
复制
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() 实例方法小编暂时没调试出来,大家有兴趣可以试一下。好了,我们下周再会~

编辑:玥怡居士|审核:世外居士

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-01-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 IT进阶之旅 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档