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

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

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

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

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

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

可以看一下下面的图片

上面的Animal.class对象是java.lang.class的对象,下面的对象是Animal.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中的方法

Java.lang.class中的方法

Java.lang.class中的方法

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

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工具网来进行了解吧,更多的内容可以为你分享。

推荐阅读:

java反射执行方法有哪些?java反射调用方法

java反射的作用是什么?java反射机制的作用

java反射机制面试题及答案整理,java反射面试题