java生成对象的方式

(1)new实例化一个对象

(2)通过反射机制创建对象

package Test;
class Baseme{
	public void print(){
		System.out.println("this is Baseme code");
	}
}
class Sub extends Baseme{
	public void print(){
		System.out.println("this is Sub code");
	}
}
public class A81 {
	public static void main(String[] args){
		try {
			Class s=Class.forName("Test.Sub");
			Baseme b=(Baseme)s.newInstance();
			b.print();
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InstantiationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

(3)通过clone()方法创建一个对象

package Test;

import java.io.IOException;
import java.util.Date;

public class Obj implements Cloneable{
private Date birth=new Date();
private String name;
public Date getBirth() {
	return birth;
}
public void setBirth(Date birth) {
	this.birth = birth;
}
public void changeDate(){
	this.birth.setMonth(4);
}
public String getName() {
	return name;
}
public void setName(String name) {
	this.name = name;
}
@Override
public Obj clone(){
	Obj o = null;
	try {
		//先执行的浅拷贝
		 o=(Obj)super.clone();
	} catch (CloneNotSupportedException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
	//对类的非基本类型,o.attr=this.getAttr().clone() 执行深拷贝,下面两条都行
	o.setBirth((Date)this.getBirth().clone());
//	o.birth=(Date)this.getBirth().clone();
	return o;
}
	public static void main(String[] args){
			Obj a=new Obj();
			Obj b=a;
			Obj c;
			c = (Obj)a.clone();
			b.changeDate();
			System.out.println("a1="+a.getBirth());
			System.out.println("b1="+b.getBirth());
			System.out.println("c1="+c.getBirth());
			//  本来都是这个结果,c1=Sun Aug 13 15:46:47 CST 2017,b.changeDate()改变了a,b的值
			c.changeDate();
			System.out.println("a2="+a.getBirth());
			System.out.println("b2="+b.getBirth());
			System.out.println("c2="+c.getBirth());
	}

}

(4)通过返序列化的方式创建对象

package Test;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;

public class People implements Serializable{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private String name;
	private int age;
	public People(){
		this.name="lili";
		this.age=20;
	}
	public String getName(){
		return name;
	}
	public void setName(String name){
		this.name=name;
	}
	public int getAge(){
		return age;
	}
	public void setAget(int age){
		this.age=age;
	}
	public String toString(){
		return "name:"+name+",age:"+age;
	}
	public static void main(String[] args){
		People p=new People();
		FileOutputStream out=null;
		ObjectOutputStream oo=null;
		try {
			 out=new FileOutputStream("people.out");
			 oo=new ObjectOutputStream(out);
			 oo.writeObject(p);
			 oo.close();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		People pl;
		FileInputStream in=null;
		ObjectInputStream ii=null;
		try {
			in=new FileInputStream("people.out");
			ii=new ObjectInputStream(in);
			People pe=(People)ii.readObject();
			System.out.println(pe);
		} 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();
		}
		
	}
	
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值