java 创建对象四种方法 静态编码 克隆 序列化 反射

一:静态编码&编译

public class A {
    public void hello(){
        System.out.println("Hello from the other side!");  
    }
    public static void main(String[] args) {
        A a=new A();
        a.hello();
    }
}

 

二:实现Cloneable接口

public class B implements Cloneable{
   public void hello(){
       System.out.println("Hello from B");
   }
   protected Object clone() throws CloneNotSupportedException {//实现Cloneable接口必须clone()方法
     return super.clone();
   }
    public static void main(String[] args) throws CloneNotSupportedException {
        B obj1=new B();
        B obj2=(B)obj1.clone();//obj2是obj1克隆出来的对象,没有调用构造函数
        obj2.hello();
        System.out.println(obj1==obj2);//false  两份内存空间的内容完全相同,地址不同
    }

}

 

三:序列化

public class C implements Serializable{
   public void hello(){
       System.out.println("Hello from C");
   }
    public static void main(String[] args) throws CloneNotSupportedException, IOException, ClassNotFoundException {
        C obj1=new C();
        String filePath="data.obj";//当前包目录下

        ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream(filePath));
        oos.writeObject(obj1);
        oos.close();
        System.out.println("对象写入完成!");
        
        ObjectInputStream ois=new ObjectInputStream(new FileInputStream(filePath));
        C obj2=(C)ois.readObject();
        ois.close();
        obj2.hello();//Hello from C
        System.out.println("成功读取对象!");


    }

 

四:反射

public class D {
    public void hello(){
        System.out.println("Hello from D");
    }

    public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException {
        Object obj=Class.forName("D").newInstance();//利用反射加载D类,newInstance()创建对象。
         Method method=Class.forName("D").getMethod("hello");
          method.invoke(obj);

         //也可以利用反射来加载指定类构造器
         Constructor<D> constructor=D.class.getConstructor();
         D obj2=constructor.newInstance();
         obj2.hello();

    }
}

 

注:转载需注明出处

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值