无聊总结
1. 使用 new 关键字;
Object obj = new Object();
2. Cloneable
必须实现Cloneable 接口,并且实现 clone方法(直接套用jdk的)
3. Class.forName
只能适用于无参构造函数(这也是很多框架要求无参构造函数的原因)
4. 使用反射 Constructor
比较灵活的构造,各种参数可以传入
5. 反序列化
必须实现序列化接口Serializable, 最好显示声明serialVersionUID
举例的class
package com.maneco.art;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
public class SerializClass implements Serializable, Cloneable {
private static final long serialVersionUID = 1L;
String name = "default";
@Override
public String toString() {
return super.toString() + "name: " + name;
}
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
public static void main(String[] args) {
ObjectOutputStream oos = null;
ObjectInputStream ois = null;
try {
// #0 new
SerializClass obj = new SerializClass();
// #1 cloneable
SerializClass obj0 = (SerializClass) obj.clone();
obj0.name = "Cloneable";
// #2 class for name
Class clazz = Class.forName("com.maneco.art.SerializClass");
SerializClass obj1 = (SerializClass) clazz.newInstance();
obj1.name = "ClassForName";
// #3 reflect
SerializClass obj2 = null;
Constructor[] cs = SerializClass.class.getConstructors();
for (Constructor c : cs) {
obj2 = (SerializClass) c.newInstance(null);
}
obj2.name = "Reflect";
// #4 deserialize
oos = new ObjectOutputStream(new FileOutputStream("Object.txt"));
oos.writeObject(obj2);
oos.flush();
ois = new ObjectInputStream(new FileInputStream("Object.txt"));
SerializClass obj3 = (SerializClass) ois.readObject();
// print
System.out.println(obj);
System.out.println(obj0);
System.out.println(obj1);
System.out.println(obj2);
System.out.println(obj3);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
} finally {
if (null != oos) {
try {
oos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (null != ois) {
try {
ois.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
分享到:
相关推荐
java-wechaty-getting-started 开箱即用的Java Wechaty Starter Project模板连接聊天机器人 Wechaty是用于微信个人帐户的RPA SDK,可以帮助您使用6行Java创建聊天机器人。世界上最短的Java ChatBot:6行代码 class ...
Java 创建对象的五种方式 使用 new 来创建对象 使用 newInstance 方法来创建 使用反射来创建对象 使用对象克隆来创建对象 使用反序列化创建对象
- 在 JVM 中,对象是如何创建的? - 内存分配方式有哪些呢? - 请你说一下对象的内存布局? - 对象头 Header - 实例数据 Instance Data - 对齐 Padding - 对象访问定位的方式有哪些? - 如何判断对象已经...
instanceVar.java 定义一个实例成员变量 invokeByObject.java 对象实参传递示例程序 invokeByValue.java 传值调用示例程序 invokeMethod.java 同一个类中调用方法示例 invokeOther.java 类的外部调用方法示例 ...
采用Struts2+hibernate+Oracle10g+Tomcat 涉及车辆管理,配送点管理,运输方式管理,订单管理,员工管理,用户管理,部门管理,权限管理,角色管理等基础管理功能。 系统功能及技术性能指标: 1.1前台管理 (1)登录...
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); Document domTree = db.parse( xmlFile ); return domTree; } /** * 获得某...
import java.text.SimpleDateFormat; import java.util.Date; import java.util.LinkedHashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; public class SqlUtils { private ...
Java 为程序加锁的方式主要有两种:synchronized 与 Lock。 1. synchronized 可以修饰的作用域如下: - 非静态方法(加的锁为对象锁); - 静态方法(加的锁为类锁); - 代码块(对象锁与类锁均可); 2. Lock ...
一一击破Java入门可能会遇到的难点和疑惑 抽丝剥茧,层层推进,让知识环环相扣,降低了学习的难度 通过大量的比喻、类比、对比和图示等多种讲解方式,学习效果好 对Java语言的每个语法都提供了一个或多个例程讲解 ...
2)通过Class对象的newInstance()方法调用构造器创建Java对象,eg:Class.forName("com.mysql.jdbc.Driver").newInstance(); 3)通过Java的反序列化机制从IO流中恢复Java对象,eg: package test; ...
你可以创建个新的class loader,然后用loadClass加载,再newInstance;原来加载的classloader是不能重新加载的;这算是一个典型的容器思路。 《深入理解java虚拟机》 2、对java“书写一次,到处运行”(Write once, ...
Java 2实用教程(第三版)实验指导与习题解答 清华大学出版社 (编著 耿祥义 张跃平) 实验模版代码 建议使用文档结构图 (选择Word菜单→视图→文档结构图) 上机实践1 初识Java 4 实验1 一个简单的应用程序 ...
java-saml-sp 一个Java Servlet过滤器,它将保护应用程序并使用SAML进行联盟 开始: 使用类将过滤器添加到您的应用程序中,或使用mvn来构建Jar并将其添加到classpath 配置您的web.xml文件 在使用SAML的Salesforce...
一一击破Java入门可能会遇到的难点和疑惑 抽丝剥茧,层层推进,让知识环环相扣,降低了学习的难度 通过大量的比喻、类比、对比和图示等多种讲解方式,学习效果好 对Java语言的每个语法都提供了一个或多个例程讲解 ...
除了使用new关键字创建对象意外,试列举另外三种以上创建实例的方式? 37.classloader中,JDK的API、Classpath中的同web-inf中的class加载方式有什么区别? 38.列举三种以上垃圾回收算法,并比较其优缺点? 39....
运行项目的步骤先决条件Java 8 Maven AWS帐户(如果有信用卡,则免费)Oracle JDBC驱动程序AWS上的Oracle实例设置登录到AWS管理控制台并转到CloudFormation服务创建一个新堆栈,上载所提供的脚本:create-oracle-...
传统方式获取流是new创建的,而在web开发中有可能获取不到配置文件,为了避免这种情况,用以下方式获取流: 1. 通过当前类字节码文件的方式,一般是用当前类的字节码文件 当前类.class....
type instance-varable2; type instance-varable3; the methodname1(parameter-list){method-body;} the methodname2(parameter-list){method-body;} the methodnameN (parameter-list){method-body;} 下面将类...
创建名为Bean1的Java类; 创建Spring配置文件beans1.xml,并配置Bean1实体类Bean; 创建测试类,测试程序。 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="/schema/beans" xmlns:xsi="/2001/XMLSchema-...
import java.awt.AWTException; import java.awt.BorderLayout; import java.awt.CardLayout; import java.awt.Dimension; import java.awt.GridBagLayout; import java.awt.MenuItem; import java.awt.PopupMenu; ...