Java是一種可以撰寫跨平臺(tái)應(yīng)用軟件的面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言。Java 技術(shù)具有卓越的通用性、高效性、平臺(tái)移植性和安全性,廣泛應(yīng)用于PC、數(shù)據(jù)中心、游戲控制臺(tái)、科學(xué)超級(jí)計(jì)算機(jī)、移動(dòng)電話和互聯(lián)網(wǎng),同時(shí)擁有全球最大的開發(fā)者專業(yè)社群。
給你學(xué)習(xí)路線:html-css-js-jq-javase-數(shù)據(jù)庫(kù)-jsp-servlet-Struts2-hibernate-mybatis-spring4-springmvc-ssh-ssm

示例對(duì)象
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; }}

小編推薦一個(gè)學(xué)Java的學(xué)習(xí)裙【 七六零,二五零,五四一 】,無(wú)論你是大牛還是小白,是想轉(zhuǎn)行還是想入行都可以來(lái)了解一起進(jìn)步一起學(xué)習(xí)!裙內(nèi)有開發(fā)工具,很多干貨和技術(shù)資料分享!
構(gòu)造器創(chuàng)建對(duì)象
People people = new People("lili", "china");
利用class的反射機(jī)制
Class peopleClass = People.class; //獲得People的Class實(shí)例對(duì)象People people = (People)peopleClass.newInstance(); //Class clazz = Class.forName("People");People people = (People)clazz.newInstance();
這種方式適用于有無(wú)參構(gòu)造器的類
利用序列化的方式構(gòu)造實(shí)例對(duì)象
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(); } } }
這種方式前提是該類必須要實(shí)現(xiàn)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();
}
}
}
該類必須實(shí)現(xiàn)Cloneable接口,不然會(huì)拋出異常CloneNotSupportedException
使用Objenesis來(lái)實(shí)例化對(duì)象
Objenesis objenesis = new ObjenesisStd();ObjectInstantiator instantiator = objenesis.getInstantiatorOf(People.class);People people = (People) instantiator.newInstance();
使用場(chǎng)合
Java已經(jīng)支持使用Class.newInstance()動(dòng)態(tài)實(shí)例化類的實(shí)例。但是類必須擁有一個(gè)合適的構(gòu)造器。有很多場(chǎng)景下不能使用這種方式實(shí)例化類,比如:
- 構(gòu)造器需要參數(shù)
- 構(gòu)造器有side effects
- 構(gòu)造器會(huì)拋異常
因此,在類庫(kù)中經(jīng)常會(huì)有類必須擁有一個(gè)默認(rèn)構(gòu)造器的限制。Objenesis通過(guò)繞開對(duì)象實(shí)例構(gòu)造器來(lái)克服這個(gè)限制。

小編推薦一個(gè)學(xué)Java的學(xué)習(xí)裙【 七六零,二五零,五四一 】,無(wú)論你是大牛還是小白,是想轉(zhuǎn)行還是想入行都可以來(lái)了解一起進(jìn)步一起學(xué)習(xí)!裙內(nèi)有開發(fā)工具,很多干貨和技術(shù)資料分享!
典型應(yīng)用
序列化,遠(yuǎn)程調(diào)用和持久化 -對(duì)象需要實(shí)例化并存儲(chǔ)為到一個(gè)特殊的狀態(tài),而沒(méi)有調(diào)用代碼。
代理,AOP庫(kù)和Mock對(duì)象 -類可以被子類繼承而子類不用擔(dān)心父類的構(gòu)造器
容器框架 -對(duì)象可以以非標(biāo)準(zhǔn)的方式被動(dòng)態(tài)實(shí)例化。


