java的反射机制 原理_java反射机制原理详解?java反射机制是怎样的?

对于java反射机制你了解多少呢?很多人表示对于它的原理都不是很清楚,下面就一起来详细的进行一下了解吧!

首先我们要清楚概念,一切皆对象,类也是对象;

之后要晓得类当中的东西,modifier constructor field method;

之后要晓得加载,当Animal.class在硬盘中的时候,是一个文件,在载入到内存当中的时候,可以认为是一个对象,是java.lang.class的对象;

在运行程序的时候,实例化时产生Animal.class对象,那么这两个对象有什么不同呢?

可以看一下下面的图片

上面的Animal.class对象是java.lang.class的对象,下面的对象是Animal.class实例化产生的对象。

f329b1c3b5228a3cde94304369366cab.png

当Animal.class载入到JVM中的时候,JVM又是如何识别Animal.class当中含有的方法,成员变量,构造方法等内容的呢?

可以看一下下图

Animal.class实例化对象中成员变量 ,毛色 =红色;

加载到内存时,毛色=null,是在实例化的时候毛色被赋值为红色;

628f709589fe5d98ee95cd63a95b7e5d.png

Animal.class当中,毛色这个属性对于java.lang.class来说是Field的一个属性值,毛色对于java.lang.class来说也是一个对象,这也是反射机制动态获取信息以及动态调用对象方法的原因。

下面是Java.lang.class中的方法:

132f7bc3c30b7e78c26679112d0b6588.png

0ecf71fb06e93c8eda97dd302dd91fdf.png

712662f59dbcab7b1e975e96f56dfaae.png

在java.lang.class当中,毛色是Field的一个属性值,Animal中所有的方法,成员变量,构造器,修饰符都是按照java.lang.class中的标准去写的,否则的话会在编译的时候报错。

df72154f32528c54afe7bfdfdf8227de.png

放射机制简单实例代码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工具网来进行了解吧,更多的内容可以为你分享。

推荐阅读:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值