文档章节

java 实例化对象的几种姿势

viakiba
 viakiba
发布于 2017/07/23 15:40
字数 358
阅读 9
收藏 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
ThreadLocal的设计理念与作用

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

whoisliang
02/14
0
0
【Java】jdk8 Optional 的正确姿势

我们知道 Java 8 增加了一些很有用的 API, 其中一个就是 Optional. 如果对它不稍假探索, 只是轻描淡写的认为它可以优雅的解决 NullPointException 的问题, 于是代码就开始这么写了 那么不得不...

时刻在奔跑
08/04
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

没有更多内容

加载失败,请刷新页面

加载更多

基于Sentry实现数据访问权限控制

Sentry初识 Sentry是适用于Hadoop生态环境、基于角色的授权管理系统,可以模块化集成到HDFS、Hive、Impala。它是一个策略引擎,运行定义授权规则,以校验用户对数据模型的访问请求。 授权粒度...

hblt-j
12分钟前
0
0
First Bad Version(leetcode278)

You are a product manager and currently leading a team to develop a new product. Unfortunately, the latest version of your product fails the quality check. Since each version is......

woshixin
43分钟前
1
0
executor 和task 优先于线程(68)

java.util.concurrent 包里有一个Executor 框架 基于接口的任务执行工具 只需要一行代码 提交一个runnable 方法 优雅的终止(必须做到,不然虚拟机可能不会退出) 对于负载不重的服务 Execut...

Java搬砖工程师
44分钟前
1
0
一条SQL查询语句是如何执行的

123

writeademo
46分钟前
3
0
CSS中position属性( absolute | relative | static | fixed )详解

四个属性的特点 static:无特殊定位,对象遵循正常文档流。top,right,bottom,left等属性不会被应用。 relative:对象遵循正常文档流,但将依据top,right,bottom,left等属性在正常文档流...

简心
51分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部