中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java創建對象的方法有哪些

發布時間:2021-11-03 14:18:38 來源:億速云 閱讀:136 作者:iii 欄目:web開發

本篇內容介紹了“Java創建對象的方法有哪些”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

1 簡介

Java是面向對象的編程語言,只要使用它,就需要創建對象。Java創建對象有六種方法,實際常用的不會這么多,這里權當是記錄一下。

2 六種方法

(1)使用new關鍵字

Pumpkin p1 = new Pumpkin();

(2)反射之Class類newInstance()

Pumpkin p2 = Pumpkin.class.newInstance();

(3)反射之Constructor類的newInstance()

Pumpkin p3 = Pumpkin.class.getDeclaredConstructor().newInstance();

(4)Object對象的clone方法

Pumpkin p4 = (Pumpkin) p1.clone();

注意Object類的clone方法是protected的,在Override的時候,可以改成public,這樣讓其它所有類都可以調用。

注意淺拷貝和深拷貝。

在這里小編建了一個前端學習交流扣扣群:132667127,我自己整理的最新的前端資料和高級開發教程,如果有想需要的,可以加群一起學習交流

(5)反序列化

ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("object.bin"));
oos.writeObject(p1);
oos.close();

ObjectInputStream ois = new ObjectInputStream(new FileInputStream("object.bin"));
Pumpkin p5 = (Pumpkin) ois.readObject();
ois.close();

必須要實現Serializable接口;

需要注意哪些字段可序列化,哪些字段不會被序列化,如何控制;

注意serialVersionUID的作用;

了解Externalizable的不同之處。

(6)使用Unsafe類

Field f = Unsafe.class.getDeclaredField("theUnsafe");
f.setAccessible(true);
Unsafe unsafe = (Unsafe) f.get(null);
Pumpkin p6 = (Pumpkin) unsafe.allocateInstance(Pumpkin.class);

很少用的方法,一般不用了解這個方法。

3 示例代碼

示例代碼如下:

package com.pkslow.basic;
import sun.misc.Unsafe;

import java.io.*;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;

public class CreateObject {

   public static class Pumpkin implements Cloneable, Serializable {
       public Pumpkin(){
           System.out.println("Constructor called");
       }
       @Override
       public Object clone() throws CloneNotSupportedException {
           return super.clone();
       }
   }

   public static void main(String[] args) throws IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException, CloneNotSupportedException, IOException, ClassNotFoundException, NoSuchFieldException {

       System.out.println("---start---");
       System.out.println("(1) new");
       Pumpkin p1 = new Pumpkin();

       System.out.println("(2) Class newInstance");
       Pumpkin p2 = Pumpkin.class.newInstance();

       System.out.println("(3) Constructor newInstance");
       Pumpkin p3 = Pumpkin.class.getDeclaredConstructor().newInstance();

       System.out.println("(4) clone");
       Pumpkin p4 = (Pumpkin) p1.clone();

       System.out.println("(5)Serialization");
       ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("object.bin"));
       oos.writeObject(p1);
       oos.close();

       ObjectInputStream ois = new ObjectInputStream(new FileInputStream("object.bin"));
       Pumpkin p5 = (Pumpkin) ois.readObject();
       ois.close();

       System.out.println("(6) Unsafe");
       Field f = Unsafe.class.getDeclaredField("theUnsafe");
       f.setAccessible(true);
       Unsafe unsafe = (Unsafe) f.get(null);
       Pumpkin p6 = (Pumpkin) unsafe.allocateInstance(Pumpkin.class);

       System.out.println("---end---");
   }
}

輸出結果如下:

---start---
(1) new
Constructor called
(2) Class newInstance
Constructor called
(3) Constructor newInstance
Constructor called
(4) clone
(5)Serialization
(6) Unsafe
---end---

所以會執行構造函數的有:new關鍵字、兩種反射;

不會執行構造函數的有:clone、序列化、Unsafe類。

“Java創建對象的方法有哪些”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宁国市| 武邑县| 奉贤区| 桦南县| 黄龙县| 桐庐县| 海门市| 永和县| 米易县| 繁昌县| 平武县| 河曲县| 博罗县| 临邑县| 安龙县| 行唐县| 姜堰市| 栖霞市| 旬邑县| 秦皇岛市| 五大连池市| 连云港市| 嘉禾县| 错那县| 甘德县| 伊吾县| 九台市| 太仆寺旗| 乌兰浩特市| 沈丘县| 溆浦县| 项城市| 颍上县| 马公市| 黑水县| 武夷山市| 无为县| 凌海市| 思茅市| 磐安县| 绥德县|