java反射

Posted 学习笔记

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java反射相关的知识,希望对你有一定的参考价值。

反射:
    1.获取对应的class对象
        方式1:★
            Class clazz=Class.forName("全限定名");
        方式2:
            Class clazz=类名.class;
        方式3:
            Class clazz==对象.getClass();
        方式4:
             Class c1 = Integer.TYPE;
             返回值是int,基本类型返回的不是包装类
         方式5:
             Class c2 = c1.getSuperclass();
              获取父类的Class对象        
    2.通过class对象创建一个实例对象(相当于  new 类())
        Object clazz.newInstance();
    3.通过class对象获取一个方法(public修饰的)
        Method method=clazz.getMethod("方法名",Class .... paramType);
            paramType为参数的类型
    4.让方法执行:
        method.invoke(Object 实例对象,Object ... 参数);
            Object 实例对象:以前调用方法的对象 就是a
            Object ... 参数:该方法运行时需要的参数 就是 10和30
        执行这个方法 相当于
            a.add(10,30);
        例如:
            method.invoke(a,10,30)
代码演示:
 1 //测试的类
 2 package day8_26.reflect;
 3 
 4 public class Hello {
 5      public void add() {
 6           System.out.println("空参add方法");
 7      }
 8      public void add(int a,int b) {
 9           System.out.println("普通加法add方法");
10           System.out.println(a+b);
11      }
12      public int add(int a) {
13           System.out.println("待返回值的add方法");
14           return a;
15      }
16 }
//演示的类
package day8_26.reflect;

import java.lang.reflect.Method;

public class ReflectDemo {
     //为了展示代码,抛出一个大异常
     public static void main(String[] args) throws Exception {
          //通过反射的方式获取类的字节码对象,传入的参数是全限定名
          Class clazz = Class.forName("day8_26.reflect.Hello");
          //获取实例对象,实际调用的是空参的构造器
          Hello hello = (Hello)clazz.newInstance();
          //获取方法
          Method method = clazz.getMethod("add");
          //运行这个方法,不传参数
          method.invoke(hello);
     }
}

 

以上是关于java反射的主要内容,如果未能解决你的问题,请参考以下文章

反射机制入门

反射机制入门

反射机制入门

使用反射在外部JAR / CLASS上调用包含Hibernate事务的方法(Java EE)

为啥我的 Ray March 片段着色器反射纹理查找会减慢我的帧速率?

OpenGL片段着色器不照亮场景