• JAVA学习--反射方法操作


     1     //1.获取运行时类的方法
     2     
     3     @Test
     4     public void test1(){
     5         Class clazz = Person.class;
     6         //1.getMethods():获取运行时类及其父类中所有的声明为public的方法
     7         Method[] m1 = clazz.getMethods();
     8         for(Method m : m1){
     9             System.out.println(m);
    10         }
    11         System.out.println();
    12         
    13         //2.getDeclaredMethods():获取运行时类本身声明的所有的方法
    14         Method[] m2 = clazz.getDeclaredMethods();
    15         for(Method m : m2){
    16             System.out.println(m);
    17         }
    18     }
     1 //注解 权限修饰符 返回值类型 方法名 形参列表 异常
     2     @Test
     3     public void test2(){
     4         Class clazz = Person.class;
     5         
     6         Method[] m2 = clazz.getDeclaredMethods();
     7         for(Method m : m2){
     8             //1.注解
     9             Annotation[] ann = m.getAnnotations();
    10             for(Annotation a : ann){
    11                 System.out.println(a);
    12             }
    13             
    14             //2.权限修饰符
    15             String str = Modifier.toString(m.getModifiers());
    16             System.out.print(str + " ");
    17             //3.返回值类型
    18             Class returnType = m.getReturnType();
    19             System.out.print(returnType.getName() + " ");
    20             //4.方法名
    21             System.out.print(m.getName() + " ");
    22             
    23             //5.形参列表
    24             System.out.print("(");
    25             Class[] params = m.getParameterTypes();
    26             for(int i = 0;i < params.length;i++){
    27                 System.out.print(params[i].getName() + " args-" + i + " ");
    28             }
    29             System.out.print(")");
    30             
    31             //6.异常类型
    32             Class[] exps = m.getExceptionTypes();
    33             if(exps.length != 0){
    34                 System.out.print("throws ");
    35             }
    36             for(int i = 0;i < exps.length;i++){
    37                 System.out.print(exps[i].getName() + " ");
    38             }
    39             System.out.println();
    40         }
    41     }
     1 //调用运行时类中指定的方法
     2     @Test
     3     public void test3() throws Exception{
     4         Class clazz = Person.class;
     5         //getMethod(String methodName,Class ... params):获取运行时类中声明为public的指定的方法
     6         Method m1 = clazz.getMethod("show");
     7         Person p = (Person)clazz.newInstance();
     8         //调用指定的方法:Object invoke(Object obj,Object ... obj)
     9         Object returnVal = m1.invoke(p);//我是一个人
    10         System.out.println(returnVal);//null
    11         
    12         Method m2 = clazz.getMethod("toString");
    13         Object returnVal1 = m2.invoke(p);
    14         System.out.println(returnVal1);//Person [name=null, age=0]
    15         //对于运行时类中静态方法的调用
    16         Method m3 = clazz.getMethod("info");
    17         m3.invoke(Person.class);
    18         
    19         //getDeclaredMethod(String methodName,Class ... params):获取运行时类中声明了的指定的方法
    20         Method m4 = clazz.getDeclaredMethod("display",String.class,Integer.class);
    21         m4.setAccessible(true);
    22         Object value = m4.invoke(p,"CHN",10);//我的国籍是:CHN
    23         System.out.println(value);//10
    24     }
     1  class Person extends Creature<String> implements Comparable,MyInterface{
     2     public String name;
     3     private int age;
     4     int id;
     5     //创建类时,尽量保留一个空参的构造器。
     6     public Person() {
     7         super();
     8 //        System.out.println("今天天气很闷热");
     9     }
    10     public Person(String name) {
    11         super();
    12         this.name = name;
    13     }
    14     private Person(String name, int age) {
    15         super();
    16         this.name = name;
    17         this.age = age;
    18     }
    19     public String getName() {
    20         return name;
    21     }
    22     public void setName(String name) {
    23         this.name = name;
    24     }
    25     public int getAge() {
    26         return age;
    27     }
    28     public void setAge(int age) {
    29         this.age = age;
    30     }
    31     
    32     public int getId() {
    33         return id;
    34     }
    35     public void setId(int id) {
    36         this.id = id;
    37     }
    38     @MyAnnotation(value = "abc123")
    39     public void show(){
    40         System.out.println("我是一个人!");
    41     }
    42     
    43     private Integer display(String nation,Integer i) throws Exception{
    44         System.out.println("我的国籍是:" + nation);
    45         return i;
    46     }
    47     @Override
    48     public String toString() {
    49         return "Person [name=" + name + ", age=" + age + "]";
    50     }
    51     @Override
    52     public int compareTo(Object o) {
    53         // TODO Auto-generated method stub
    54         return 0;
    55     }
    56     
    57     public static void info(){
    58         System.out.println("中国人!");
    59     }
    60     
    61     class Bird{
    62         
    63     }
    64     
    65 }
     1 import static java.lang.annotation.ElementType.CONSTRUCTOR;
     2 import static java.lang.annotation.ElementType.FIELD;
     3 import static java.lang.annotation.ElementType.LOCAL_VARIABLE;
     4 import static java.lang.annotation.ElementType.METHOD;
     5 import static java.lang.annotation.ElementType.PARAMETER;
     6 import static java.lang.annotation.ElementType.TYPE;
     7 
     8 import java.lang.annotation.Retention;
     9 import java.lang.annotation.RetentionPolicy;
    10 import java.lang.annotation.Target;
    11 
    12 @Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE})
    13 @Retention(RetentionPolicy.RUNTIME)
    14 public @interface MyAnnotation {
    15     String value();
    16 }
    1 public class Creature<T>{
    2     public double weight;
    3     
    4     public void breath(){
    5         System.out.println("呼吸!");
    6     }
    7 }

     1 import java.io.Serializable; 2 3 public interface MyInterface extends Serializable{ 4 5 } 

  • 相关阅读:
    Linq to Sql学习总结1
    SQL相关
    C#各种小知识点总结
    Ext.Net学习笔记
    ASP.NET MVC3入门学习总结
    leetcode-剑指67-OK
    leetcode-剑指44-OK
    leetcode-剑指51-OK
    leetcode-剑指32-III-OK
    leetcode-剑指49-OK
  • 原文地址:https://www.cnblogs.com/zhangfan94/p/4273226.html
Copyright © 2020-2023  润新知