获取对象的几种方式与构造函数Constructor的调用
来源:互联网 发布:html5手机微场景源码 编辑:程序博客网 时间:2024/05/29 16:28
1.获取对象的方式
1.获取对象的方式有new,反射,反序列化和克隆。
2.构造函数Constructor的调用
1.获取对象时构造函数调用示意:
方式 父类构造体是否被调用 该对象构造体是否被调用 new Y Y 反射 Y Y 反序列化 Y N 克隆 N N2.代码
public class Animal { public Animal() { System.out.println("Animal Constructor called"); }}
public class Person extends Animal implements Serializable, Cloneable{ public Person() { System.out.println("Person Constructor called"); } @Override protected Object clone() throws CloneNotSupportedException { // TODO Auto-generated method stub return super.clone(); }}
public static void main(String[] args) { System.out.println("----------------new start"); Person person1 = new Person(); System.out.println("----------------new end\n"); System.out.println("----------------reflect start"); Class c = Person.class; try { Person person2 = (Person) c.newInstance(); } catch (Exception e) { e.printStackTrace(); } System.out.println("----------------reflect end\n"); System.out.println("----------------serializable start"); //将对象写入文件 File file = new File("E://test.txt"); FileOutputStream fileOutputStream = null; ObjectOutputStream objectOutputStream = null; try { if (file.exists()) { file.delete(); } fileOutputStream = new FileOutputStream(file); objectOutputStream = new ObjectOutputStream(fileOutputStream); objectOutputStream.writeObject(person1); } catch (Exception e) { e.printStackTrace(); } finally { try { if (objectOutputStream != null) { objectOutputStream.close(); objectOutputStream = null; } } catch (Exception e) { e.printStackTrace(); } try { if (fileOutputStream != null) { fileOutputStream.close(); fileOutputStream = null; } } catch (Exception e) { e.printStackTrace(); } } // 将对象从文件中读出来 FileInputStream fileInputStream = null; ObjectInputStream objectInputStream = null; try { fileInputStream = new FileInputStream(file); objectInputStream = new ObjectInputStream(fileInputStream); Person Person3 = (Person) objectInputStream.readObject(); }catch (Exception e) { e.printStackTrace(); } finally { try { if (objectInputStream != null) { objectInputStream.close(); objectInputStream = null; } } catch (Exception e) { e.printStackTrace(); } try { if (fileInputStream != null) { fileInputStream.close(); fileInputStream = null; } } catch (Exception e) { e.printStackTrace(); } if (file.exists()) { file.delete(); } } System.out.println("----------------serializable end\n"); System.out.println("----------------clone start"); try { Person person4 = (Person) person1.clone(); } catch (Exception e) { e.printStackTrace(); } System.out.println("----------------clone end\n"); }
运行结果:
----------------new startAnimal Constructor calledPerson Constructor called----------------new end----------------reflect startAnimal Constructor calledPerson Constructor called----------------reflect end----------------serializable startAnimal Constructor called----------------serializable end----------------clone start----------------clone end
0 0
- 获取对象的几种方式与构造函数Constructor的调用
- 构造函数的几种方式
- constructor的使用 : 查看对象的构造函数
- Java构造函数的调用顺序(Order of constructor calls)
- 函数声明的几种方式,函数声明与函数表达式的区别,函数调用的几种方式
- constructor始终指向创建当前对象的构造函数
- default constructor 的构造函数
- Jquery 获取对象的几种方式
- Jquery 获取对象的几种方式
- Jquery 获取对象的几种方式
- Jquery 获取对象的几种方式
- Jquery 获取对象的几种方式
- Jquery 获取对象的几种方式
- Jquery 获取对象的几种方式
- Jquery 获取对象的几种方式
- Jquery 获取对象的几种方式
- Jquery 获取对象的几种方式
- Jquery 获取对象的几种方式
- java从Eclipse的Console中读取数据(尤其汉字)遇到的问题
- 【PMP考试难点辨析】质量管理三大过程剖析及易错题总结(丁仿)
- 2000-使用Hive的正则解析器RegexSerDe分析Nginx日志
- javascript定义对象写法
- ArcGIS10.3_解决属性表中文乱码问题
- 获取对象的几种方式与构造函数Constructor的调用
- Scrapy spiders介绍
- postgresql 存储过程简单使用
- gdb多线程调试
- CString比较相等不得不说的故事
- libubox - uloop runqueue ustream
- “模拟退火算法的并行化”之“什么是模拟退火算法”
- Ubuntu 14.04 安装 Sublime Text 3
- php 存PDF文件及其在线预览功能