美文网首页Javajava WebJava服务端面试
Java中创建对象的四种方式

Java中创建对象的四种方式

作者: 勿念及时雨 | 来源:发表于2019-08-23 00:40 被阅读0次

    使用new关键字创建对象

    使用new关键字创建对象是最常见的一种方式,但是使用new创建对象会增加耦合度。在开发中应该尽量减少new的使用以降低耦合度。

    Object o=new SubObject();
    o.sayHello();
    

    使用反射机制创建对象

    使用Class对象的newInstance方法,我们很容易就能够创建出一个类的对象。

    Class clz= Class.forName("com.wunian.object");
    SubObject subObject =(SubObject ) clz.newInstance();
    subObject.sayHello();
    

    另外,我们也可以使用Constructor类的newInstance方法来创建对象。

    Class clz= Class.forName("com.wunian.object");
    Constructor constructor = clz.getConstructor();
    SubObject subObject =(SubObject) constructor.newInstance();
    

    使用clone创建对象

    clone对象时,需要已经有一个分配了内存的源对象,创建新对象时,首先应该分配一个和源对象一样大的内存空间。要调用clone方法需要实现Cloneable接口。

    package com.wunian.object;
    
    public class SubObject implements Cloneable{
        public void sayHello(){
            System.out.println("Hello world!");
        }
    
        public static void main(String[] args){
            SubObject s= new SubObject();
            try{
                SubObject s2 = (SubObject)s.clone();
                s2.sayHello();
            }catch (CloneNotSupportedException e){
                e.printStackTrace();
            }
        }
    }
    

    使用反序列化创建对象

    使用序列化时,要实现Serializable接口,将一个对象序列化到磁盘上,而采用反序列化可以将磁盘上的对象信息转化到内存中。

    //实现Serializable序列化接口的类
    package com.wunian.object;
    import java.io.*;
    
    public class SubObject implements Serializable{
       
        public void sayHello(){
            System.out.println("Hello world!");
        }
    }
    
    //测试类
    package com.wunian.test;
    import java.io.*;
    
    public class TestMain{
    
        public static void main(String[] args){
            SubObject s= new SubObject();
            //准备一个文件用于存储该对象的信息
            File f = new File("SubObject.txt");
    
            try(FileOutputStream fos = new FileOutputStream(f);
                ObjectOutputStream oos = new ObjectOutputStream(fos);
                FileInputStream fis = new FileInputStream(f);
                ObjectInputStream ois = new ObjectInputStream(fis)
                ){
                //序列化对象,写入到磁盘中
                oos.writeObject(s);
                //反序列化对象
                SubObject s2= (SubObject)ois.readObject();
                //测试方法
                s2.sayHello();
            }catch (FileNotFoundException e){
                e.printStackTrace();
            }catch (IOException e){
                e.printStackTrace();
            }catch (ClassNotFoundException e){
                e.printStackTrace();
            }
        }
    }
    

    相关文章

      网友评论

        本文标题:Java中创建对象的四种方式

        本文链接:https://www.haomeiwen.com/subject/blpasctx.html