AVA实例化类的四种方法

原文地址:JAVA实例化类的四种方法 作者:权镜士

JAVA中实例化类的四种方法

1)使用new操作符

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

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

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

点击(此处)折叠或打开

  1. import java.io.*;
  2. import java.lang.reflect.Constructor;
  3. import java.lang.reflect.InvocationTargetException;

  4. class ClassInstance implements Cloneable, Serializable { 
  5.     private static final long serialVersionUID = -1261396803896758295L;
  6.     private String str = "测试...";
  7.     public void fun(){
  8.         System.out.println(str);
  9.     }
  10.     public ClassInstance(String str){
  11.         System.out.println("有参类的实例化");
  12.         this.str += str; 
  13.     }
  14.     public ClassInstance(){
  15.         System.out.println("无参类的实例化");
  16.     }
  17.     public Object clone(){
  18.         return this;
  19.     }
  20. }

  21. public class ClassInstanceTest{
  22.     public static void main(String[] args) throws ClassNotFoundException, InstantiationException,
  23.     IllegalAccessException, IOException,InvocationTargetException, NoSuchMethodException{
  24.         //第一种类的实例化方式
  25.         ClassInstance ci01 = new ClassInstance("01");
  26.         ci01.fun();

  27.         //第二种类的实例化方式
  28.         ClassInstance ci02 = (ClassInstance) Class.forName("ClassInstance").newInstance();
  29.         ci02.fun();

  30.         //第三种类的实例化方式
  31.         ClassInstance ci03 = (ClassInstance) ci01.clone();
  32.         ci03.fun();

  33.         //第四种类的实例化方式
  34.         FileOutputStream fos = new FileOutputStream("ci.tmp");
  35.         ObjectOutputStream oos = new ObjectOutputStream(fos);
  36.         oos.writeObject(ci01);
  37.         oos.close();
  38.         fos.close();

  39.         FileInputStream fis = new FileInputStream("ci.tmp");
  40.         ObjectInputStream ois = new ObjectInputStream(fis);

  41.         ClassInstance ci04 = (ClassInstance) ois.readObject();
  42.         ois.close();
  43.         fis.close();

  44.         ci04.fun();
  45.         System.out.println("--------------------额外测试--------------------");
  46.         ClassInstance ci05 = null;
  47.         //额外的思考 在第二种类实例化的方式中有没有一种方法实现有参数的构造方式
  48.         //获得类的构造信息
  49.         Constructor[] ctor = Class.forName("ClassInstance").getDeclaredConstructors();
  50.         //找到我们需要的构造方法
  51.         for(int i=0;i<ctor.length;i++ ){
  52.             Class[] cl = ctor[i].getParameterTypes();
  53.             if(cl.length == 1){
  54.                 //实例化对象
  55.                 ci05 = (ClassInstance) Class.forName("ClassInstance").getConstructor(cl).newInstance(new Object[]{"05"});
  56.             }
  57.         }
  58.         ci05.fun();
  59.     }
  60. }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值