• 反射机制<一>


    问题1:
    对象有编译类型和运行类型:
    Object obj=new Date();
    编译类型:object
    运行类型(其实就是obj调用date对象真实的类型):Date
     
    需求:根据对象obj调用Date中的一个方法,toLocaleString ,如何来做?

    Obj.toLocalString()代码在编译阶段去编译类型object中检查否有该方法,若没有,编译失败

    解决方法:强制转换obj为Date类型  前提:必须知道对象的真是类型是什么?
    Date d=(Date) obj;
    d.toLocaleString();

    在不知对象的真是类型,那么如何调用方法?

    问题2:
    元数据:metadata 描述数据的描述数据 类:Class  对象:Object


    反射:得到元数据的行为 reflection
    Class是对一切类功能行为和状态的抽象

    那么Class中应该有类具备的成员;
    getPackage();表示类的包
    getSuperClass();表示类的父类;
    getMthods();表示类的方法
    getField();表示类的属性

    通过反射就可以得到一个类中的包,类名,父类,字段,方法,构造器
    但是前提必须知道,必须知道反射那个类

    Class类:用于描述一切类/接口 。枚举是一种类,注解是一种接口

    Class实例:就是指jvm中一份字节码
    Class类:用于描述一切类/接口。问题:Class实例到底表示的时哪一份字节码,为了明确区分出class实例表示的时谁的字节码文件。Class类提供泛型

    例:Class<String > cl=String.class;

    如何得到Class的实例:
    1、 类名.class
    2、 Class.forName(String className);根据一个类的全限定名来构建Class对象
    3、 每一个对象都有getClass()方法;obj.getClass();返回对象的真实类型
    一个类在虚拟机中有且只有一份字节码文件
    对于对象来说,可以用以上方法获取Class实例
    但是基本数据类型,就没有类的权限定名,也没有getClass方法

    如何使用Class类来表示基本数据类型的Class实例
    基本数据类型:byte、short、int、long、float、double、char、boolean
    Void
    解决方法:
    Int.class  int.class==Integer.class  //false 说明是两个不同的字节码文件
    但是八大基本数据类型的包装类中都有一个常量:TYPE
    TYPE表示的是该包装类对应的基本数据类型的class实例 int.class=Integer.TYPE;
    Long.class ········

    数组:所有具有相同元素的数据类和维数的数组才共享同一份字节码
    注意:和数组中的元素没有一点关系

  • 相关阅读:
    Jmeter JAVA工程测试
    jsp页面img利用tomcat配置访问服务器绝对路径显示图片
    PostgreSQL模仿Oracle的instr函数
    linux清理内存命令
    Tomcat去除项目名称和端口号,直接使用ip地址访问项目的方法
    linux下重启oracle服务:监听器和实例
    RedHat Linux 9.0的安装+入门指南(图文并茂)
    linux命令详解之挂载光驱的方法
    jQuery download file
    fiddler
  • 原文地址:https://www.cnblogs.com/JLeeci/p/5479457.html
Copyright © 2020-2023  润新知