java 实例化类详解及简单实例
Java实例化类的方法
Java中,类的实例化方法有四种途径:
1)使用new操作符
2)调用Class对象的newInstance()方法
3)调用clone()方法,对现有实例的拷贝
4)通过ObjectInputStream的readObject()方法反序列化类
1.ClassInstance.java
importjava.io.*;
classClassInstanceimplementsCloneable,Serializable{
privateStringstr="测试...";
publicvoidfun(){
System.out.println(str);
}
publicClassInstance(Stringstr){
System.out.println("有参类的实例化");
this.str+=str;
}
publicClassInstance(){
System.out.println("无参类的实例化");
}
publicObjectclone(){
returnthis;
}
}
2.ClassInstanceTest.java
importjava.io.*;
importjava.lang.reflect.*;
publicclassClassInstanceTest{
publicstaticvoidmain(String[]args)throwsClassNotFoundException,InstantiationException,
IllegalAccessException,IOException,InvocationTargetException,NoSuchMethodException{
//第一种类的实例化方式
ClassInstanceci01=newClassInstance("01");
ci01.fun();
//第二种类的实例化方式
ClassInstanceci02=(ClassInstance)Class.forName("ClassInstance").newInstance();
ci02.fun();
//第三种类的实例化方式
ClassInstanceci03=(ClassInstance)ci01.clone();
ci03.fun();
//第四种类的实例化方式
FileOutputStreamfos=newFileOutputStream("ci.tmp");
ObjectOutputStreamoos=newObjectOutputStream(fos);
oos.writeObject(ci01);
oos.close();
fos.close();
FileInputStreamfis=newFileInputStream("ci.tmp");
ObjectInputStreamois=newObjectInputStream(fis);
ClassInstanceci04=(ClassInstance)ois.readObject();
ois.close();
fis.close();
ci04.fun();
System.out.println("--------------------额外测试--------------------");
ClassInstanceci05=null;
//额外的思考在第二种类实例化的方式中有没有一种方法实现有参数的构造方式
//获得类的构造信息
Constructor[]ctor=Class.forName("ClassInstance").getDeclaredConstructors();
//找到我们需要的构造方法
for(inti=0;i
3.输出结果
有参类的实例化
测试...01
无参类的实例化
测试...
测试...01
测试...01
-------------------额外测试--------------------
有参类的实例化
测试...05
除了这几种情况可以实例化一个Java类对象外,隐式调用实例化也是利用了已上集中情况。例如常见的方法:
publicclassClassInstance{
publicClassInstance(){
}
publicClassInstancegetInstance(){
returnnewClassInstance();
}
}
通过观察结果,我们发现无论哪一种方式必须经过的一步---调用构造方法。无论怎样构造函数作为初始化类的意义怎样都不会改变。
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!