目录
一、编写一个目标类(Student类)
package Test;
public class Student {
public String name;
private String id;
public Student() {
}
private Student(String name) {
this.name = name;
}
private int doHomework(int b,String str) {
System.out.println("正在做作业......");
return b;
}
public void sleep() {
System.out.println("正在睡觉......");
}
}
二、构造方法的获取,调查与使用
(1)获取
a.无declared修饰
getConstrutors()方法返回该Class对象表示类包含的所有public构造方法所对应Constructor对象数组。
getConstrutor(Class<?>... parameterTypes)方法用于返回与该Class对象表示类中参数列表相匹配的public构造函数(不含继承)对应的Constructor对象。
package Test;
import java.lang.reflect.Constructor;
public class Test {
public static void main(String[] args) {
// 反射是一种新的操作类中属性,构造方法和普通方法的机制
Class clazz = null;
clazz = Student.class;
Constructor constructor = null;
try {
constructor = clazz.getConstructor();// 获取无参构造方法
System.out.println(constructor.getName());
constructor = clazz.getConstructor(String.class);// 获取有参构造方法
System.out.println(constructor.getName());
} catch (Exception e) {
e.printStackTrace();
}
}
}
运行结果:
由开头的定义的Student类得,有参构造方法为private修饰而getConstrutors()方法只能获取public修饰的方法,所以系统报错
b.declared修饰
getDeclaredConstructors() 方法用于返回一个该Class对象表示类中声明的所有构造方法(不区分访问权限)对应的Constructor对象数组。
getDeclaredConstructor(Class<?>... parameterTypes)用于返回与该Class对象表示类中定义的形参类型相匹配的构造方法(不区分访问权限)的Constructor对象。
package Test;
import java.lang.reflect.Constructor;
public class Test {
public static void main(String[] args) {
// 反射是一种新的操作类中属性,构造方法和普通方法的机制
Class clazz = null;
clazz = Student.class;
Constructor constructor = null;
try {
constructor = clazz.getDeclaredConstructor();// 获取无参构造方法
System.out.println(constructor.getName());
constructor = clazz.getDeclaredConstructor(String.class);// 获取有参构造方法
System.out.println(constructor.getName());
} catch (Exception e) {
e.printStackTrace();
}
}
}
因为declared声明的方法不区分权限,因此两个构造方法都能被获取。
(2)调查
a、构造方法的归属类
getDeclaringClass()方法用于返回声明Constructor对象对应构造方法的类的Class对象。
package Test;
import java.lang.reflect.Constructor;
public class Test {
public static void main(String[] args) {
// 反射是一种新的操作类中属性,构造方法和普通方法的机制
Class clazz = null;
clazz = Student.class;
Constructor constructor = null;
try {
constructor = clazz.getDeclaredConstructor();// 获取无参构造方法
clazz = constructor.getDeclaringClass();//获取归属类
System.out.println(clazz.getName());
constructor = clazz.getDeclaredConstructor(String.class);// 获取有参构造方法
clazz = constructor.getDeclaringClass();//获取归属类
System.out.println(clazz.getName());
} catch (Exception e) {
e.printStackTrace();
}
}
}
运行结果 :
b、构造方法的修饰符
getModifiers()方法用于以整数形式返回Constructor对象表示的构造函数的修饰符。后期可用toString()方法将其转换为字符串
package Test;
import java.lang.reflect.Constructor;
import java.lang.reflect.Modifier;
public class Test {
public static void main(String[] args) {
// 反射是一种新的操作类中属性,构造方法和普通方法的机制
Class clazz = null;
clazz = Student.class;
Constructor constructor = null;
int result = 0;