首页 > 代码库 > Java反射
Java反射
一、Java反射的使用场景
暂时只用过通过配置文件的className来创建对象。
“很多人都觉得,既然都知道类名,为什么不直接new出来,然后调用方法,搞反射太麻烦了,而且一点用都没有?”对于这个问题,我觉得有需要看框架的应该得懂,因为框架有用到,虽然我还没有学习,但在网上看到过这方面问答,所以就冒昧写出来了
二、基础知识
2.1 通过反射得到className的方式 class.forName() 类.class()方法 实例化的类.getClass()方法
2.2 通过ClassName实例化对象的方式 通过class的newInstance的方法 通过Constructor来创建 他们的区别在于,前者只能实例化无参的实例化对象,后者兼容各种参数的实例化对象,当然还包括无参的
2.3 常用类 Method跟类的方法挂钩 Field跟类的字段挂钩 Constructor跟类的构造方法挂钩
2.4 常用方法 Method.getMethod()获取public的类方法,局限性很大 Method.getDeclaredMethod()使用方法跟上面一样,但除了public方法,还可以获取private方法 如果你尝试使用getMethod()方法来获取private方法,那么将会提示你NoSuchMethodException() 其余的Field方法同上
三、具体实例
访问类的私有方法,并将值打印出来
提供私有方法的类
public class BeiTest1 { public int myself=12; private int getchina(){ return myself; } }
操作类
</pre><pre name="code" class="java">
public class ReflectTest1 { public static void main(String[] args) throws Exception{ BeiTest1 test=new BeiTest1(); //在这里可以使用newInstance或者Constractor来创建实例 Class<?> classType=test.getClass(); //使用getMethod将不能访问private方法,如果访问了将会抛出java.lang.NoSuchMethodException异常,后续也就得不到运行 Method method=classType.getDeclareMethod("getchina",new Class[]{}); //设置是否启用访问检测,如果为true则表示不检测,也就表示可以访问 method.setAccessible(true); Integer aaa=(Integer)method.invoke(test, new Object[]{}); System.out.println("结果是"+aaa); } }
Java反射
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。