文档章节

java 实例化对象的几种姿势

viakiba
 viakiba
发布于 2017/07/23 15:40
字数 358
阅读 8
收藏 0

代码里面有注释:

import java.io.*;
import java.lang.reflect.Constructor;

public class Hello implements  Cloneable,Serializable{
    private String str;

    public Hello(String str){
        this.str = str;
    }

    public  Hello(){
        this.str = "class";
    }

    public static void main(String[] args) throws Exception{
        Hello hello = Hello.getInstanceByNew();
        System.out.println(hello.str);
        System.out.println("=============================");
        try{
            Hello instanceByClone = Hello.getInstanceByClone(hello);
            System.out.println(instanceByClone.str);
            System.out.println(hello == instanceByClone);
        }catch (Exception e){
            e.printStackTrace();
        }
        System.out.println("=============================");
        Hello instanceByClass = Hello.getInstanceByClass();
        System.out.println(instanceByClass.str);
        System.out.println("=============================");

        System.out.println("使用无参构造");
        Hello instanceByConstructor = Hello.getInstanceByConstructor();
        System.out.println(instanceByConstructor.str);
        System.out.println("使用有参构造");
        Hello instanceByConstructor2 = Hello.getInstanceByConstructor("有参构造");
        System.out.println(instanceByConstructor2.str);
        System.out.println("=============================");

        /**
         * 首先 设置一个序列化文件位置
         */
        String path = "hello.obj";
        ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream(path));
        Hello xlh = new Hello("序列化");
        objectOutputStream.writeObject(xlh);
        objectOutputStream.close();
        /**
         * 反序列化拿到对象
         */
        Hello instanceBySerializable = Hello.getInstanceBySerializable(path);

        System.out.println(instanceBySerializable.hashCode()+"******************");
        System.out.println(xlh.str);
        System.out.println(instanceBySerializable.str);

        System.out.println("结束");
    }


    /**
     * 使用 new
     */
    public static Hello  getInstanceByNew(){
        return new Hello("new");
    }

    /**
     * 使用 clone 使用此方法 class类需要继承 cloneable 接口
     */
    public static  Hello getInstanceByClone(Hello hello) throws CloneNotSupportedException{
        Hello clone1 = (Hello) hello.clone();
        return clone1;
    }

    /**
     * 使用Class的 newInstance 这个newInstance方法调用无参的构造函数创建对象
     */
    public static Hello getInstanceByClass() throws Exception{
        Hello hello = (Hello) Class.forName("Hello").newInstance();
        return hello;
    }

    /**
     * 使用 构造器 无参函数
     */
    public static Hello getInstanceByConstructor() throws Exception{
        Constructor<Hello> constructor = Hello.class.getConstructor();
        Hello hello = constructor.newInstance();
        return hello;
    }

    /**
     * 使用 构造器 有参函数
     */
    public static Hello getInstanceByConstructor(String str) throws Exception{
        Constructor<Hello> constructor = Hello.class.getConstructor(String.class);
        Hello hello = constructor.newInstance(str);
        return hello;
    }

    /**
     * 使用反序列化 获取实例化对象  对象的类要继承 Serializable 接口表示可以进行序列化
     */
    public static Hello getInstanceBySerializable(String path) throws  Exception{
        ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream(path));
        Object o = objectInputStream.readObject();
        objectInputStream.close();
        System.out.println(o.hashCode()+"******************");
        return  (Hello) o;
    }
}

 

© 著作权归作者所有

共有 人打赏支持
viakiba
粉丝 4
博文 113
码字总数 67168
作品 0
昌平
后端工程师
SpringBoot基础篇Bean之基本定义与使用

更多Spring文章,欢迎点击 一灰灰Blog-Spring专题 我们知道在Spring中,有两个非常有名的特性,依赖注入(DI)与切面(AOP),其中依赖注入其主要的作用,可以说就是维护Spring容器创建的Bea...

小灰灰Blog
10/14
0
0
14、Java并发性和多线程-Java ThreadLocal

以下内容转自http://ifeve.com/java-theadlocal/: Java中的ThreadLocal类可以让你创建的变量只被同一个线程进行读和写操作。因此,尽管有两个线程同时执行一段相同的代码,而且这段代码又有...

easonjim
2017/06/16
0
0
设计模式之单例模式(Singleton)(1)

单例模式是一种比较简单的设计模式,简单来说,就是确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。 单例模式特点: 1)单例类只能有一个实例。 2)单例类必须自己创建自...

扎尔其
07/29
0
0
ThreadLocal的设计理念与作用

Java中的ThreadLocal类允许我们创建只能被同一个线程读写的变量。因此,如果一段代码含有一个ThreadLocal变量的引用,即使两个线程同时执行这段代码,它们也无法访问到对方的ThreadLocal变量...

whoisliang
02/14
0
0
Android Handler 机制总结

写 Handler 原理的文章很多,就不重复写了,写不出啥新花样。这篇文章的主要是对 handler 原理的总结。 1、Android消息机制是什么? Android消息机制 主要指 Handler 的运行机制以及 Handle...

huansky
08/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

HTTP get、post 中请求json与map传参格式

import java.io.IOException;import java.net.URI;import java.net.URISyntaxException;import java.nio.charset.Charset;import java.util.ArrayList;import java.util.List;im......

寒风中的独狼
19分钟前
0
0
IDEA中tomcat启动慢 耗时10分钟

用idea中的tomcat以debug模式启动,会非常的慢,而正常启动没啥问题;原因是debug模式中View Breakpoints断点代码,断点的是jar包,而现在启动由于jar包发生变化,导致启动时一直处于等待中。...

GoodMarver
30分钟前
2
0
Linux学习-10月18(awk)

9.6/9.7 awk 一、awk简介   1. awk是一种编程语言,用于对文本和数据进行处理的   2. 具有强大的文本格式化能力   3. 利用命令awk,可以将一些文本整理成为我们想要的样子   4. 命令awk...

wxy丶
32分钟前
0
0
「ThinkPHP开发者周刊」第3期——官宣:5.1版本发布LTS版本

[ 本周读数 ] 70——还剩70天,PHP5.6年底不再提供支持 PHP5.6的安全支持将于2018年12月31日终止。即两个多月后,使用 PHP 5.6 版本的网站将不再收到安全漏洞或错误更新。 较新的 PHP7.0在今...

流年
40分钟前
1
0
Spring IOC 之 注册 BeanDefinition

获取 Document 对象后,会根据该对象和 Resource 资源对象调用 registerBeanDefinitions() 方法,开始注册 BeanDefinitions 首先调用 createBeanDefinitionDocumentReader() 方法实例化 Bean...

职业搬砖20年
44分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部