java 实例化类详解及简单实例
程序员文章站
2024-03-05 19:10:13
java 实例化类的方法
java中,类的实例化方法有四种途径:
1)使用new操作符
2)调用class对象的newinstance()方法
3)...
java 实例化类的方法
java中,类的实例化方法有四种途径:
1)使用new操作符
2)调用class对象的newinstance()方法
3)调用clone()方法,对现有实例的拷贝
4)通过objectinputstream的readobject()方法反序列化类
1.classinstance.java
import java.io.*; class classinstance implements cloneable, serializable { private string str = "测试..."; public void fun(){ system.out.println(str); } public classinstance(string str){ system.out.println("有参类的实例化"); this.str += str; } public classinstance(){ system.out.println("无参类的实例化"); } public object clone(){ return this; } }
2.classinstancetest.java
import java.io.*; import java.lang.reflect.*; public class classinstancetest{ public static void main(string[] args) throws classnotfoundexception, instantiationexception, illegalaccessexception, ioexception,invocationtargetexception, nosuchmethodexception{ //第一种类的实例化方式 classinstance ci01 = new classinstance("01"); ci01.fun(); //第二种类的实例化方式 classinstance ci02 = (classinstance) class.forname("classinstance").newinstance(); ci02.fun(); //第三种类的实例化方式 classinstance ci03 = (classinstance) ci01.clone(); ci03.fun(); //第四种类的实例化方式 fileoutputstream fos = new fileoutputstream("ci.tmp"); objectoutputstream oos = new objectoutputstream(fos); oos.writeobject(ci01); oos.close(); fos.close(); fileinputstream fis = new fileinputstream("ci.tmp"); objectinputstream ois = new objectinputstream(fis); classinstance ci04 = (classinstance) ois.readobject(); ois.close(); fis.close(); ci04.fun(); system.out.println("--------------------额外测试--------------------"); classinstance ci05 = null; //额外的思考 在第二种类实例化的方式中有没有一种方法实现有参数的构造方式 //获得类的构造信息 constructor[] ctor = class.forname("classinstance").getdeclaredconstructors(); //找到我们需要的构造方法 for(int i=0;i<ctor.length;i++ ){ class[] cl = ctor[i].getparametertypes(); if(cl.length == 1){ //实例化对象 ci05 = (classinstance) class.forname("classinstance").getconstructor(cl).newinstance(new object[]{"05"}); } } ci05.fun(); } }
3.输出结果
有参类的实例化 测试...01 无参类的实例化 测试... 测试...01 测试...01 -------------------额外测试-------------------- 有参类的实例化 测试...05
除了这几种情况可以实例化一个java类对象外,隐式调用实例化也是利用了已上集中情况。例如常见的方法:
public class classinstance{ public classinstance(){ } public classinstance getinstance(){ return new classinstance(); } }
通过观察结果,我们发现无论哪一种方式必须经过的一步---调用构造方法。无论怎样构造函数作为初始化类的意义怎样都不会改变。
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
下一篇: Android 模拟器的使用详细介绍