Java中不通过构造方法创建对象的方法总结

2023-03-12,,

我们常说,Java是一种面向对象的语言,因而在Java中几乎所有的操作都离不开对象。而在Java语言中,最常见的创建对象的方法是通过对类构造器的调用,除此之外,其实还有下面几种可以创建对象的方法。

1)通过反射机制来创建对象;

class Person{
String name="Jack";
public Person(){
System.out.println("construct");
}
public String toString(){return name;}
} public class Test{
public static void main(String[] args){
Class classType;
try{
classType=Class.forname("Person");
Person p = (Person)classType.newInstance();
System.out.println(p);
}cathch(Exception e){
e.printStackTrace();
}
}
}

程序的运行结果为:

construct

Jack

2)调用对象的clone方法,需要以下几个步骤才能使用clone方法:

(1)实现clone的类首先需要继承Cloneable接口实质上是一个标识接口,没有任何的接口方法,这一点和序列化接口Serializable()很类似。

(2)在类中重写Object类的clone方法。

(3)在clone方法中调用super.clone()。无论clone类的继承结构是什么,super.clone()都会直接或间接的调用Java.long.Object类中的clone()方法。

实例代码如下:

class Obj implement Cloneable{
private int aInt=0;
public Obj(){
System.out.println("construct");
}
public int getAint(){return aInt;}
public void changeInt(){this.aInt=1; }
public Object clone(){
Object o=null;
try{
o=(Obj)super.clone();
}catch(CloneNotSuppertedException e){
e.printStackTrace();
}
return 0;
}
}
public class Test{
public static void main(String[] args){
Obj a = new Obj();
Obj b = (Obj)a.clone();
b.changeInt();
System.out.println("a:"+a.getAInt());
System.out.println("b:"+b.getAInt());
}
}

程序的运行结果为:

construct

a:0

b:1

从以上的程序运行可以看出,在调用a.clone()方法时,系统创建了新的对象,但是没有调用构造方法。

3)通过反序列化的方式创建对象,实例代码如下:

       import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
public class Person implement Serilalizable{
private String name;
public Person(){
this.name="lili";
System.out.println("Construct");
}
public Stream toString(){return this.name;}
public static void main(String args[]){
Person p = new People();
System.out.println(p);
ObjectOutputStream oos=null;
ObjectInputStream ois = null;
try{
FileOutputStream fos =new
FileOutputStream("perpke.out");
oos=new ObjectOutputStream(fos);
oos.writeObject(p);
oos.close(0);
} catch(Exception ex){}
People pl;
try{
FileInputStream fis = new
FileInputStream("perple.out");
ois = new ObjectInputStream(fis);
p1=(People)ois.readObject();
System.out.println(p);
if(p!=p1)
System.out.println("two different
objecrt")
ois.close();
}catch(Exception ex){}
}
}

程序的运行结果为:

construct

lili

lili

two fifferent object

Java中不通过构造方法创建对象的方法总结的相关教程结束。

《Java中不通过构造方法创建对象的方法总结.doc》

下载本文的Word格式文档,以方便收藏与打印。