java反射机制API详解

KLQ 2020-08-24 11:23:20 java常见问答 4475

之前给大家介绍了一下java反射机制是什么的内容,那么下面要给大家详细的介绍的就是java反射机制API一起来了解一下吧。

实现Java反射机制的类都位于java.lang.reflect包中,java.lang.Class类是Java反射机制API中的核心类。

java.lang.Class类

java.lang.Class类是实现反射的关键所在,Class类的一个实例表示Java的一种数据类型,包括类、接口、枚举、注解(Annotation)、数组、基本数据类型和void,Class没有公有的构造方法,Class实例是由JVM类加载时自动创建的。

在程序代码当中获得Class实例能够通过下面的代码来进行实现:

每一种类型包括类和接口等,都有一个class静态变量能够获得Class实例,除此之外,每一个对象都有getClass()方法能够获得Class实例,这个方法是由Object类提供的实例方法。

Class类提供了很多方法能够获得运行时对象的相关信息,下面的程序代码展示了其中一些方法。

public class ReflectionTest01
{
    public static void main(String[] args)
    {
        // 获得Class实例
        // 1.通过类型class静态变量
        Class clz1 = String.class;
        String str = "Hello";
        // 2.通过对象的getClass()方法
        Class clz2 = str.getClass();
        // 获得int类型Class实例
        Class clz3 = int.class;
        // 获得Integer类型Class实例
        Class clz4 = Integer.class;
        System.out.println("clz2类名称:" + clz2.getName());
        System.out.println("clz2是否为接口:" + clz2.isInterface());
        System.out.println("clz2是否为数组对象:" + clz2.isArray());
        System.out.println("clz2父类名称:" + clz2.getSuperclass()
            .getName());
        System.out.println("clz2是否为基本类型:" + clz2.isPrimitive());
        System.out.println("clz3是否为基本类型:" + clz3.isPrimitive());
        System.out.println("clz4是否为基本类型:" + clz4.isPrimitive());
    }
}

运行结果:

clz2类名称:java.lang.String
clz2是否为接口:false
clz2是否为数组对象:false
clz2父类名称:java.lang.Object
clz2是否为基本类型:false
clz3是否为基本类型:true
clz4是否为基本类型:false

这里要注意一下,上面的代码当中的第10行和12行的区别,int是基本数据类型,所以输出结果为 true;Integer是类,是引用数据类型,所以输出结果为false。

java.lang.reflect包

java.lang.reflect包提供了反射中用到类说明:

类的说明

示例代码:

public class ReflectionTest02
{
    public static void main(String[] args)
    {
        try
        {
            // 动态加载xx类的运行时对象
            Class c = Class.forName("java.lang.String");
            // 获取成员方法集合
            Method[] methods = c.getDeclaredMethods();
            // 遍历成员方法集合
            for (Method method: methods)
            {
                // 打印权限修饰符,如public、protected、private
                System.out.print(Modifier.toString(method.getModifiers()));
                // 打印返回值类型名称
                System.out.print(" " + method.getReturnType()
                    .getName() + " ");
                // 打印方法名称
                System.out.println(method.getName() + "();");
            }
        }
        catch (ClassNotFoundException e)
        {
            System.out.println("找不到指定类");
        }
    }
}

上面的代码当中第5行是通过Class的静态方法Class的静态方法创建某个类的运行时对象,这当中的参数是类全名字符串,假如,在类路径当中找不到这个类,那么就抛出ClassNotFoundException异常,见代码第17行。

代码第7行是通过Class的实例方法getDeclaredMethods()返回某个类的成员方法对象数组,代码第9行是遍历成员方法集合,其中的元素是Method类型。

第11行,method.getModifiers()方法方法返回访问权限修饰符常量代码,是int类型。

第13行通过Method的getReturnType()方法获得方法返回值类型,之后,再调用getName()方法返回这个类型的名称。

第15行method.getName()返回方法名称。

对于java反射机制API的介绍你都清楚了吗?更多java反射机制java入门知识,可以继续关注奇Q工具网来进行了解哦。

推荐阅读:

什么是java反射?java反射机制详解

java反射原理是什么?java反射机制原理详解

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