(浅谈)Java反射机制的使用
来源:互联网 发布:无印良品文具淘宝 编辑:程序博客网 时间:2024/05/19 19:44
在学习J2ee开发框架的时候总能听说反射机制,比如spring框架,Aop中的动态代理等,就在网上查找了很多关于反射的文章,每篇文章中都会关于反射机制有大量的解释,看过之后觉得明白很多,但是还是有很多说不出来的疑惑,直到给同学讲解反射的时候,她问:我们正常写代码的时候哪里用的上反射。我才觉得我在编写的程序时很难想到用反射区编写,所以我就写了一个小例子,希望对有同样疑惑的人有帮助。
我就拿最简单的加减乘除计算器举例
正常我们写意个计算类
public class jisuan { private int num1; private int num2; public int getNum1() { return num1; } public void setNum1(int num1) { this.num1 = num1; } public int getNum2() { return num2; } public void setNum2(int num2) { this.num2 = num2; } public String getOperater() { return operater; } public void setOperater(String operater) { this.operater = operater; } private String operater; public int add(){ System.out.println("diaoyong add"); return num1+num2; } public int sub(){ System.out.println("diaoyong sub"); return num1+num2; } public int cheng(){ System.out.println("diaoyong cheng"); return num1*num2; } public int chu(){ System.out.println("diaoyong chu"); if(num2!=0){ return num1/num2; }else return 0; }}再编写一个主程序调用
public class Test{ public static void main(String[]args){ jisuan test=new jisuan(); Scanner sc=new Scanner(System.in); System.out.println("请输入第一个数"); int num1=Integer.parseInt(sc.nextLine()); test.setNum1(num1); System.out.println("请输入第二个数"); int num2=Integer.parseInt(sc.nextLine()); test.setNum2(num2); System.out.println("请输入运算符"); String operter=sc.nextLine(); switch (operter){ case "add": System.out.println(test.add()); break; case "sub": System.out.println(test.sub()); break; case "cheng": System.out.println(test.cheng()); break; case "chu": System.out.println(test.chu()); break; } }}我们会用switch语句来调用相应的方法,但是如果使用反射机制,就可以再运行时通过输入的运算符直接调用方法
下面是使用反射机制实现的
import java.util.Scanner;import java.lang.reflect.Field;import java.lang.reflect.Method;public class Test { public static void main(String[] args) { try { //通过反射得到jisuan整个类 Class c = Class.forName("jisuan"); //使用Class类的newInstance()方法创建类的一个对象 Object test = c.newInstance(); //得到jisuan类中的所有非私有方法 Method[] method=c.getMethods(); for(Method me:method){ System.out.println(me.getName()+" "); } //得到jisuan类的所有非私有属性 Field[] fields =c.getFields(); for(Field f:fields){ System.out.println(f.getName()+" "); } Scanner sc=new Scanner(System.in); System.out.println("请输入第一个数"); int num1=Integer.parseInt(sc.nextLine()); //获取setNum1方法(Class.getDeclaredMethod()获取指定方法) Method setNum1=c.getDeclaredMethod("setNum1",int.class); //执行setNum1方法,第一个参数是操作对象,后面是传的值 setNum1.invoke(test,num1); System.out.println("请输入第二个数"); int num2=Integer.parseInt(sc.nextLine()); Method setNum2=c.getDeclaredMethod("setNum2",int.class); setNum2.invoke(test,num2); System.out.println("请输入运算符"); String operater=sc.nextLine(); //最后通过输入的运算符获取方法,不用switch Method setOperater=c.getDeclaredMethod(operater); System.out.println(setOperater.invoke(test)); }catch(Exception e){ e.printStackTrace(); } }}运行结果如下
通过这种小的实例能看出,反射会让我们的代码更灵活。
希望能给你带来帮助!!
阅读全文
0 0
- (浅谈)Java反射机制的使用
- java的反射机制浅谈
- java的反射机制浅谈
- 浅谈Java的反射机制
- java的反射机制浅谈
- java的反射机制浅谈
- java的反射机制浅谈
- java的反射机制浅谈
- java的反射机制浅谈
- java的反射机制浅谈
- java的反射机制浅谈
- 浅谈Java的反射机制
- Java的反射机制浅谈
- JAVA的反射机制浅谈
- 浅谈Java的反射机制
- java的反射机制浅谈
- java的反射机制浅谈
- java的反射机制浅谈
- 共享baidu.com,sohu.com,360.cn,qq.com,sina.com等二级域名
- [NOI2010]超级钢琴(可持续化线段树)
- C 语言大量重复使用 if else 时,大概率执行的执行体是放在 if 中还是 else 中对执行效率的影响
- Win32 API消息函数:PostMessage
- 数据结构 查找 散列表(Hash)(1)
- (浅谈)Java反射机制的使用
- leetCode-Remove Duplicates from Sorted Array II
- 使用 CSS 去掉 iPhone 网页上按钮的超大圆角以及文本框圆角默认样式
- EOJ 2536 求和
- Commands out of sync; you can't run this command now
- 参考
- java设计模式----创建型
- python学习三--列表
- Pytorch Transfer learning