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)