• 8.20Java反射机制之API


    8.20Java反射机制之API

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

    java.lang.Class

    特点:

    • Class 类的一个实例表示 Java 的一种数据类型,包括类、接口、枚举、注解(Annotation)、数组、基本数据类型和 void。

    • Class 没有公有的构造方法,Class 实例是由 JVM 在类加载时自动创建的。

    实现Class实例:

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

    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; //int 是基本数据类型,所以输出结果为 true;
           // 获得Integer类型Class实例
           Class clz4 = Integer.class; //Integer 是包装类,是引用数据类型,所以输出结果为 false。
           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());
      }
    }

    java.lang.reflect

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

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

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

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

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

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

    public class ReflectionTest02 {
       public static void main(String[] args) {
           try {
               // 动态加载xx类的运行时对象
               Class c = Class.forName("java.lang.String"); //通过 Class 的静态方法forName(String)创建某个类的运行时对象,其中的参数是类全名字符串--->注意参数的特点。在类路径中找不到这个类则抛出 ClassNotFoundException 异常
               // 获取成员方法集合
               Method[] methods = c.getDeclaredMethods(); //通过 Class 的实例方法 getDeclaredMethods() 返回某个类的成员方法对象数组
               // 遍历成员方法集合
               for (Method method : methods) {
                   // 打印权限修饰符,如public、protected、private
                   System.out.print(Modifier.toString(method.getModifiers())); //method.getModifiers()方法返回访问权限修饰符常量代码,是 int 类型--->用int表示了访问修饰符。数字代表的含义可以通过Modifier.toString(int)方法转换为字符串。
                   // 打印返回值类型名称
                   System.out.print(" " + method.getReturnType().getName() + " "); //getReturnType() 方法获得方法返回值类型,再调用 getName() 方法返回该类型的名称。
                   // 打印方法名称
                   System.out.println(method.getName() + "();"); //返回方法名称。
              }
          } catch (ClassNotFoundException e) {
               System.out.println("找不到指定类");
          }
      }
    }

     

    It's a lonely road!!!
  • 相关阅读:
    R语言用神经网络改进Nelson-Siegel模型拟合收益率曲线分析
    用R语言用Nelson Siegel和线性插值模型对债券价格和收益率建模
    R语言LME4混合效应模型研究教师的受欢迎程度
    R语言Black Scholes和Cox-Ross-Rubinstein期权定价模型案例
    R语言中的Nelson-Siegel模型在汇率预测的应用
    R语言中的block Gibbs吉布斯采样贝叶斯多元线性回归
    LNMP搭建
    php高性能开发阅读笔记
    php 关于经纬度距离计算方法
    在已经部署svn 服务器上,搭建svn项目 成功版
  • 原文地址:https://www.cnblogs.com/JunkingBoy/p/15177392.html
Copyright © 2020-2023  润新知