java 创建对象的几种方式

  1. 最简单的方式 使用 new 关键字,调用构造函数

    package aa;
    
    public class CC {
    
    
        public CC() {
    
            // TODO Auto-generated constructor stub
            System.out.println("cc is created");
        }
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
    
            CC cc = new CC();
        }
    
    }

    试验结果:`cc is created

  2. 使用Class类的newInstance方法,调用构造函数

        package aa;
    
    public class CC {
    
    
        public CC() {
    
            // TODO Auto-generated constructor stub
            System.out.println("Class.forName()");
            System.out.println("cc is created");
        }
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
    
            try {
                CC C = (CC)Class.forName("aa.CC").newInstance();
            } catch (InstantiationException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (ClassNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    
    }
    

    试验结果

    Class.forName()
    cc is created
    
  3. 使用Reflect包中的Constructor类的newInstance方法,调用构造函数

    package aa;
    
    import java.lang.reflect.Constructor;
    import java.lang.reflect.InvocationTargetException;
    
    public class CC {
    
    
        public CC() {
    
            // TODO Auto-generated constructor stub
            System.out.println("constructor.newInstance()");
            System.out.println("cc is created");
        }
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
    
    
            try {
                Constructor<CC> constructor = CC.class.getConstructor();
                CC c = constructor.newInstance();
            } catch (NoSuchMethodException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (SecurityException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (InstantiationException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IllegalArgumentException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (InvocationTargetException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    
    }
    

    试验结果

    constructor.newInstance()
    cc is created
    
  4. 使用clone方法创建对象,其中Cloneable接口为标志接口,Clonable接口没有一个方法

    package aa;
    
    
    public class CC implements Cloneable {
    
    
        public CC() {
    
            // TODO Auto-generated constructor stub
            System.out.println("sss");
            System.out.println("cc is created");
        }
    
        @Override
        protected Object clone() throws CloneNotSupportedException {
            // TODO Auto-generated method stub
            CC  cc =null;
            cc = (CC) super.clone();
            return cc;
        }
    
        @SuppressWarnings("unused")
        public static void main(String[] args) {
            // TODO Auto-generated method stub
    
            CC cc = new CC();
            try {
                CC cc2 = (CC) cc.clone();
            } catch (CloneNotSupportedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    
    }

    试验结果:

    sss
    cc is created
    

    上面的构造函数是由 new 的操作产生的,说明clone方法并没有调用构造函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值