• java创建对象的4种方法


    方法1:静态编码&编译(new)

    最常用的就是静态编写一个类,然后new一个对象

    public class New {
        public static void main(String[] args) {
            New n = new New();
        }
    }
    

    方法2:克隆(clone)

    java提供克隆的手段来复制一个对象
    浅克隆:
    1.被复制的类需要实现Clonenable接口
    2.Override clone()

    public class Clone implements Cloneable{
        private String name;
        public Clone(String name){
            this.name = name;
        }
        public void printName(){
            System.out.println("My name is "+ name);
        }
        public void setName(String name) {
            this.name = name;
        }
    
        @Override
        public Object clone() throws CloneNotSupportedException{
            return super.clone();
        }
    
        public static void main(String[] args) {
            try {
                Clone c = new Clone("Edwin Xu");
                c.setName("Edwin Wang");
                Clone clone = (Clone) c.clone();
                clone.printName(); //My name is Edwin Wang
            }catch (Exception e){
                e.printStackTrace();
            }
    
        }
    }
    

    对于属性中有引用类型的,需要让该引用类型也继承Cloneable并重写clone(), 以实现深克隆。
    如果类中有过多的引用类型就会很麻烦。

    方法3:序列化与反序列化

    序列化就是把对象写到流的过程,被写入流的对象是原对象的拷贝。
    通过反序列化从流中重写构建出该对象,实现了真正的深度克隆。

    public class Deserialization implements Serializable {
        private static final long serialVersionUID = 1L;
        private String name;
        public Deserialization(String name){
            this.name =name;
        }
        public void printName(){
            System.out.println("My Name Is "+name);
        }
    
        public static void main(String[] args) {
            try {
                Deserialization d = new Deserialization("Edwin");
                //序列化:打开一个流,写入
                ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("data.obj"));
                out.writeObject(d);
                out.close();
    
                //反序列化:从流中取出来
                ObjectInputStream in = new ObjectInputStream(new FileInputStream("data.obj"));
                Deserialization d1 = (Deserialization)in.readObject();
                in.close();
    
                d1.printName();//My Name Is Edwin
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    }
    

    方法4:反射

    反射提供一种动态创建对象的方式

    package reflection;
    import java.lang.reflect.Constructor;
    public class Reflection {
        public Reflection(){
            System.out.println("initializing");
        }
        public static void main(String[] args) {
            try {
                //方式1:Class.forName(full path)
                Reflection r = (Reflection) Class.forName("reflection.Reflection").newInstance();
                //方式2:ClassName.class
                Reflection c1 = Reflection.class.newInstance();
                //方式3:利用Constructor
                Constructor<Reflection> con = Reflection.class.getConstructor();
                Reflection r2 = con.newInstance();
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    }
    
  • 相关阅读:
    官方文档翻译-Today
    RAC & MVVM 学习资料整理
    35种常用字体
    中文字体的种类
    自言自语(三)--部分中文字体
    自言自语(二)--英文无衬线体和有衬线体
    sketch字体设置技巧(一)---通过锚点改变字体形态
    提高设计档次的8个方法
    知识汇总09~bootstrap-select在Vue中的封装
    知识汇总08~字符串截取
  • 原文地址:https://www.cnblogs.com/XT-xutao/p/12795654.html
Copyright © 2020-2023  润新知