java基礎第四篇(續1)
-------------Java建立對象的四種方法
上一篇說到了關于對象建立的四種方法,和注意事項,本篇作為續篇自然要有一個執行個體了。
執行個體代碼1:本文以PersonInfo為例進行說明
package cn.com.basicOne;
import java.io.Serializable;
/**
*
* @author fcs
* 2014年8月10日
* PersonInfo
* 說明:生成對象的類,java序列化對象
* 為了說明四種生成對象的方式都可行的情況下,需要personInfo類實作Serializable,Cloneable這兩個接口。
*/
public class PersonInfo implements Serializable ,Cloneable{
//生成序列化ID
private static final long serialVersionUID = -8066305480316658321L;
private String name;
private String addr;
private int age;
private String sex;
public PersonInfo(){}
public PersonInfo(String name, String addr, int age, String sex) {
super();
this.name = name;
this.addr = addr;
this.age = age;
this.sex = sex;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddr() {
return addr;
}
public void setAddr(String addr) {
this.addr = addr;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
//下面四種方法分别被四種生成的對象調用
public void newInstance1(){
System.out.println("我是被第一種方式,建立的對象調用的方法。。。。。這種方式很常用哦。。。。");
}
public void newInstance2(){
System.out.println("我是被用第二種方式建立的對象調用的方法。。。。。這種方式很非主流卻高大上:java反射機制實作建立對象。。。");
}
public void newInstance3(){
System.out.println("我是被第三種方式建立的對象調用的方法。。。。。這種方式不常用,卻是java克隆機制的完美展現");
}
public void newInstance4(){
System.out.println("我是被第四種方式建立的對象調用的方法。。。。。這種方式運用到javaIO流,在網絡對象傳遞方面和第二種方式配合的相當默契。。。");
}
//重寫Object方法的clone方法,傳回Object對象,
public Object clone(){
Object obj = null; //也可以直接聲明為PersonInfo對象,因為Object是所有類的超類,傳回類型并沒有錯。
try {
obj = (PersonInfo)super.clone(); //Object中的clone方法會識别出你建立的是哪一個對象。
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return obj;
}
}
執行個體代碼2:該類是一個測試類,分别用四種方法産生對象。
package cn.com.basicOne;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
public class Client {
/**
*
* 作者:FCs
* 描述:第一種方式建立對象:最常用,
* 時間:2014年8月10日
* 傳回:void
*/
public void newInstance1(){
PersonInfo person = new PersonInfo();
person.newInstance1();
}
/**
*
* 作者:FCs
* 描述:第二種方式建立對象:要捕獲異常,或者在方法聲明中抛出異常。
* 該方法涉及到虛拟機的類加載機制。有興趣的話可以看一下java虛拟機方面的知識。
* 時間:2014年8月13日
* 傳回:void
*/
public void newInstance2(){
try {
//注意class.forName()裡的參數是類在項目包下的路徑,否則隻寫一個類名會找不到該類而報錯。
PersonInfo person = (PersonInfo) Class.forName("cn.com.basicOne.PersonInfo").newInstance();
person.newInstance2();
} catch (Exception e){
e.printStackTrace();
}
}
/**
*
* 作者:FCs
* 描述:第三種方式建立對象:這種方式的前提是要有一個該類的執行個體,并且實作Cloneable接口,重寫Object的
* clone方法。
* 時間:2014年8月13日
* 傳回:void
*/
public void newInstance3(){
PersonInfo person = new PersonInfo("張三","長春",23,"男");
PersonInfo person1 = (PersonInfo) person.clone();
person1.newInstance3();
System.out.println("驗證person 與person1 是否是一個對象:person==person1 ? "+(person==person1));
}
/**
*
* 作者:FCs
* 描述:對象建立的第四種方式:采用了java序列化的技術
* 說明:首先建立對象的類需要實作Serializable接口或者Externalizable接口,然後聲明對象輸出流和,對象輸入流,參數為檔案流。
* 時間:2014年8月13日
* 傳回:void
*/
public void newInstance4(){
ObjectOutputStream oos = null;
ObjectInputStream ois = null;
try {
oos = new ObjectOutputStream(new FileOutputStream("E:/person.txt"));
PersonInfo person = new PersonInfo("張三","長春",24,"男");
oos.writeObject(person); //将該對象寫入E盤下的person.txt檔案裡,裡面顯示的是位元組亂碼稱為位元組序列。。
ois = new ObjectInputStream(new FileInputStream("E:/person.txt"));
PersonInfo person1 =(PersonInfo) ois.readObject(); //将對象從磁盤檔案中恢複。并讀取其中的資料
person1.newInstance4();
System.out.println("name:"+person1.getName()+" addr: "+person1.getAddr()+" age: "+person1.getAge()+" sex:"+person1.getSex());
}catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
//在操作IO流方面最後一定要關閉流,釋放系統資源。
try {
oos.close();
ois.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
//測試方法
public static void main(String[] args) {
Client client = new Client ();
client.newInstance1();
System.out.println("\n");
client.newInstance2();
System.out.println("\n");
client.newInstance3();
System.out.println("\n");
client.newInstance4();
}
}
篇後說明:這四種方法除了第一種常見之外,其他三種涉及到的知識挺豐富的,也很廣泛,需要有一定的java基礎,作為進階者是必須要了解的内容。後面會給出這些知識的博文,敬請期待,如有不正确之處,歡迎拍磚。