秦皇島達內:Java對象的五種創建方式

Java是一種可以撰寫跨平臺應用軟件的面向對象的程序設計語言。Java 技術具有卓越的通用性、高效性、平臺移植性和安全性,廣泛應用於PC、數據中心、遊戲控制檯、科學超級計算機、移動電話和互聯網,同時擁有全球最大的開發者專業社羣。
示例對象
public class People { private String name; private String address; public People() { } public People(String name, String address) { this.name = name; this.address = address; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; }}

構造器創建對象
People people = new People("lili", "china");
利用class的反射機制
Class peopleClass = People.class; //獲得People的Class實例對象People people = (People)peopleClass.newInstance(); //Class clazz = Class.forName("People");People people = (People)clazz.newInstance();
這種方式適用於有無參構造器的類
利用序列化的方式構造實例對象
public class CreateFour implements Serializable { public static void main(String args[]) { CreateFour fCreateFour = new CreateFour(); ObjectOutputStream objectStream; try { objectStream = new ObjectOutputStream(new FileOutputStream("res/obj.txt")); objectStream.writeObject(fCreateFour); ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream("res/obj.txt")); CreateFour cloneFour = (CreateFour) objectInputStream.readObject(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
這種方式前提是該類必須要實現Serializable
利用Object的clone方法
public class CreateFour implements Cloneable {
public static void main(String args[]) {
CreateFour f = new CreateFour();
try {
CreateFour cloneObject = (CreateFour) f.clone();
} catch (CloneNotSupportedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
該類必須實現Cloneable接口,不然會拋出異常CloneNotSupportedException
使用Objenesis來實例化對象
Objenesis objenesis = new ObjenesisStd();ObjectInstantiator instantiator = objenesis.getInstantiatorOf(People.class);People people = (People) instantiator.newInstance();
使用場合
Java已經支持使用Class.newInstance()動態實例化類的實例。tj.java.tedu.cn但是類必須擁有一個合適的構造器。有很多場景下不能使用這種方式實例化類,比如:

  • 構造器需要參數
  • 構造器有side effects
  • 構造器會拋異常
    因此,在類庫中經常會有類必須擁有一個默認構造器的限制。Objenesis通過繞開對象實例構造器來克服這個限制。
    典型應用
    序列化,遠程調用和持久化 -對象需要實例化並存儲爲到一個特殊的狀態,而沒有調用代碼。
    代理,AOP庫和Mock對象 -類可以被子類繼承而子類不用擔心父類的構造器
    容器框架 -對象可以以非標準的方式被動態實例化。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章