美文网首页程序员程序猿阵线联盟-汇总各类技术干货
Java中6种创建对象的方法,除了new你还知道啥?

Java中6种创建对象的方法,除了new你还知道啥?

作者: 朱潘 | 来源:发表于2018-11-24 11:14 被阅读18次
    封面

    今天来聊一聊在Java创建对象的几种方法。在项目里面,可能你经常使用new创建对象,或者就是把创建对象的事情交给框架(比如spring)。那么,除了new以外,你还知道几种创建对象的方法?下面来看看这6种创建对象的方法:

    1. 使用new关键字

    2. Class对象的newInstance()方法

    3. 构造函数对象的newInstance()方法

    4. 对象反序列化

    5. Object对象的clone()方法

    6. 继续往下看,最后揭晓

    1.使用new关键字

    这是最常用也最简单的方式,看看下面这个例子就知道了。

    public class Test {
    
        private String name;
        public Test() {
        }
    
        public Test(String name) {
            this.name = name;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public static void main(String[] args) {
            Test t1 = new Test();
            Test t2 = new Test("张三");
        }
    }
    

    2.Class对象的newInstance()方法

    还是上面的Test对象,首先我们通过Class.forName()动态的加载类的Class对象,然后通过newInstance()方法获得Test类的对象

    public static void main(String[] args) throws Exception {
        String className = "org.b3log.solo.util.Test";
        Class clasz = Class.forName(className);
        Test t = (Test) clasz.newInstance();
    }
    

    3.构造函数对象的newInstance()方法

    类Constructor也有newInstance方法,这一点和Class有点像。从它的名字可以看出它与Class的不同,Class是通过类来创建对象,而Constructor则是通过构造器。我们依然使用第一个例子中的Test类。

    public static void main(String[] args) throws Exception {
        Constructor<Test> constructor;
       try {
            constructor = Test.class.getConstructor();
           Test t = constructor.newInstance();
       } catch (InstantiationException | 
            IllegalAccessException | 
            IllegalArgumentException | 
            InvocationTargetException |
            NoSuchMethodException | 
            SecurityException e) {
            e.printStackTrace();
       }
    }
    

    4.对象反序列化

    使用反序列化来获得类的对象,那么这里必然要用到序列化Serializable接口,所以这里我们将第一个例子中的Test作出一点改变,那就是实现序列化接口。

    public class Test implements Serializable{
    
        private String name;
        public Test() {
        }
    
        public Test(String name) {
            this.name = name;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public static void main(String[] args) throws Exception {
           String filePath = "sample.txt";
         Test t1 = new Test("张三");
         try {
            FileOutputStream fileOutputStream = 
                   new FileOutputStream(filePath);
            ObjectOutputStream outputStream = 
                   new ObjectOutputStream(fileOutputStream);
            outputStream.writeObject(t1);
            outputStream.flush();
            outputStream.close();
    
            FileInputStream fileInputStream = 
                   new FileInputStream(filePath);
            ObjectInputStream inputStream = 
                   new ObjectInputStream(fileInputStream);
            Test t2 = (Test) inputStream.readObject();
            inputStream.close();
            System.out.println(t2.getName());
         } catch (Exception ee) {
               ee.printStackTrace();
         }
        }
    }
    

    5.Object对象的clone()方法

    Object对象中存在clone方法,它的作用是创建一个对象的副本。看下面的例子,这里我们依然使用第一个例子的Test类。

    public static void main(String[] args) throws Exception {
        Test t1 = new Test("张三");
        Test t2 = (Test) t1.clone();
        System.out.println(t2.getName());
    }
    

    6.以上五种方法就是所有的方法了,并不存在第六种方法。如果你觉得还有什么可以创建对象的方法,请评论区留言!

    欢迎关注我的公众号“java工会”,一起交流技术。

    后台回复加群可加入编程序学习交流群
    后台回复视频可加免费领取各种视频
    后台回复书籍真多可加免费领取各种编程电子书

    加小编微信拉(xili22xili)你进技术交流微信群,或者加qq群727096066讨论技术

    相关文章

      网友评论

        本文标题:Java中6种创建对象的方法,除了new你还知道啥?

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