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 }

时间: 2024-10-07 09:18:27

JAVA学习--反射方法操作的相关文章

JAVA学习--反射属性操作

1 //获取对应的运行时类的属性 2 @Test 3 public void test1(){ 4 Class clazz = Person.class; 5 //1.getFields():只能获取到运行时类中及其父类中声明为public的属性 6 Field[] fields = clazz.getFields(); 7 8 for(int i = 0;i < fields.length;i++){ 9 System.out.println(fields[i]); 10 } 11 Syste

JAVA学习--反射构造器操作

1 @Test 2 public void test1() throws Exception{ 3 String className = "com.atguigu.java.Person"; 4 Class clazz = Class.forName(className); 5 //创建对应的运行时类的对象.使用newInstance(),实际上就是调用了运行时类的空参的构造器. 6 //要想能够创建成功:①要求对应的运行时类要有空参的构造器.②构造器的权限修饰符的权限要足够. 7 O

JAVA学习--反射其他操作

1 //1.获取运行时类的父类 2 @Test 3 public void test1(){ 4 Class clazz = Person.class; 5 Class superClass = clazz.getSuperclass(); 6 System.out.println(superClass); 7 } 1 //2.获取带泛型的父类 2 @Test 3 public void test2(){ 4 Class clazz = Person.class; 5 Type type1 =

Java学习-反射机制入门

1.反射机制 我们在正常的使用过程之中只关心类产生对象,而后通过对象调用类之中的方法,可是,除了这种传统的方式外,也可以利用反射操作. 1.1.认识反射 既然有反,那么一定存在有正,正是指通过类产生对象,而后通过对象执行操作.而反呢?通过对象找到它所在类的信息.所有的对象都支持反这一操作,因为Object类有一个方法:public final Class<?> getClass(). 1 package cn.kvikon.demo; 2 import java.util.Date; 3 4

java学习----反射

目录 1.什么是反射 2.反射的运用 3.总结   一.什么是反射 反射:反射是指计算机程序在运行时(Run time)可以访问.检测和修改它本身状态或行为的一种能力   ----by  维基百科 java中的反射也是如此,利用反射的原理我们可以在程序运行时候的能够动态的创建对象,并且调用对象的方法和属性 它的作用是:1.在运行时判断任意一个对象类型 2.在运行时候能够构造任意一个对象 3.在运行时候判断一个类的属性和方法 反射在实际开发中的运用主要是在编写第三方jar包中比较多.我们可以运用反

Java学习有方法有捷径

很多人都想掌握一门技术,想学习Java开发,看中的不仅仅是广阔的行业发展前景,更是高薪的诱惑.具体要怎么做,才能在较短的时间内高效的掌握Java开发技术?笔者在此稍作梳理. 无论学习还是做任何事情前,都要对所所要着手的事情有个大致的了解,学习Java开发也一样. 首先,就是及时了解Java整个行业发展信息,包括企业需求的Java岗位要求.行业发展趋势等等,大致做到心中有数,给自己定下目标,确定要进入的企业类别.目标发展城市等. 其次,要做的就是分析自身的实力及能力,根据实际情况制定出一份完整的学

Java学习:方法的使用与注意事项

方法的使用与注意事项 定义一个方法的格式:public static void 方法名称(){ 方法体 } 如何调用方法,格式: 方法名称(): 方法名称的命名规则和变量一样,使用小驼峰. 方法体:也就是大括当中可以包含任意条语句. 方法定义好了之后,不会执行.如果要想执行,一定要进行方法的[调用]. 方法其实就是若干语句的功能集合. 方法好比是一个工厂. 奶粉工厂 原料:奶牛.饲料.水 产出物:奶制品 钢铁工厂 原料:铁矿石.煤炭 产出物:钢铁建材 参数(原料):就是进入方法的数据. 返回值(

Java学习的方法

我作为万千Java程序员的一名程序员,J2EE应用程序的开发者来说,Java的开发者正深陷于复杂性的泥沼中而无法自拔.我们的经验和能力正接近于极限,程序员编写支持所选框架的程序所花的时间比解决实际问题的时间要多太多.我们有时候会想,有必要把Java搞得这么繁复吗?.答案是否定的.无论是维护应用程序,还是从头开始设计,你都能够超越成规,并大幅精简基本框架.开发过程和最终代码.我们只需要重点学习其中的一部分技术就可以了,对于其他部分只要做到心中有数,哪天需要用到了知道跑哪里去找到资料就行了!想学习J

java学习——反射机制

/* * JAVA反射机制是在运行状态中,对于任意一个类 (class文件),都能够知道这个类的所有属性和方法: * 对于任意一个对象,都能够调用它的任意一个方法和属性: * 这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制. * * 动态获取类中信息,就是java反射 . * 可以理解为对类的解剖. * * 要想要对字节码文件进行解剖,必须要有字节码文件对象. * 如何获取字节码文件对象呢? * */ 1. 通过Class clazz =Class.forName()找