对于java反射机制你了解多少呢?很多人表示对于它的原理都不是很清楚,下面就一起来详细的进行一下了解吧!
首先我们要清楚概念,一切皆对象,类也是对象;
之后要晓得类当中的东西,modifier constructor field method;
之后要晓得加载,当Animal.class在硬盘中的时候,是一个文件,在载入到内存当中的时候,可以认为是一个对象,是java.lang.class的对象;
在运行程序的时候,实例化时产生Animal.class对象,那么这两个对象有什么不同呢?
可以看一下下面的图片
上面的Animal.class对象是java.lang.class的对象,下面的对象是Animal.class实例化产生的对象。
当Animal.class载入到JVM中的时候,JVM又是如何识别Animal.class当中含有的方法,成员变量,构造方法等内容的呢?
可以看一下下图
Animal.class实例化对象中成员变量 ,毛色 =红色;
加载到内存时,毛色=null,是在实例化的时候毛色被赋值为红色;
Animal.class当中,毛色这个属性对于java.lang.class来说是Field的一个属性值,毛色对于java.lang.class来说也是一个对象,这也是反射机制动态获取信息以及动态调用对象方法的原因。
下面是Java.lang.class中的方法:
在java.lang.class当中,毛色是Field的一个属性值,Animal中所有的方法,成员变量,构造器,修饰符都是按照java.lang.class中的标准去写的,否则的话会在编译的时候报错。
放射机制简单实例代码
public class _14_ReflectTest07 { public static void main(String[] args) throws Exception { //1.获取类 Class c = Class.forName("_12_CustomerService"); //获取某个特定的方法 //通过:方法名+形参列表 Method m = c.getDeclaredMethod("login", String.class, String.class); //通过反射机制执行login方法. Object o = c.newInstance(); //调用o对象的m方法,传递"admin""123"参数,方法的执行结果是retValue Object retValue = m.invoke(o, "admin", "123"); System.out.println(retValue); //true } }
public class _12_CustomerService { //登录 public boolean login(String name, String pwd) { if ("admin".equals(name) && "123".equals(pwd)) { return true; } return false; } //退出 public void logout() { System.out.println("系统已安全退出!"); } }
以上的内容你都清楚了吗?更多java基础知识,请继续关注奇Q工具网来进行了解吧,更多的内容可以为你分享。
推荐阅读: