反射Demo
2020-03-27 16:04:55来源:博客园 阅读 ()
反射Demo
使用反射之前的代码
public class P1 { public void eat(){ System.out.println("p1的方法"); } } public class P2 { public void sleep(){ System.out.println("p2的方法"); } } public class Reflect1 { public static void main(String[] args) throws Exception { //可以创建任意类的对象,不能改变任何代码 /* P1 p = new P1(); p.eat(); P2 stu = new P2(); stu.sleep();*/ }
使用反射之后的代码
public class Reflect1 { public static void main(String[] args) throws Exception { //可以创建任意类的对象,不能改变任何代码 /* P1 p = new P1(); p.eat(); P2 stu = new P2(); stu.sleep();*/ //加载配置文件 Properties properties = new Properties(); ClassLoader loader = Reflect1.class.getClassLoader(); InputStream is = loader.getResourceAsStream("pro.properties"); properties.load(is); //获取配置文件加载的数据 String className = properties.getProperty("className"); String methodName = properties.getProperty("methodName"); //加载类进内存 Class<?> cla = Class.forName(className); //创建对象 Object o = cla.newInstance(); //获取方法对象 Method method = cla.getMethod(methodName); //执行方法 method.invoke(o); } } #只是一个配置文件pro.properties className=domain.P1 methodName=eat
总结:看上去反射代码更加复杂,但是倘若我们并不知道字节码文件,可以通过反射技术调用方法即可,简单修改配置文件就能实现对象以及功能的改变,还可以爆破一些方法和变量(也不知道是好是坏)
反射提高了程序的灵活性和扩展性,降低耦合性,提高自适应能力。它允许程序创和控制任何类的对象,无需提前硬编码目标类,我认为还是非常符合代码设计原则的。
原文链接:https://www.cnblogs.com/shun998/p/12579451.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- Java--反射(框架设计的灵魂)案例 2020-06-11
- Java--反射(框架设计的灵魂) 2020-06-11
- Java连载120-反射机制获取构造方法和父类、父接口 2020-06-05
- Java 从入门到精通-反射机制 2020-06-03
- 利用反射给对象按顺序赋值 2020-05-28
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash