為了反序列化一個(gè)對象,我們需要讓我們的類實(shí)現(xiàn)Serializable接口。如:ObjectInputStream in = new ObjectInputStream (new FileInputStream("data.obj")); Student stu3 = (Student)in.readObject();。
3.Java創(chuàng)建對象的幾種方法
使用new關(guān)鍵字:這是我們最常見的也是最簡單的創(chuàng)建對象的方式,通過這種方式我們還可以調(diào)用任意的夠贊函數(shù)(無參的和有參的)。比如:Student student = new Student();
使用Class類的newInstance方法:我們也可以使用Class類的newInstance方法創(chuàng)建對象,這個(gè)newInstance方法調(diào)用無參的構(gòu)造器創(chuàng)建對象,如:Student student2 = (Student)Class.forName("根路徑.Student").newInstance(); 或者:Student stu = Student.class.newInstance();
使用Constructor類的newInstance方法:本方法和Class類的newInstance方法很像,java.lang.relect.Constructor類里也有一個(gè)newInstance方法可以創(chuàng)建對象。我們可以通過這個(gè)newInstance方法調(diào)用有參數(shù)的和私有的構(gòu)造函數(shù)。如: Constructor<Student> constructor = Student.class.getInstance(); Student stu = constructor.newInstance(); 這兩種newInstance的方法就是大家所說的反射,事實(shí)上Class的newInstance方法內(nèi)部調(diào)用Constructor的newInstance方法。這也是眾多框架Spring、Hibernate、Struts等使用后者的原因。
使用反序列化:當(dāng)我們序列化和反序列化一個(gè)對象,JVM會給我們創(chuàng)建一個(gè)單獨(dú)的對象,在反序列化時(shí),JVM創(chuàng)建對象并不會調(diào)用任何構(gòu)造函數(shù)。為了反序列化一個(gè)對象,我們需要讓我們的類實(shí)現(xiàn)Serializable接口。如:ObjectInputStream in = new ObjectInputStream (new FileInputStream("data.obj")); Student stu3 = (Student)in.readObject();
4.js中創(chuàng)建對象的方式有幾種,哪幾種
可以參考如下內(nèi)容:第一種模式:工廠方式[javascript] view plain copy print?var lev=function(){ return "啊打"; }; function Parent(){ var Child = new Object(); Child.name="李小龍"; Child.age="30"; Child.lev=lev; return Child; }; var x = Parent(); alert(x.name); alert(x.lev()); 說明:1.在函數(shù)中定義對象,并定義對象的各種屬性,,雖然屬性可以為方法,但是建議將屬性為方法的屬性定義到函數(shù)之外,這樣可以避免重復(fù)創(chuàng)建該方法2.引用該對象的時(shí)候,這里使用的是 var x = Parent()而不是 var x = new Parent();因?yàn)楹笳邥赡艹霈F(xiàn)很多問題(前者也成為工廠經(jīng)典方式,后者稱之為混合工廠方式),不推薦使用new的方式使用該對象3.在函數(shù)的最后返回該對象4.不推薦使用這種方式創(chuàng)建對象,但應(yīng)該了解第二種模式:構(gòu)造函數(shù)方式[javascript] view plain copy print?var lev=function(){ return "啊打"; }; function Parent(){ this.name="李小龍"; this.age="30"; this.lev=lev; }; var x =new Parent(); alert(x.name); alert(x.lev()); 說明:1.與工廠方式相比,使用構(gòu)造函數(shù)方式創(chuàng)建對象,無需再函數(shù)內(nèi)部重建創(chuàng)建對象,而使用this指代,并而函數(shù)無需明確return2.同工廠模式一樣,雖然屬性的值可以為方法,扔建議將該方法定義在函數(shù)之外3..同樣的,不推薦使用這種方式創(chuàng)建對象,但仍需要了解第3種模式:原型模式[javascript] view plain copy print?var lev=function(){ return "啊打"; }; function Parent(){ }; Parent.prototype.name="李小龍"; Parent.prototype.age="30"; Parent.prototype.lev=lev; var x =new Parent(); alert(x.name); alert(x.lev());。