java 实例化类详解及简单实例

网友投稿 236 2023-06-04


java 实例化类详解及简单实例

java 实例化类的方法

Java中,类的实例化方法有四种途径:

1)使用new操作符

2)调用Class对象的newInstance()方法

3)调用clone()方法,对现有实例的拷贝

4)通过ObjectInputStream的readObject()方法反序列化类

1.ClassInstance.java

idMudwZxlHgmport 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("Classhttp://Instance").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();

dMudwZxlHg

ci04.fun();

System.out.println("--------------------额外测试--------------------");

ClassInstance ci05 = null;

//额外的思考 在第二种类实例化的方式中有没有一种方法实现有参数的构造方式

//获得类的构造信息

Constructor[] ctor = Class.forName("ClassInstance").getDeclaredConstructors();

//找到我们需要的构造方法

for(int i=0;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

-------------------额外测试------------------http://--

有参类的实例化

测试...05

除了这几种情况可以实例化一个Java类对象外,隐式调用实例化也是利用了已上集中情况。例如常见的方法:

public class ClassInstance{

  public ClassInstance(){

  }

public ClassInstance getInstance(){

    return new ClassInstance();

  }

}

通过观察结果,我们发现无论哪一种方式必须经过的一步---调用构造方法。无论怎样构造函数作为初始化类的意义怎样都不会改变。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

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

-------------------额外测试------------------http://--

有参类的实例化

测试...05

除了这几种情况可以实例化一个Java类对象外,隐式调用实例化也是利用了已上集中情况。例如常见的方法:

public class ClassInstance{

  public ClassInstance(){

  }

public ClassInstance getInstance(){

    return new ClassInstance();

  }

}

通过观察结果,我们发现无论哪一种方式必须经过的一步---调用构造方法。无论怎样构造函数作为初始化类的意义怎样都不会改变。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Spring Boot 集成Mybatis实现主从(多数据源)分离方案示例
下一篇:Java通过jersey实现客户端图片上传示例
相关文章

 发表评论

暂时没有评论,来抢沙发吧~