Java反射机制API

简介: 反射(Reflection)是程序的自我分析能力,通过反射可以确定类有哪些方法、有哪些构造方法以及有 哪些成员变量。Java语言提供了反射机制,通过反射机制能够动态读取一个类的信息;能够在运行时 动态加载类,而不是在编译期。反射可以应用于框架开发,它能够从配置文件中读取配置信息动态加 载类、创建对象,以及调用方法和成员变量。

一、 java.lang.Class类


java.lang.Class类是实现反射的关键,,Class类的一个实例表示Java的一种数据类型,包括类、接 口、枚举、注解(Annotation)、数组、基本数据类型和void,void是“无类型”,主要用于方法返回值 类型声明,表示不需要返回值。Class没有公有的构造方法,Class实例是由JVM在类加载时自动创建 的。


获得Class实例可以通过如下代码:

//1.通过类型class静态变量 
Class clz1 = String.class; 
String str = "Hello"; 
//2.通过对象的getClass()方法 
Class clz2 = str.getClass();

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

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

public class HelloWorld {
    public static void main(String[] args) {
//        获得Class实例
//        1。通过类型class静态变量
        Class clz1 = String.class;
        String str = "HelloWorld";
//        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.getInterfaces());
        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是否为接口:[Ljava.lang.Class;@61bbe9ba
clz2是否为数组对象:false
clz2父类名称:java.lang.Object
clz2是否为基本数据类型:false
clz3是否为基本数据类型:true
clz4是否为基本数据类型:false


二、java.lang.reflect包


java.lang.reflect包提供了反射中用到类,主要的类说明如下:


Constructor类:提供类的构造方法信息。

Field类:提供类或接口中成员变量信息。

Method类:提供类或接口成员方法信息。

Array类:提供了动态创建和访问Java数组的方法。

Modifier类:提供类和成员访问修饰符信息。

示例代码如下:

public class HelloWorld {
    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.println(Modifier.toString(method.getModifiers()));
//                打印返回值类型名称
                System.out.println(" "+method.getReturnType().getName()+" ");
//                打印方法名称
                System.out.println(method.getName()+"();");
            }
        } catch (ClassNotFoundException e) {
            System.out.println("找不到指定类");
        }
    }
}

运行结果:

public
 boolean 
equals();
public
 java.lang.String 
toString();
public
 int 
hashCode();
public volatile
 int 
compareTo();
public
.
.
.


相关文章
|
8月前
|
Java API 数据处理
Java新特性:使用Stream API重构你的数据处理
Java新特性:使用Stream API重构你的数据处理
|
8月前
|
Java 大数据 API
Java Stream API:现代集合处理与函数式编程
Java Stream API:现代集合处理与函数式编程
383 100
|
8月前
|
Java API 数据处理
Java Stream API:现代集合处理新方式
Java Stream API:现代集合处理新方式
376 101
|
8月前
|
并行计算 Java 大数据
Java Stream API:现代数据处理之道
Java Stream API:现代数据处理之道
433 101
|
8月前
|
安全 Java API
使用 Java 构建强大的 REST API 的四个基本技巧
本文结合探险领域案例,分享Java构建REST API的四大核心策略:统一资源命名、版本控制与自动化文档、安全防护及标准化异常处理,助力开发者打造易用、可维护、安全可靠的稳健API服务。
504 116
|
9月前
|
JSON Java API
【干货满满】分享京东API接口到手价,用Java语言实现
本示例使用 Java 调用京东开放平台商品价格及优惠信息 API,通过商品详情和促销接口获取到手价(含优惠券、满减等),包含签名生成、HTTP 请求及响应解析逻辑,适用于比价工具、电商系统集成等场景。
|
9月前
|
存储 Java API
Java Stream API:现代数据处理之道
Java Stream API:现代数据处理之道
453 188
|
10月前
|
人工智能 缓存 安全
Java中的反射机制:深入探索与应用
Java反射机制是程序运行时动态获取类信息并操作类成员的特性,具备高度灵活性,但也伴随性能与安全风险。本文详解反射的基本用法、高级应用及最佳实践,助你掌握这一强大工具的正确使用方式。
221 0
|
9月前
|
存储 Java API
Java Stream API:现代数据处理之道
Java Stream API:现代数据处理之道
361 92
|
10月前
|
Oracle Java 关系型数据库
掌握Java Stream API:高效集合处理的利器
掌握Java Stream API:高效集合处理的利器
483 80