第一组:java.lang.Class类
1.getName:获取全类名
2.getSimpleName:获取简单类名
3.getFields:获取所有public修饰的属性,包含本类以及父类的
4.getDeclaredFields:获取本类中所有属性
5.getMethods:获取所有public修饰的方法,包含本类以及父类的
6.getDeclaredMethods:获取本类中所有方法
7.getConstructors: 获取本类所有public修饰的构造器
8.getDeclaredConstructors:获取本类中所有构造器
9.getPackage:以Package形式返回 包信息
10.getSuperClass:以Class形式返回父类信息
11.getInterfaces:以Class[]形式返回接口信息
12.getAnnotations:以Annotation[] 形式返回注解信息
第二组:java.lang.reflect.Field类
1.getModifiners:以int形式返回修饰符
2.getType:以Class形式返回类型
3.getName:返回属性名
第三组:java.lang.reflect.Method类
1.getModifiers:以int形式返回修饰符
说明:默认修饰符是0,public是1,private是2,protected是4,static是8,final是16
2.getReturnType:以Class形式返回类型
3.getName:返回属性名
4.getParameterTypes:以Class[]返回参数类型数组
第四组:java.lang.reflect.Constructor类
1.getModifiers:以int形式返回修饰符
2.getName:返回构造器名(全类名)
3.getParameterTypes:以Class[]返回参数类型数组
java
ackage com.reflection.ReflectionUtils;
import java.io.Serializable;
import java.lang.annotation.Annotation;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
//演示如何通过反射获取类的结构信息
public class ReflectionUtils {
public static void main(String[] args) throws Exception{
new ReflectionUtils().API_01();
new ReflectionUtils().API_02();
new ReflectionUtils().API_03();
new ReflectionUtils().API_04();
}
//第一组
public void API_01()throws Exception{
// 第一组:java.lang.Class类
//得到class对象
Class<?> personClass = Class.forName("com.reflection.ReflectionUtils.Person");
// 1.getName:获取全类名
System.out.println(personClass.getName());//com.reflection.ReflectionUtils.Person
// 2.getSimpleName:获取简单类名
System.out.println(personClass.getSimpleName());//Person
// 3.getFields:获取所有public修饰的属性,包含本类以及父类的
Field[] fields = personClass.getFields();
for (Field f :fields) {
System.out.println(f.getName());//name hobby 因为只有他俩是public修饰的
}
// 4.getDeclaredFields:获取本类中所有属性
Field[] declaredFields = personClass.getDeclaredFields();
for (Field declaredField : declaredFields) {
System.out.println(declaredField.getName());//name age job sal
}
// 5.getMethods:获取所有public修饰的方法,包含本类以及父类的
Method[] methods = personClass.getMethods();
for (Method method : methods) {
System.out.println(method);
}
// 6.getDeclaredMethods:获取本类中所有方法
Method[] declaredMethods = personClass.getDeclaredMethods();
for (Method declaredMethod : declaredMethods) {
System.out.println(declaredMethod.getName());
}
// 7.getConstructors: 获取本类所有public修饰的构造器
Constructor<?>[] constructors = personClass.getConstructors();
for (Constructor<?> constructor : constructors) {
System.out.println(constructor.getName());
}
// 8.getDeclaredConstructors:获取本类中所有构造器
Constructor<?>[] declaredConstructors = personClass.getDeclaredConstructors();
for (Constructor<?> declaredConstructor : declaredConstructors) {
System.out.println(declaredConstructor.getName());
}
// 9.getPackage:以Package形式返回 包信息
System.out.println(personClass.getPackage());
// 10.getSuperClass:以Class形式返回父类信息
Class<?> superclass = personClass.getSuperclass();
System.out.println(superclass);
// 11.getInterfaces:以Class[]形式返回接口信息
Class<?>[] interfaces = personClass.getInterfaces();
for (Class<?> anInterface : interfaces) {
System.out.println(anInterface.getName());
}
// 12.getAnnotations:以Annotation[] 形式返回注解信息
Annotation[] annotations = personClass.getAnnotations();
for (Annotation annotation : annotations) {
System.out.println(annotation.toString());
}
}
//第二组
public void API_02()throws Exception {
// 第二组:java.lang.reflect.Field类
//得到class对象
Class<?> personClass = Class.forName("com.reflection.ReflectionUtils.Person");
// 1.getModifiners:以int形式返回修饰符,默认修饰符是0,public是1,private是2,protected是4,static是8,final是16
// 2.getType:以Class形式返回类型
// 3.getName:返回属性名
//获取本类中所有属性
Field[] declaredFields = personClass.getDeclaredFields();
for (Field declaredField : declaredFields) {
System.out.println(declaredField.getName() + "该属性的修饰符值为" + declaredField.getModifiers()
+ " 该属性的类型为" + declaredField.getType());//name age job sal 1 4 0 2
}
// name该属性的修饰符值为1 该属性的类型为class java.lang.String
// age该属性的修饰符值为4 该属性的类型为int
// job该属性的修饰符值为0 该属性的类型为class java.lang.String
// sal该属性的修饰符值为2 该属性的类型为double
}
//第三组
public void API_03()throws Exception {
// 第三组:java.lang.reflect.Field类
//得到class对象
Class<?> personClass = Class.forName("com.reflection.ReflectionUtils.Person");
// 1.getModifiers:以int形式返回修饰符 说明:默认修饰符是0,public是1,private是2,protected是4,static是8,final是16
// 2.getReturnType:以Class形式返回类型
// 3.getName:返回属性名
// 4.getParameterTypes:以Class[]返回参数类型数组
//getDeclaredMethods:获取本类中所有方法
Method[] declaredMethods = personClass.getDeclaredMethods();
for (Method declaredMethod : declaredMethods) {
System.out.println(declaredMethod.getName() + "该方法访问修饰符对应值为" + declaredMethod.getModifiers()
+ " 该方法的返回类型为" + declaredMethod.getReturnType() + " 该方法的属性名" + declaredMethod.getName());
//输出当前方法形参数组情况
Class<?>[] parameterTypes = declaredMethod.getParameterTypes();
for (Class<?> parameterType : parameterTypes) {
System.out.println(" 该方法形参类型" + parameterType.getName());
}
}
// m1该方法访问修饰符对应值为1 该方法的返回类型为void 该方法的属性名m1
// m2该方法访问修饰符对应值为4 该方法的返回类型为int 该方法的属性名m2
// 该方法形参类型java.lang.String
// 该方法形参类型int
// 该方法形参类型java.lang.String
// m3该方法访问修饰符对应值为0 该方法的返回类型为void 该方法的属性名m3
// m4该方法访问修饰符对应值为2 该方法的返回类型为void 该方法的属性名m4
}
//第四组
public void API_04()throws Exception {
// 第四组:java.lang.reflect.Constructor类
//得到class对象
Class<?> personClass = Class.forName("com.reflection.ReflectionUtils.Person");
// 1.getModifiers:以int形式返回修饰符
// 2.getName:返回构造器名(全类名)
// 3.getParameterTypes:以Class[]返回参数类型数组
//获取本类中所有构造器
Constructor<?>[] declaredConstructors = personClass.getDeclaredConstructors();
for (Constructor<?> declaredConstructor : declaredConstructors) {
System.out.println(declaredConstructor.getName());
Class<?>[] parameterTypes = declaredConstructor.getParameterTypes();
for (Class<?> parameterType : parameterTypes) {
System.out.println(" 该构造器形参类型为" + parameterType);
}
}
// 该构造器形参类型为class java.lang.String
// 该构造器形参类型为int
// 该构造器形参类型为class java.lang.String
// 该构造器形参类型为double
}
}
class A{
public String hobby;
public A() {
}
}
@Deprecated
class Person extends A implements Serializable {
//属性
public String name;
protected int age;
String job;
private double sal;
//构造器
private Person(String name, int age, String job, double sal) {
this.name = name;
this.age = age;
this.job = job;
this.sal = sal;
}
public Person() {
}
//方法
public void m1(){}
protected int m2(String name,int age,String job){
return 1;
}
void m3(){}
private void m4(){}
}