无聊总结
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();
}
}
}
}
}
分享到:
相关推荐
2. 饿汉式:在类加载时就创建单例,线程安全,但可能导致不必要的内存占用。 ```java public class Singleton { private static final Singleton INSTANCE = new Singleton(); private Singleton() {} public ...
-java 创建对象的四种方法是指在 Java 中创建对象的不同方式,它们分别是使用 new 语句创建对象、使用反射机制创建对象、使用 clone() 方法创建对象和使用反序列化机制创建对象。 - 使用 new 语句创建对象是 Java ...
压缩包中的"java组播编程实例"文件很可能是上述步骤的实现代码,包含了完整的组播发送和接收过程。通过分析和运行这个示例,开发者可以更好地理解Java中的组播工作原理,并将其应用到自己的项目中。 总之,Java的组...
- **字符串创建方式**:可以通过直接赋值的方式创建字符串(如`String s = "abc";`),也可以通过`new String()`来创建。 - **内存分配**:直接赋值创建的字符串存储在字符串常量池中,而通过`new String()`创建的...
在Java编程语言中,创建XML(可扩展标记语言)文件是一项常见的...总之,Java创建XML文件的过程涉及到DOM解析、元素和属性的创建、文本节点的添加以及文件的序列化。掌握这些知识点有助于在项目中灵活地处理XML数据。
Java中创建对象主要有四种显式的方式,分别是使用new关键字、反射机制、克隆克隆方法以及反序列化手段。每种方法都有其特定的使用场景和特点,以下是这些方法的详细说明: 1. 使用new关键字创建对象 这是最常见也是...
在Java编程语言中,动态类加载机制是一种强大的特性,它允许程序在运行时加载、实例化和执行未在编译时硬编码的类。这种能力是通过Java的反射API实现的,它为开发者提供了深入洞察和操作Java对象的能力。本文将深入...
Java 中的 new 关键字和 newInstance() 方法都是用于创建对象的,但是它们之间有着本质的区别。理解这两者的区别对于 Java 编程尤其重要。 首先,new 关键字是 Java 的一个保留字,用于创建一个新的对象。例如,`A ...
在Java编程语言中,创建XML对象是处理XML文档的基础,这通常涉及到解析XML文档并将其转化为内存中的对象,以及将对象的数据写入新的XML文档。本项目的核心目标就是实现这一功能,使得对XML文档的读写操作变得简单易...
- ** Type Inference for Generic Instance Creation**:简化了泛型实例的创建,编译器可以推断出类型参数。 对于初学者,推荐阅读提供的教程链接:[blog.csdn.net/FL1623863129/article/details/134426730]...
JAXB是Java SE的一部分,它提供了一种方便的方式来将Java对象转换为XML以及将XML数据绑定到Java对象。使用JAXB,我们首先需要创建一个Java类来表示我们的数据模型,然后使用`@XmlRootElement`、`@XmlElement`等注解...
2. Java数据类型:Java中的基本数据类型如整型(int)、双精度浮点型(double)和布尔型(boolean)被封装在相应的类中。Java语言支持封装,允许通过方法对私有实例变量(instance variables)进行操作,实现封装。 ...
Java反射是Java编程语言中的一个强大工具,它允许程序在运行时检查类、接口、字段和方法的信息,并能动态地创建对象和调用方法。在深入理解Java反射之前,我们首先要明白什么是反射机制。反射机制是指在运行状态中,...
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编程语言中一个非常重要的特性,它允许程序在运行时动态地获取类的信息并进行操作。反射机制的核心在于,它打破了程序在编译时的静态性,使得程序能够在运行时发现并调用类、接口、字段和方法等...
要在IntelliJ IDEA中使用此插件,用户可以从JetBrains插件市场下载,或者直接导入压缩包文件`new-instance-inspection-master`。安装后,插件将在代码检查期间自动运行,提供实时反馈。 总结,"New Instance ...
在Java编程语言中,"实例"(Instance)通常指的是一个类的具体对象。当我们谈论"JAVA源码"时,这是指用Java编写的程序代码,它包含了类定义、方法实现、变量声明等元素,是我们理解和创建应用程序的基础。在这个...
本文将详细讲解Java中创建对象的五种常见方式。 1. **构造器实例化** 最常见的方式是通过类的构造器来创建对象。构造器是一个特殊的方法,用于初始化新创建的对象。在类定义中,我们可以声明一个或多个构造器,每...
但是这种方式存在线程安全问题,如果多个线程同时调用getInstance(),可能会创建多个实例。例如: ```java public class Singleton { private static Singleton instance; private Singleton() {} public ...