Java創(chuàng)建對象(顯式創(chuàng)建和隱含創(chuàng)建)
對象是對類的實例化。對象具有狀態(tài)和行為,變量用來表明對象的狀態(tài),方法表明對象所具有的行為。Java 對象的生命周期包括創(chuàng)建、使用和清除。
一、顯式創(chuàng)建對象
對象的顯式創(chuàng)建方式有 4 種。
1. 使用 new 關鍵字創(chuàng)建對象
這是常用的創(chuàng)建對象的方法,語法格式如下:
類名 對象名 = new 類名();
2. 調用 java.lang.Class
或者 java.lang.reflect.Constuctor 類的 newlnstance() 實例方法
在 Java 中,可以使用 java.lang.Class 或者 java.lang.reflect.Constuctor 類的 newlnstance() 實例方法來創(chuàng)建對象,代碼格式如下:
java.lang.Class Class 類對象名稱 = java.lang.Class.forName(要實例化的類全稱); 類名 對象名 = (類名)Class類對象名稱.newInstance();
調用 java.lang.Class 類中的 forName() 方法時,需要將要實例化的類的全稱(比如 com.mxl.package.Student)作為參數(shù)傳遞過去,然后再調用 java.lang.Class 類對象的 newInstance() 方法創(chuàng)建對象。
3. 調用對象的 clone() 方法
該方法不常用,使用該方法創(chuàng)建對象時,要實例化的類必須繼承 java.lang.Cloneable 接口。 調用對象的 clone() 方法創(chuàng)建對象的語法格式如下:
類名對象名 = (類名)已創(chuàng)建好的類對象名.clone();
4. 調用 java.io.ObjectlnputStream 對象的 readObject() 方法
例 1:
下面創(chuàng)建一個示例演示常用的前三種對象創(chuàng)建方法。示例代碼如下:
public class Student implements Cloneable {
// 實現(xiàn) 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 關鍵字創(chuàng)建對象---------");
// 使用new關鍵字創(chuàng)建對象
Student student1 = new Student("小劉",22);
System.out.println(student1);
System.out.println("-----------調用 java.lang.Class 的 newInstance() 方法創(chuàng)建對象-----------");
// 調用 java.lang.Class 的 newInstance() 方法創(chuàng)建對象
Class c1 = Class.forName("Student");
Student student2 = (Student)c1.newInstance();
System.out.println(student2);
System.out.println("-------------------調用對象的 clone() 方法創(chuàng)建對象----------");
// 調用對象的 clone() 方法創(chuàng)建對象
Student student3 = (Student)student2.clone();
System.out.println(student3);
}
}
對上述示例的說明如下:
- 使用
new關鍵字或Class對象的newInstance()方法創(chuàng)建對象時,都會調用類的構造方法。 - 使用
Class類的newInstance()方法創(chuàng)建對象時,會調用類的默認構造方法,即無參構造方法。 - 使用
Object類的clone()方法創(chuàng)建對象時,不會調用類的構造方法,它會創(chuàng)建一個復制的對象,這個對象和原來的對象具有不同的內存地址,但它們的屬性值相同。 - 如果類沒有實現(xiàn)
Cloneable接口,則clone。方法會拋出java.lang.CloneNotSupportedException異常,所以應該讓類實現(xiàn)Cloneable接口。
程序執(zhí)行結果如下:
---------使用 new 關鍵字創(chuàng)建對象---------
學生名字:小劉,年齡:22
-----------調用 java.lang.Class 的 newInstance() 方法創(chuàng)建對象-----------
學生名字:name,年齡:0
-------------------調用對象的done()方法創(chuàng)建對象----------
學生名字:name,年齡:0
二、隱含創(chuàng)建對象
除了顯式創(chuàng)建對象以外,在 Java 程序中還可以隱含地創(chuàng)建對象,例如下面幾種情況。
1)String strName = "strValue",其中的“strValue”就是一個 String 對象,由 Java 虛擬機隱含地創(chuàng)建。
2)字符串的“+”運算符運算的結果為一個新的 String 對象,示例如下:
String str1 = "Hello"; String str2 = "Java"; String str3 = str1+str2; // str3引用一個新的String對象
3)當 Java 虛擬機加載一個類時,會隱含地創(chuàng)建描述這個類的 Class 實例。
提示:類的加載是指把類的 .class 文件中的二進制數(shù)據(jù)讀入內存中,把它存放在運行時數(shù)據(jù)區(qū)的方法區(qū)內,然后在堆區(qū)創(chuàng)建一個 java.lang.Class 對象,用來封裝類在方法區(qū)內的數(shù)據(jù)結構。
無論釆用哪種方式創(chuàng)建對象,Java 虛擬機在創(chuàng)建一個對象時都包含以下步驟:
- 給對象分配內存。
- 將對象的實例變量自動初始化為其變量類型的默認值。
- 初始化對象,給實例變量賦予正確的初始值。
注意:每個對象都是相互獨立的,在內存中占有獨立的內存地址,并且每個對象都具有自己的生命周期,當一個對象的生命周期結束時,對象就變成了垃圾,由 Java 虛擬機自帶的垃圾回收機制處理。
到此這篇關于Java創(chuàng)建對象(顯式創(chuàng)建和隱含創(chuàng)建)的文章就介紹到這了,更多相關Java創(chuàng)建對象內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Springboot集合前端實現(xiàn)進度條顯示功能實例
這篇文章主要介紹了使用進度條提升用戶體驗的原因,特別是在處理大文件上傳、下載或長時間運行的操作時,進度條通過實時反饋任務進度,減少用戶的不確定感,文中給出了詳細的代碼示例,需要的朋友可以參考下2024-11-11
Mybatis之動態(tài)SQL使用小結(全網(wǎng)最新)
MyBatis令人喜歡的一大特性就是動態(tài)SQL,?在使用JDBC的過程中,?根據(jù)條件進行SQL的拼接是很麻煩且很容易出錯的,MyBatis通過OGNL來進行動態(tài)SQL的使用解決了這個麻煩,對Mybatis動態(tài)SQL相關知識感興趣的朋友跟隨小編一起看看吧2024-05-05
Java CompletableFuture 異步超時實現(xiàn)深入研究
這篇文章主要為大家介紹了Java CompletableFuture 異步超時實現(xiàn)深入研究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-02-02
利用Java實現(xiàn)圖片轉化為ASCII圖的示例代碼
本文將詳細講解如何利用 Java 實現(xiàn)圖片轉化為 ASCII 圖,從項目背景與意義、相關技術知識,到系統(tǒng)需求與架構設計,再到詳細實現(xiàn)思路、完整代碼和代碼解讀,最后對項目進行總結與展望,需要的朋友可以參考下2025-03-03
SpringBoot用JdbcTemplates操作Mysql實例代碼詳解
JdbcTemplate是Spring框架自帶的對JDBC操作的封裝,目的是提供統(tǒng)一的模板方法使對數(shù)據(jù)庫的操作更加方便、友好,效率也不錯,這篇文章主要介紹了SpringBoot用JdbcTemplates操作Mysql2022-10-10

