java 实例化对象的几种姿势
2019独角兽企业重金招聘Python工程师标准>>>
代码里面有注释:
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;}
}
转载于:https://my.oschina.net/viakiba/blog/1483852
java 实例化对象的几种姿势相关推荐
- 用spring管理和实例化对象的四种方式
用spring管理和实例化对象的四种方式 方式一:无参构造函数(最常用) 对象是spring创建,创建的对象还要交给spring容器管理 bean:豆子 id:在spring容器中Hello对象的名, ...
- Java中对象的三种状态
转载自 Java中对象的三种状态 Java中的对象的三种状态是和垃圾回收紧密相关的,因此有必要深究. 状态一:可触及态:从根节点开始,可以搜索到这个对象,也就是可以访问到这个对象,也有人将其称为可 ...
- java实例化对象后面添加花括号的理解分析
java实例化对象后面添加花括号的理解分析 昨天在看MyBatis官方文档时看到这么一段代码 return new SQL() {{SELECT("P.ID, P.USERNAME, P.P ...
- 详解C#实例化对象的三种方式及性能对比
前言 做项目过程中有个需求要实例化两万个对象并添加到List 中,这个过程大概需要1min才能加载完(传参较多),于是开启了代码优化之旅,再此记录. 首先想到的是可能实例化比较耗时,于是开始对每种实例 ...
- java实例化对象时程序运行顺序
当java实例化对象时,首先先进行类加载,类加载的整个过程是将类字节码引入内存,并未类中的static变量赋值. 上篇文章: http://blog.csdn.net/kingherooo/artic ...
- Java实例化对象过程中的内存分配
问题引入 这里先定义一个很不标准的"书"类,这里为了方便演示就不对类的属性进行封装了. class Book{String name; //书名double price; //价格 ...
- JAVA构造对象的几种方式(构建器、构造器)
大家好,我是烤鸭: 今天说一下初始化对象的几种方式: 1. 多参数构造器 2. 构建器 3. 构造器后 + get/set方法 举个例子: 这里有个机构entity,提供一个默 ...
- java实例化对象的过程
学习JAVA这门面向对象的语言,实质就是不断地创建类,并把类实例化为对象并调用方法.对于初学JAVA的人总搞清楚对象是如何实例化的,假如类之间存在继承关系,那就更糊涂了.下面我们通过两个例题来说明对象 ...
- 实例化对象的三种方法
1.任何类的实例化对象可以通过Object类中的getClass()方法取得Class类对象 public class Test {public static void main(String[] a ...
最新文章
- django构建网页_通过解决问题的方式学习django,律师如何构建副业
- Android Studio动态调试Smali
- Vmware 没有vmnet8虚拟网卡、解决方法就是:刷机
- 72年属鼠48岁有一灾2020_李半仙推算:1972年虚岁48岁属鼠人,2020年干什么最能发财??...
- nodejs命令行执行程序_在NodeJS中编写命令行应用程序
- php 函数命名 特殊字符,php 特殊字符处理函数
- 在导出php,PHP导出通用方法
- 华为双系统手机可以刷成单系统_「冯站长之家」今日聚焦:重大突破!华为手机鸿蒙系统2.0,正式面世!骂华为的“喷子”,可以休矣!...
- python调用c++动态库_Python应用:调用C/C++动态链接库的方法详解
- 【前端基础】Web与Native交互之The JSBridge FAQ
- 8. Browser 对象 - History 对象(2)
- fatal error: krb5.h: 没有那个文件或目录
- 【POJ 3320】【尺取法】Jessica's Reading Problem【暑期 No.2】
- JVM监控及诊断工具命令行篇之jinfo
- 学习Scala:孤立对象的实现原理
- .net core | donet core IIS 文件路径问题
- 光学动作捕捉系统构成
- QQ浏览器 不支持html5,浏览器常见问题_浏览器高级功能_浏览器在线帮助-QQ浏览器官网...
- 这五本人气火爆的有声小说,能成为网络文学20年优秀有声作品吗?
- 主从模式的数据库搭建(主从复制)
热门文章
- mysql中文注释语法报错_Linux系统Python配置MySQL详细教程
- 生信多组学整合工具的比较研究
- 人类染色质开放状态数据库,ATACdb使用介绍
- stay hungry stay foolish原文_弟子规原文+译文+注释
- 光流 | 使用Horn-Schunck方法进行光流估计(附代码)
- 电路 | 稳压电路设计
- php7 参数类型限定,PHP参数类型限制 - Corwien的博客 - OSCHINA - 中文开源技术交流社区...
- python精要(66)—类(3)-文档字符串,注释文档
- python源码精要(8)-CPython源代码结构
- wxWidgets随笔(1)-hello,world