1 package ClassTest.ClassTest01;
2
3 import java.lang.reflect.Constructor;
4 import java.lang.reflect.InvocationTargetException;
5
6 /**
7 * FileName: ReflectDemo03
8 * Author: lps
9 * Date: 2022/4/11 16:15
10 * Sign:刘品水 Q:1944900433
11 */
12 public class ReflectDemo03 {
13 public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {
14
15 Class<?> c = Class.forName("ClassTest.ClassTest01.Student");
16 Constructor<?>[] cons = c.getConstructors();
17 for (Constructor con : cons) {
18 System.out.println(con);
19 }
20 System.out.println("======");
21 Constructor<?>[] decons = c.getDeclaredConstructors();
22 for (Constructor decon : decons) {
23 System.out.println(decon);
24 }
25 System.out.println("======");
26 //String.class,int.class,String.class
27 Constructor<?> con = c.getConstructor();
28 //T newInstance() 已过时。
29 //此方法传播由nullary构造函数抛出的任何异常,包括已检查的异常。 使用此方法有效地绕过编译器异常检查,否则将由编译器执行。
30 Object o = con.newInstance();
31 System.out.println(o);
32 Constructor<?> con11 = c.getConstructor(String.class, int.class, String.class);
33 Object o0 = con11.newInstance("刘品水", 21, "南京");
34 System.out.println(o0);
35
36
37 System.out.println("=========");
38 //private Student(String name)
39 //*Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes) 返回一个 Constructor对象,该对象反映由此 Class对象表示的类或接口的指定构造函数
40 Constructor<?> deco = c.getDeclaredConstructor(String.class);
41
42 //暴力反射
43 //void setAccessible(boolean flag) 将此反射对象的 accessible标志设置为指示的布尔值。
44 //setAccessible
45 //public void setAccessible(boolean flag)将此反射对象的accessible标志设置为指示的布尔值。
46 // 值为true表示反射对象应该在使用Java语言访问控制时抑制检查。
47 // 值为false表示反射对象应该在使用Java语言访问控制时执行检查,并在类描述中指出变体。
48
49 deco.setAccessible(true);
50
51 Object o1 = deco.newInstance("刘品水");
52 System.out.println(o1);
53 //class ClassTest.ClassTest01.ReflectDemo04 cannot access a member of class ClassTest.
54 // ClassTest01.Student with modifiers "private"
55
56
57 }
58 }
package ClassTest.ClassTest01;
/**
* FileName: Student
* Author: lps
* Date: 2022/4/11 15:22
* Sign:刘品水 Q:1944900433
*/
public class Student {
private String name;
int age;
public String adress;
public Student() {
}
private Student(String name) {
this.name = name;
}
Student(String name, int age) {
this.name = name;
this.age = age;
}
public Student(String name, int age, String adress) {
this.name = name;
this.age = age;
this.adress = adress;
}
private void function(){
System.out.println("function");
}
public void method1(){
System.out.println("method");
}
public void method2(String s){
System.out.println("method:"+s);
}
public String method3(String s, int i){
return s+","+i;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
", adress='" + adress + '\'' +
'}';
}
}
![]()
![]()