网站建设技术规范及要求,抖音搜索seo排名优化,网站建设评审验收会议主持词,嘉定区 网站建设先上关键内容#xff0c;所用到的代码请参考文末示例代码。一、使用new关键字创建对象这是一种最常用的创建对象的方式。Student student1 new Student();二、使用Class的newInstance()方法创建对象需要有一个无参构造方法#xff0c;这个newInstance()方法调用无参的构造函…先上关键内容所用到的代码请参考文末示例代码。一、使用new关键字创建对象这是一种最常用的创建对象的方式。Student student1 new Student();二、使用Class的newInstance()方法创建对象需要有一个无参构造方法这个newInstance()方法调用无参的构造函数创建对象。类名.calss.newInstance( )Student student2 Student.class.newInstance();该方法就是反射机制事实上Class的newInstance()方法内部就是调用Constructor的newInstance()方法。Class类的newInstance只能触发无参构造方法创建对象而构造器类的newInstance能触发有参数或者任意参数的构造方法来创建对象。三、使用Constructor类的newInstance()方法创建对象java.lang.reflect.Constructor类里也有一个newInstance()方法可以创建对象。我们可以通过这个newInstance()方法调用有参数的和私有的构造函数。Constructor student3 Constructor.class.newInstance();四、使用克隆clone()方法创建对象Tips要使用clone()方法我们需要先实现Cloneable接口并实现其定义的clone()方法无论何时我们调用一个对象的clone()方法jvm就会创建一个新的对象将前面对象的内容全部拷贝进去。用clone()方法创建对象并不会调用任何构造函数。Student student4 new Student().clone();五、使用反序列化创建对象Java序列化是指把Java对象转换为字节序列的过程而Java反序列化是指把字节序列恢复为Java对象的过程使用反序列化当我们序列化和反序列化一个对象jvm会给我们创建一个单独的对象。在反序列化时jvm创建对象并不会调用任何构造函数。为了反序列化一个对象我们需要让我们的类实现Serializable接口。ObjectInputStream ois new ObjectInputStream(new FileInputStream(FILE_NAME));
// 5、使用反序列化创建对象
Object student5 ois.readObject();六、创建对象的5种方式调用构造器总结创建对象的方式是否调用了构造器使用new关键字创建对象是Class.newInstance()是Constructor.newInstance()是clone()否反序列化否Java创建实例对象是不是必须要通过构造函数这其实是衍生出来的一个面试题。 上面问题的答案很明显了Java创建实例对象并不一定必须要调用构造器的。七、示例代码全以下是本文所用到的所有示例代码。7.1 编写Student学生类package com.effective.chapter2.other;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;import java.io.Serializable;Data
AllArgsConstructor
NoArgsConstructor
public class Student implements Cloneable, Serializable {private String name;private Integer age;Overridepublic Student clone() {try {Student clone (Student) super.clone();// TODO: copy mutable state here, so the clone cant change the internals of the originalreturn clone;} catch (CloneNotSupportedException e) {throw new AssertionError();}}
}7.2 编写测试类package com.effective.chapter2.other;import java.io.*;
import java.lang.reflect.Constructor;public class CreateObjectTest {private static final String FILE_NAME student.obj;public static void main(String[] args) throws InstantiationException, IllegalAccessException, IOException {// 1、使用new关键字创建对象Student student1 new Student();System.out.println(使用new关键字创建对象 student1);// 2、使用Class类的newInstance()方法创建对象Student student2 Student.class.newInstance();System.out.println(使用Class类的newInstance()方法创建对象 student2);// 3、使用Constructor类的newInstance()方法创建对象Constructor student3 Constructor.class.newInstance();System.out.println(使用Constructor类的newInstance()方法创建对象 student3);// 4、使用clone()方法创建对象Student student4 student2.clone();System.out.println(使用clone()方法创建对象 student4);try {// Java序列化是指把Java对象转换为字节序列的过程而Java反序列化是指把字节序列恢复为Java对象的过程// 序列化对象ObjectOutputStream oos new ObjectOutputStream(new FileOutputStream(FILE_NAME));oos.writeObject(student1);ObjectInputStream ois new ObjectInputStream(new FileInputStream(FILE_NAME));// 5、使用反序列化创建对象Object student5 ois.readObject();System.out.println(使用反序列化创建对象 student5);} catch (ClassNotFoundException e) {throw new RuntimeException(e);}}
}完结