栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

JAVA反射--获取运行时类的方法结构

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JAVA反射--获取运行时类的方法结构

测试需要的类,接口,注解
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,  

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/860376.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号