Java 反射
程序员文章站
2022-12-08 20:06:32
反射(Reflection): 在多个类没有公共特性时, 可以在一个基类方法中, 通过反射, 实现对这些没有公共特性的类的普遍性调用。 一:class.getMethod() ①//getMethod(String name, Class>... parameterTypes) Method m ......
反射(reflection): 在多个类没有公共特性时,
可以在一个基类方法中,
通过反射,
实现对这些没有公共特性的类的普遍性调用。
一:class.getmethod()
①//getmethod(string name, class<?>... parametertypes)
method method = class.getmethod("要调用的方法名称","要调用的方法的形参的类型的class");
②//invoke(object obj, object... args)
method.invoke("对象实例","要调用的方法的形参");
1 public class reflectivetest { 2 3 public static void reflectivemethod(object object) { 4 5 system.out.println("-------------反射使用方法--------------"); 6 7 class<?> clazz = object.getclass(); 8 try { 9 10 //getmethod():第一个参数方法名称;第二个参数:方法的形参的class 11 method sitmethod = clazz.getmethod("sit",null); 12 sitmethod.invoke(object,null); 13 } catch (nosuchmethodexception | illegalaccessexception | invocationtargetexception e) { 14 e.printstacktrace(); 15 } 16 17 18 try { 19 method eatmethod = clazz.getmethod("eat",string.class); 20 eatmethod.invoke(object,"pork"); 21 } catch (nosuchmethodexception | illegalaccessexception | invocationtargetexception e) { 22 e.printstacktrace(); 23 } 24 25 try { 26 27 method calculatemethod = clazz.getmethod("calculate",int.class,int.class); 28 int a = (integer) calculatemethod.invoke(object,1024,2048); 29 system.out.println("calculatemethod 结果=" + a); 30 } catch (nosuchmethodexception | illegalaccessexception | invocationtargetexception e) { 31 e.printstacktrace(); 32 } 33 34 } 35 36 37 public static void main(string[] args) { 38 39 dog dog = new dog(); 40 robot robot = new robot(); 41 42 reflectivemethod(dog); 43 reflectivemethod(robot); 44 } 45 46 47 }
运行结果:
1 -----------------反射使用方法------------------- 2 dog sits 3 dog eats pork 4 java.lang.nosuchmethodexception: com.wing.test.vo.dog.calculate(int, int) 5 at java.lang.class.getmethod(class.java:1786) 6 at com.wing.test.reflectivetest.reflectivemethod(reflectivetest.java:41) 7 at com.wing.test.reflectivetest.main(reflectivetest.java:56) 8 java.lang.nosuchmethodexception: com.wing.test.vo.robot.eat(java.lang.string) 9 at java.lang.class.getmethod(class.java:1786) 10 at com.wing.test.reflectivetest.reflectivemethod(reflectivetest.java:33) 11 at com.wing.test.reflectivetest.main(reflectivetest.java:57) 12 -----------------反射使用方法------------------- 13 robot sits 14 robot calculates a + b = 3072 15 calculatemethod 结果=3072
辅助类:
1 public class dog { 2 3 public dog() { 4 } 5 6 public void sit(){ 7 system.out.println("dog sits "); 8 } 9 10 public void eat(string meat){ 11 system.out.println("dog eats " + meat); 12 } 13 14 15 } 16 17 18 public class robot { 19 20 public robot() { 21 } 22 23 public void sit(){ 24 system.out.println("robot sits"); 25 } 26 27 public int calculate(int a,int b){ 28 int c = a + b; 29 system.out.println("robot calculates a + b = " + c); 30 return c; 31 } 32 33 }
上一篇: 尚硅谷JDBC学习笔记