测试需要的类,接口,注解
public interface MyInterface {
void info() throws RuntimeException, IOException;
}
@Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
String value() default "hello";
}
public class Creature implements Serializable {
//性别
private char gender;
//体重
public double weight;
private void breath() {
System.out.println("会呼吸");
}
public void eat() {
System.out.println("会吃饭");
}
}
@MyAnnotation("学生类")
public class Student extends Creature implements Comparable, MyInterface {
public int id;
private String name;
int age;
public Student() {
}
@MyAnnotation("构造器")
private Student(String name) {
this.name = name;
}
Student(String name, int age) {
this.name = name;
this.age = age;
}
public Student(int id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}
@MyAnnotation("show方法")
private String show(String nation, int age) {
System.out.println("我的国籍是:" + nation +", 我的年龄:" + age);
return nation;
}
public String sports(String yd) {
System.out.println(this.name + " 喜欢的运动是: " + yd);
return yd;
}
@Override
public void info() throws RuntimeException, IOException {
System.out.println("我是一个学生");
}
@Override
public int compareTo(String o) {
return 0;
}
@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + ''' +
", age=" + age +
'}';
}
public static void staticMethod() {
System.out.println("我是静态方法");
}
}
获取当前运行类的方法
@Test
public void test1() {
Class clazz = Student.class;
//getMethods(): 获取当前运行时类及其父类中声明为public权限的方法
Method[] methods = clazz.getMethods();
for (Method method : methods) {
System.out.println(method);
}
System.out.println("*****************************************");
//getDeclaredMethods():只获取当前运行时类中声明的所有方法(不包含父类中的方法)
Method[] declaredMethods = clazz.getDeclaredMethods();
for (Method method : declaredMethods) {
System.out.println(method);
}
}
运行结果:
public java.lang.String com.reflex.java1.Student.sports(java.lang.String)
public static void com.reflex.java1.Student.staticMethod()
public java.lang.String com.reflex.java1.Student.toString()
public int com.reflex.java1.Student.compareTo(java.lang.Object)
public int com.reflex.java1.Student.compareTo(java.lang.String)
public void com.reflex.java1.Student.info() throws java.lang.RuntimeException,java.io.IOException
public void com.reflex.java1.Creature.eat()
public final void java.lang.Object.wait(long,int) throws java.lang.InterruptedException
public final native void java.lang.Object.wait(long) throws java.lang.InterruptedException
public final void java.lang.Object.wait() throws java.lang.InterruptedException
public boolean java.lang.Object.equals(java.lang.Object)
public native int java.lang.Object.hashCode()
public final native java.lang.Class java.lang.Object.getClass()
public final native void java.lang.Object.notify()
public final native void java.lang.Object.notifyAll()
*****************************************
public java.lang.String com.reflex.java1.Student.sports(java.lang.String)
private java.lang.String com.reflex.java1.Student.show(java.lang.String,int)
public static void com.reflex.java1.Student.staticMethod()
public java.lang.String com.reflex.java1.Student.toString()
public int com.reflex.java1.Student.compareTo(java.lang.Object)
public int com.reflex.java1.Student.compareTo(java.lang.String)
public void com.reflex.java1.Student.info() throws java.lang.RuntimeException,java.io.IOException
获取当前运行类的:注解,权限修饰符,返回值类型,方法名,参数列表,异常
@Test
public void test2() {
Class clazz = Student.class;
Method[] declaredMethods = clazz.getDeclaredMethods();
for (Method method : declaredMethods) {
System.out.println("当前方法:"+method);
//1: 获取方法的注解(注解的生命周期必须是:RUNTIME,才能获取到)
Annotation[] annotations = method.getAnnotations();
System.out.print("方法的注解:");
for (Annotation annotation : annotations) {
System.out.print(annotation + "t");
}
System.out.println();
//2:获取方法的权限修饰符
int modifiers = method.getModifiers();
System.out.println("方法修饰符:"+ Modifier.toString(modifiers));
//3: 获取方法的返回值类型
Class returnType = method.getReturnType();
System.out.println("方法返回值类型:" + returnType.getName());
//4: 获取方法名称
String name = method.getName();
System.out.println("方法名称:" + name);
//5:获取方法形参列表
Class[] parameterTypes = method.getParameterTypes();
System.out.print("方法的参数列表:");
if (parameterTypes.length > 0) {
for (Class c : parameterTypes) {
System.out.print(c.getName() + ", t");
}
} else {
System.out.print("无形参");
}
System.out.println();
//6: 获取方法抛出的异常
Class[] exceptionTypes = method.getExceptionTypes();
System.out.print("方法抛出的异常:");
if (exceptionTypes.length>0) {
for (Class e : exceptionTypes) {
System.out.print(e.getName() + ", t");
}
} else {
System.out.println("此方法无抛出异常");
}
System.out.println();
System.out.println();
}
}
运行结果:
当前方法:public static void com.reflex.java1.Student.staticMethod()
方法的注解:
方法修饰符:public static
方法返回值类型:void
方法名称:staticMethod
方法的参数列表:无形参
方法抛出的异常:此方法无抛出异常
当前方法:public java.lang.String com.reflex.java1.Student.sports(java.lang.String)
方法的注解:
方法修饰符:public
方法返回值类型:java.lang.String
方法名称:sports
方法的参数列表:java.lang.String,
方法抛出的异常:此方法无抛出异常
当前方法:private java.lang.String com.reflex.java1.Student.show(java.lang.String,int)
方法的注解:@com.reflex.java1.MyAnnotation(value=show方法)
方法修饰符:private
方法返回值类型:java.lang.String
方法名称:show
方法的参数列表:java.lang.String, int,
方法抛出的异常:此方法无抛出异常
当前方法:public java.lang.String com.reflex.java1.Student.toString()
方法的注解:
方法修饰符:public
方法返回值类型:java.lang.String
方法名称:toString
方法的参数列表:无形参
方法抛出的异常:此方法无抛出异常
当前方法:public int com.reflex.java1.Student.compareTo(java.lang.Object)
方法的注解:
方法修饰符:public volatile
方法返回值类型:int
方法名称:compareTo
方法的参数列表:java.lang.Object,
方法抛出的异常:此方法无抛出异常
当前方法:public int com.reflex.java1.Student.compareTo(java.lang.String)
方法的注解:
方法修饰符:public
方法返回值类型:int
方法名称:compareTo
方法的参数列表:java.lang.String,
方法抛出的异常:此方法无抛出异常
当前方法:public void com.reflex.java1.Student.info() throws java.lang.RuntimeException,java.io.IOException
方法的注解:
方法修饰符:public
方法返回值类型:void
方法名称:info
方法的参数列表:无形参
方法抛出的异常:java.lang.RuntimeException, java.io.IOException,