package com.liu.test03;
import java.lang.annotation.Annotation;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
/**
* @author : liu
* 日期:16:22:11
* 描述:IntelliJ IDEA
* 版本:1.0
*/
public class Test03 {
//这是一个main方法:是程序的入口
public static void main(String[] args) throws NoSuchMethodException, InstantiationException, IllegalAccessException, InvocationTargetException {
//获取字节码信息
Class cls = Student.class;
//获取方法
//getMethods获取运行时类的方法还有所有父类中的方法(被Pbulic修饰的)
Method[] methods = cls.getMethods();
for (Method m:methods
) {
System.out.println(m);
}
System.out.println("-------------------");
//getDeclaredMethods获取运行时类中所有的方法
Method[] declaredMethods = cls.getDeclaredMethods();
for (Method m:declaredMethods
) {
System.out.println(m);
}
System.out.println("===================");
//获取指定方法
Method showInfo = cls.getMethod("showInfo");
System.out.println(showInfo);
Method showInfo1 = cls.getMethod("showInfo", int.class, int.class);
System.out.println(showInfo1);
Method work = cls.getDeclaredMethod("work",int.class);
System.out.println(work);
System.out.println("====================");
//获取方法的具体结构
/*
@注解
修饰符 返回值类型 方法名(参数列表)throws xxxx{}
*/
//名字:
System.out.println(work.getName());
//修饰符
int modifiers = work.getModifiers();
System.out.println(Modifier.toString(modifiers));
//返回值
System.out.println(work.getReturnType());
//参数列表
for (Class<?> parameterType : work.getParameterTypes()) {
System.out.println(parameterType);
}
System.out.println("===================");
Method myMethod = cls.getMethod("myMethod");
Annotation[] annotations = myMethod.getAnnotations();
//利用foreach遍历数组
for (Annotation annotation : annotations) {
System.out.println(annotation);
}
//获取异常
Class[] exceptionTypes = myMethod.getExceptionTypes();
for (Class c:exceptionTypes
) {
System.out.println(c);
}
//调用方法:
Object o = cls.newInstance();
Object invoke = myMethod.invoke(o);
Object invoke1 = showInfo1.invoke(o, 12, 45);
System.out.println(invoke1);
}
}