java实例化类型_Java 实例化类方式

本文详细介绍了Java中创建对象的六种方式,包括new关键字、Class.forName与newInstance方法、ClassLoader的loadClass、Constructor的newInstance、clone方法以及反序列化。通过实例展示了每种方式的用法,并提供了Person类的示例代码。此外,还阐述了clone方法的使用及其注意事项以及反序列化的实现过程。
摘要由CSDN通过智能技术生成

一、java 实例化几种方式

1、用new语句创建对象,这是最常见的创建对象的方法。

2、使用Class静态方法 Class.forName  方法

3、使用 .loadClass() 方法

4、使用Constructor类的newInstance方法

运用反射手段,调用java.lang.Class或者java.lang.reflect.Constructor类的newInstance()实例方法。如:Object obj = Class.forName("java.lang.Object").newInstance();

5、调用对象的clone()方法。

无论何时我们调用一个对象的clone方法,JVM就会创建一个新的对象,将前面的对象的内容全部拷贝进去,用clone方法创建对象并不会调用任何构造函数。要使用clone方法,我们必须先实现Cloneable接口并实现其定义的clone方法

6、使用反序列化。

通过I/O流(包括反序列化),如运用反序列化手段,调用java.io.ObjectInputStream对象的 readObject()方法。

二、代码

Person 类

class Person {

private String name;

private int age;

public Person( String name,int age) {

this.name = name;

this.age = age;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

public String getName() {

return name;

}

public void setName(String name){

this.name =name;

}

@Override

public String toString() {

// TODO Auto-generated method stub

return "姓名是:"+name+"; 年龄是:"+age;

}

}

1、new 的方式实例化

Person p1 = new Person("王豪博",25);

System.out.println(p1.tostring())

2、使用Class静态方法 Class.forName  方法 (再调 newInstance方法 )

Person emp2 = (Person) Class.forName("org.pro.com.Person").newInstance();

或者

Persone emp2 = Person.class.newInstance();

3、class.loadClass 方法

ClassLoader cl; // 如何获得ClassLoader参考1.6

Class cls = cl.loadClass("com.rain.B"); // 使用第一步得到的ClassLoader来载入B

B b = (B)cls.newInstance(); // 有B的类得到一个B的实例

4、和Class类的newInstance方法很像, java.lang.reflect.Constructor类里也有一个newInstance方法可以创建对象。我们可以通过这个newInstance方法调用有参数的和私有的构造函数。

Constructor constructor = Person .class.getConstructor();

Person emp3 = constructor.newInstance();

5、使用 clone

class Person implements Cloneable {

private String name;

private int age;

public Person(String name, int age) {

this.name = name;

this.age = age;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

@Override

public Object clone() throws CloneNotSupportedException {

return super.clone();

}

@Override

public String toString() {

return "姓名是:" + name + "; 年龄是:" + age;

}

}

测试

public static void main(String[] args) {

Person p1 = new Person("Jone", 25);

Person p2 = null;

try {

p2 = (Person) p1.clone();

} catch (CloneNotSupportedException e) {

e.printStackTrace();

}

p2.setName("Ken");

p2.setAge(24);

System.out.println(p2);

}

6、使用反序列化

import java.io.*;

import java.util.Date;

public class ObjectSaver {

public static void main(String[] args) throws Exception {

ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("D:/objectFile.swf"));

//序列化对象

Customer customer = new Customer("haobo", 24);

out.writeObject("你好!");

out.writeObject(new Date());

out.writeObject(customer);

out.writeInt(123); //写入基本类型数据

out.close();

//反序列化对象

ObjectInputStream in = new ObjectInputStream(new FileInputStream("D:/objectFile.swf"));

System.out.println("obj1=" + (String) in.readObject());

System.out.println("obj2=" + (Date) in.readObject());

Customer obj3 = (Customer) in.readObject();

System.out.println("obj3=" + obj3);

int obj4 = in.readInt();

System.out.println("obj4=" + obj4);

in.close();

}

}

class Customer implements Serializable {

/**

*

*/

private static final long serialVersionUID = -88175599799432325L;

private String name;

private int age;

public Customer(String name, int age) {

this.name = name;

this.age = age;

}

public String toString() {

return "name=" + name + ", age=" + age;

}

}

--------------------------------------

https://blog.csdn.net/u012524415/article/details/80327705

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值