package com.itbin.smeb.model;
public class Testreflex {
private String id;
protected String name;
public String note;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getNote() {
return note;
}
public void setNote(String note) {
this.note = note;
}
//public 构造器
public Testreflex() {
}
//私有的 构造器
private Testreflex(String id) {
this.id = id;
}
//protected 构造器
protected Testreflex(String id, String name) {
this.id = id;
this.name = name;
}
//public 构造器
public Testreflex(String id, String name, String note) {
this.id = id;
this.name = name;
this.note = note;
}
@Override
public String toString() {
return "Testreflex{" +
"id='" + id + '\'' +
", name='" + name + '\'' +
", note='" + note + '\'' +
'}';
}
}
package com.itbin.smeb;
import com.itbin.smeb.model.Testreflex;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import java.lang.reflect.Constructor;
import java.util.Arrays;
@SpringBootTest
class SmebApplicationTests {
@Test
public void reflexTest() throws Exception {
//获取类的三种方式
//第一种: Class.forName() 常用
Class testreflex = Class.forName("com.itbin.smeb.model.Testreflex");
//第二种: 都有对象了 反射显得多余
Class<? extends Testreflex> aClass = new Testreflex().getClass();
//第三种 : 需要导包 依赖性太强
Class<Testreflex> testreflexClass = Testreflex.class;
System.out.println(testreflex == aClass); //true
System.out.println(testreflex == testreflexClass); //true
//反射用构造器创建对象
Constructor constructor = testreflex.getConstructor(String.class,String.class,String.class);
Testreflex id1 = (Testreflex) constructor.newInstance("id1","name1","note1");
System.out.println(id1.toString());
System.out.println("**********************所有公有构造方法*********************************");
Constructor[] constructors = testreflex.getConstructors();
Arrays.stream(constructors).forEach(System.out::println);
System.out.println("************所有的构造方法(包括:私有、受保护、默认、公有)***************");
Constructor[] declaredConstructors = testreflex.getDeclaredConstructors();
Arrays.stream(declaredConstructors).forEach(System.out::println);
System.out.println("*****************获取公有、无参的构造方法*******************************");
Constructor declaredConstructor = testreflex.getDeclaredConstructor(null);
//1>、因为是无参的构造方法所以类型是一个null,不写也可以:这里需要的是一个参数的类型,切记是类型
//2>、返回的是描述这个无参构造函数的类对象。
Object o = declaredConstructor.newInstance();
System.out.println((Testreflex)o);
System.out.println("******************获取私有构造方法,并调用*******************************");
Constructor declaredConstructor1 = testreflex.getDeclaredConstructor(String.class);
System.out.println(declaredConstructor1);
//调用构造方法
declaredConstructor1.setAccessible(true);//暴力访问(忽略掉访问修饰符)
Object o1 = declaredConstructor1.newInstance("100");
System.out.println(o1.toString());
System.out.println("******************获取方法*******************************");
//如果使用getDeclaredMethod,就不能获取父类方法,如果使用getMethod,就不能获取私有方法
/**
* true
* true
* Testreflex{id='id1', name='name1', note='note1'}
* **********************所有公有构造方法*********************************
* public com.itbin.smeb.model.Testreflex()
* public com.itbin.smeb.model.Testreflex(java.lang.String,java.lang.String,java.lang.String)
* ************所有的构造方法(包括:私有、受保护、默认、公有)***************
* private com.itbin.smeb.model.Testreflex(java.lang.String)
* public com.itbin.smeb.model.Testreflex()
* protected com.itbin.smeb.model.Testreflex(java.lang.String,java.lang.String)
* public com.itbin.smeb.model.Testreflex(java.lang.String,java.lang.String,java.lang.String)
* *****************获取公有、无参的构造方法*******************************
* Testreflex{id='null', name='null', note='null'}
* ******************获取私有构造方法,并调用*******************************
* private com.itbin.smeb.model.Testreflex(java.lang.String)
* Testreflex{id='100', name='null', note='null'}
*/
}
}