`
manecocomph
  • 浏览: 3616 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

2011-2-26 Java 创建新instance的可能方式

阅读更多
无聊总结
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-single-instance.rar_java single_single_single-pass

    2. 饿汉式:在类加载时就创建单例,线程安全,但可能导致不必要的内存占用。 ```java public class Singleton { private static final Singleton INSTANCE = new Singleton(); private Singleton() {} public ...

    JAVA创建对象的四种方法

    -java 创建对象的四种方法是指在 Java 中创建对象的不同方式,它们分别是使用 new 语句创建对象、使用反射机制创建对象、使用 clone() 方法创建对象和使用反序列化机制创建对象。 - 使用 new 语句创建对象是 Java ...

    java-multicast-instance.rar_java multicast_组播 Java

    压缩包中的"java组播编程实例"文件很可能是上述步骤的实现代码,包含了完整的组播发送和接收过程。通过分析和运行这个示例,开发者可以更好地理解Java中的组播工作原理,并将其应用到自己的项目中。 总之,Java的组...

    MLDN------java 面试技巧

    - **字符串创建方式**:可以通过直接赋值的方式创建字符串(如`String s = "abc";`),也可以通过`new String()`来创建。 - **内存分配**:直接赋值创建的字符串存储在字符串常量池中,而通过`new String()`创建的...

    java创建xml文件

    在Java编程语言中,创建XML(可扩展标记语言)文件是一项常见的...总之,Java创建XML文件的过程涉及到DOM解析、元素和属性的创建、文本节点的添加以及文件的序列化。掌握这些知识点有助于在项目中灵活地处理XML数据。

    java四种创建对象的方式

    Java中创建对象主要有四种显式的方式,分别是使用new关键字、反射机制、克隆克隆方法以及反序列化手段。每种方法都有其特定的使用场景和特点,以下是这些方法的详细说明: 1. 使用new关键字创建对象 这是最常见也是...

    Java技术----实现JAVA的动态类载入机制

    在Java编程语言中,动态类加载机制是一种强大的特性,它允许程序在运行时加载、实例化和执行未在编译时硬编码的类。这种能力是通过Java的反射API实现的,它为开发者提供了深入洞察和操作Java对象的能力。本文将深入...

    new关键字和newInstance() 的区分

    Java 中的 new 关键字和 newInstance() 方法都是用于创建对象的,但是它们之间有着本质的区别。理解这两者的区别对于 Java 编程尤其重要。 首先,new 关键字是 Java 的一个保留字,用于创建一个新的对象。例如,`A ...

    java创建xml对象

    在Java编程语言中,创建XML对象是处理XML文档的基础,这通常涉及到解析XML文档并将其转化为内存中的对象,以及将对象的数据写入新的XML文档。本项目的核心目标就是实现这一功能,使得对XML文档的读写操作变得简单易...

    java-jdk1.8-jdk-8u181-linux-x64.zip

    - ** Type Inference for Generic Instance Creation**:简化了泛型实例的创建,编译器可以推断出类型参数。 对于初学者,推荐阅读提供的教程链接:[blog.csdn.net/FL1623863129/article/details/134426730]...

    实用工具(一)-------java对象类、XML格式的相互转换

    JAXB是Java SE的一部分,它提供了一种方便的方式来将Java对象转换为XML以及将XML数据绑定到Java对象。使用JAXB,我们首先需要创建一个Java类来表示我们的数据模型,然后使用`@XmlRootElement`、`@XmlElement`等注解...

    《HEADFIRSTJAVA》--深入浅出Java说明与归纳.pdf

    2. Java数据类型:Java中的基本数据类型如整型(int)、双精度浮点型(double)和布尔型(boolean)被封装在相应的类中。Java语言支持封装,允许通过方法对私有实例变量(instance variables)进行操作,实现封装。 ...

    java-reflection-Xiangjie.rar_java 反射

    Java反射是Java编程语言中的一个强大工具,它允许程序在运行时检查类、接口、字段和方法的信息,并能动态地创建对象和调用方法。在深入理解Java反射之前,我们首先要明白什么是反射机制。反射机制是指在运行状态中,...

    python-javabridge-4.0.3-cp38-cp38-win-amd64.zip

    Python-JavaBridge是一个强大的工具,它允许Python代码与Java代码之间进行无缝交互。这个压缩包“python-javabridge-4.0.3-cp38-cp38-win-amd64.zip”包含了该库的最新版本4.0.3,专为Python 3.8(cp38)和Windows ...

    实战java反射机制-让你迅速认识java强大的反射机制

    Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查和操作类、接口、字段和方法的信息,甚至动态地创建对象并调用其方法。通过反射,开发者可以实现高度灵活和动态的代码,这对于框架开发、元编程...

    java反射 反编译:.class-->.java

    Java反射机制是Java编程语言中一个非常重要的特性,它允许程序在运行时动态地获取类的信息并进行操作。反射机制的核心在于,它打破了程序在编译时的静态性,使得程序能够在运行时发现并调用类、接口、字段和方法等...

    new-instance-inspection,intellij插件片段newinstance检查.zip

    要在IntelliJ IDEA中使用此插件,用户可以从JetBrains插件市场下载,或者直接导入压缩包文件`new-instance-inspection-master`。安装后,插件将在代码检查期间自动运行,提供实时反馈。 总结,"New Instance ...

    Instance_JAVA源码_

    在Java编程语言中,"实例"(Instance)通常指的是一个类的具体对象。当我们谈论"JAVA源码"时,这是指用Java编写的程序代码,它包含了类定义、方法实现、变量声明等元素,是我们理解和创建应用程序的基础。在这个...

    Java创建对象的5种方式.java

    本文将详细讲解Java中创建对象的五种常见方式。 1. **构造器实例化** 最常见的方式是通过类的构造器来创建对象。构造器是一个特殊的方法,用于初始化新创建的对象。在类定义中,我们可以声明一个或多个构造器,每...

    设计模式--单例模式java例子

    但是这种方式存在线程安全问题,如果多个线程同时调用getInstance(),可能会创建多个实例。例如: ```java public class Singleton { private static Singleton instance; private Singleton() {} public ...

Global site tag (gtag.js) - Google Analytics