首页 / JAVA / Java常用--反射
Java常用--反射
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java常用--反射,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3051字,纯文字阅读大概需要5分钟。
内容图文
![Java常用--反射](/upload/InfoBanner/zyjiaocheng/629/d33347d9cab146d48a72fc43455f2a90.jpg)
反射的意义
你可能说,平时都是业务的增删查改基本用不到反射。但是如果你学会用反射了,可以减少重复代码,非常的好用。
反射是Java语言的一大特性,允许动态的修改程序行为。
代码说反射
1、反射的三个入口
try { Class<?> perClazz = Class.forName("reflector.Person"); System.out.println(perClazz); } catch (ClassNotFoundException e) { e.printStackTrace(); } Class<?> perClass1 = Person.class; System.out.println(perClass1); Person person = new Person(); Class<?> perClass2 = person.getClass(); System.out.println(perClass2);
2、反射的基本操作
//反射调用静态方法。 try { Class<?> perClass=Class.forName("reflector.Person"); Method method = perClass.getMethod("staticMethod",String.class); method.invoke(perClass.newInstance(),"zhangzhen"); } catch (Exception e) { e.printStackTrace(); } //反射创建对象 try { Class<?> perClass=Class.forName("reflector.Person"); Person person=(Person)perClass.getConstructor().newInstance(); person.setAge(1); System.out.println(person.getAge()); } catch (Exception e) { e.printStackTrace(); } //反射调用实例方法 try { Class<?> perClass=Class.forName("reflector.Person"); Method method = perClass.getMethod("interfaceMethod"); method.invoke(perClass.newInstance()); } catch (Exception e) { e.printStackTrace(); } //反射调用私有方法 try { Class<?> perClass=Class.forName("reflector.Person"); //再次说明,你要调用私有的方法,一定要用这个getDeclaredMethod ,因为只有这个才是没有访问权限的控制。 Method method = perClass.getDeclaredMethod("privateMethod"); method.setAccessible(true); method.invoke(perClass.newInstance(),null); } catch (Exception e) { e.printStackTrace(); } //反射调用重载方法 try { Class<?> perClass=Class.forName("reflector.Person"); //反射调用重载方法的时候,主要是由声明时候的参数类型决定的,和你具体传值是无关的。 Method method = perClass.getDeclaredMethod("SayHello",int.class); method.setAccessible(true); method.invoke(perClass.newInstance(),Integer.valueOf(300)); } catch (Exception e) { e.printStackTrace(); } // 反射越过泛型检查 ; try { ArrayList<Integer> arrayList = new ArrayList<Integer>(); arrayList.add(2); arrayList.add(3); Method method= arrayList.getClass().getMethod("add", Object.class); method.invoke(arrayList,"test"); for (int i = 0; i <arrayList.size() ; i++) { System.out.println(arrayList.get(i)); } }catch (Exception ex){ System.out.println(ex.getMessage()); } //反射动态加载 Properties properties = new Properties(); System.out.println(System.getProperty("user.dir")); properties.load(new FileReader("1.txt")); String className=properties.getProperty("ClassName"); String methodName=properties.getProperty("MethodName"); try { Class<?> perClass = Class.forName(className); //反射调用重载方法的时候,主要是由声明时候的参数类型决定的,和你具体传值是无关的。 Method method = perClass.getDeclaredMethod(methodName); method.setAccessible(true); method.invoke(perClass.newInstance()); } catch (Exception e) { e.printStackTrace(); }
反射的应用
1、IDE里面的智能提示,通过反射实现。
2、框架中,也离不开反射(ORM,IOC等等)
3、平时写一些ConvertDTO也会用到反射
4、做一些插件式开发也会用到反射
内容总结
以上是互联网集市为您收集整理的Java常用--反射全部内容,希望文章能够帮你解决Java常用--反射所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。