zoukankan      html  css  js  c++  java
  • 反射机制<一>

    问题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 ········

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

  • 相关阅读:
    NTP on FreeBSD 12.1
    Set proxy server on FreeBSD 12.1
    win32 disk imager使用后u盘容量恢复
    How to install Google Chrome Browser on Kali Linux
    Set NTP Service and timezone on Kali Linux
    Set static IP address and DNS on FreeBSD
    github博客标题显示不了可能是标题包含 特殊符号比如 : (冒号)
    server certificate verification failed. CAfile: none CRLfile: none
    删除文件和目录(彻底的)
    如何在Curl中使用Socks5代理
  • 原文地址:https://www.cnblogs.com/JLeeci/p/5479457.html
Copyright © 2011-2022 走看看