Java 实例化类方式

Java 实例化类方式

一、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()方法。

注意: Class.forName 和 .loadClass 方法的区别 : https://www.cnblogs.com/Jomini/p/13749568.html

二、代码

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

相关推荐

喜马拉雅
365的账户被关闭

喜马拉雅

📅 06-28 👁️ 6819
韩国口红品牌排行榜
365的账户被关闭

韩国口红品牌排行榜

📅 06-30 👁️ 5583
黑坑钓草鱼调漂的正确方法
365bet体育在线官

黑坑钓草鱼调漂的正确方法

📅 07-01 👁️ 1503
口红掉色正常吗?口红掉色好还是不掉色好?
365的账户被关闭

口红掉色正常吗?口红掉色好还是不掉色好?

📅 06-29 👁️ 4252