(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();
}
}
}