静态内部类的实例化
/**
* 静态内部类的实例化
*/
@Test
public void testStatic() throws Exception {
Constructor<Person> constructor = Class_practice.Person.class.getConstructor(String.class, Integer.class);
Person person = constructor.newInstance("XXX", 23);
System.out.println(person);
}
非静态内部类的实例化
/**
* 非静态内部类的实例化
*/
@Test
public void testNoStatic() throws Exception {
// Class getConstructor(...) 对象表示非静态上下文中声明的内部类,则形参类型作为第一个参数包括显示封闭的实例。
Constructor<Student> constructor = Class_practice.Student.class.getConstructor(Class_practice.class);
// Constructor newInstance(...) 如果构造方法的声明类是非静态上下文的内部类,则构造方法的第一个参数需要是封闭实例
Student student = constructor.newInstance(Class_practice.class.getConstructor().newInstance());
System.out.println(student);
}
实体类
public class Class_practice {
class Student {
private String name;
private Integer age;
public Student() {
System.out.println("无参构造方法");
}
public Student(String name, Integer age) {
System.out.println("有参构造方法");
this.name = name;
this.age = age;
}
}
static class Person {
private String name;
private Integer age;
public Person() {
System.out.println("无参构造方法");
}
public Person(String name, Integer age) {
System.out.println("有参构造方法");
this.name = name;
this.age = age;
}
private Person(String name) {
System.out.println("私有的构造器");
this.name = name;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
private void fly() {
System.out.println("我要飞");
}
}