反射

作者: 修罗掌柜 | 来源:发表于2017-10-17 20:33 被阅读0次

1.对象有编译类型和运行类型

Object obj = new Date();

编译类型:Object       运行类型(obj对象的真实类型):Date

需求:根据对象obj调用Date类种的一个方法,toLocaleString,如何来做?
obj.toLcaleString()代码在编译阶段去编译类型Object中检查是否有该方法,若没有,编译失败。。

解决方案:

1:强制转换obj为Date类型(必须知道obj的真实类型)

2:在不知道obj的真实类型的情况下,就用反射。。

那什么是反射?反射是 得到元数据的行为。即Class是对一切类功能行为和状态的抽象

元数据:metadata 描述数据的描述数据

Class类:用于描述一切类/接口。

Class实例:就是指JVM(虚拟机)中的一份字节码

对于对象来说,可以直接使用以下3种来获取Class实例

1)对象.getClass()

2)Class.forName(className[类的权限定名:包名+类名]);

3)数据类型.class

但是我们的基本数据类型,就没有类的权限定名,也没有getClass方法。

问题:那么如何使用Class类来表示基本数据类型的Class实例?

byte,short,int,long,char,float,double,boolean  八大基本数据类型及 void 关键字
上述8种类型和void关键字,都有class属性

表示int 的Class对象:Class clz = int.class; 泛型为包装类Integer

表示Boolean的Class对象:Class clz =boolean.class

表示void的Class对象:Class clz = void.class;

说有的数据类型都有class属性,表示都是Class对象

思考:

int的包装类Integer

Integer.class    ==?  int.class

System.out.println(Integer.class  == int.class)  ==> false;

结果是false,说明是两份字节码。

Integer 和 int 是同一种 数据类型吗?

public void show(Integer i){}

public void show(int a){}

  答案是: 不是;

但是在八大基本数据类型的包装类种都有一个头常量:TYPE.

TYPE表示的是该包装类对应的基本数据类型的class实例;

例:Integer.TYPE  ==> int.class

System.out.println(Integer.TYPE  == int.class)  ==> true;

System.out.println(Integer.TYPE  == Integer.class)  ==> false;

数组的Class实例:

String[] sArr1 = {"A","C"};

String[] sArr2 = {};

String[][] sArr = {};

int[] iArr = {};

表示数组的Class实例:

String[] sArr1 = {"A","C"};

Class clz = String[].class;//此时clz表示的就是一个String类型的一维数组类型

所有具有相同元素类型和维数的数组才共享同一份字节码(Class对象)
注意:和数组中的元素没有一点关系。

相关文章

  • Java基础之反射

    Java基础之反射 反射基本介绍 反射的使用通过反射调用属性和方法通过反射获取配置文件 反射基本介绍 Java反射...

  • 镜面反射矩阵的推导

    镜面反射是以镜面作为反射平面,实物与反射物到反射平面的距离相等,实物与反射物方向相反,所以,反射矩阵由反射平面确定...

  • reflect.go包学习_之二 指针操作提高反射性能 反射应用

    reflect.go包学习_之二 指针操作提高反射性能 反射应用 反射创建实例 反射信息、反射调用方法、反射修改值...

  • Java互联网公司-经典面试题附答案

    基础:Java 反射?反射有什么缺点?你是怎么理解反射的(为什么框架需要反射)?优点:反射具有解耦性,缺点:反射属...

  • Java反射与joor反射库的使用

    java原生反射的使用 反射构造对象 反射方法 反射字段 joor反射库的使用 github:https://gi...

  • Java反射

    什么是反射? 反射的作用? 反射性能优化?

  • 反射三定律

    反射第一定律:反射可以将interface类型变量转换成反射对象 反射第二定律:反射可以将反射对象还原成inter...

  • 反射

    1.反射是什么?反射的定义,概念 2.为什么要学反射? 3.怎么使用反射?反射的使用

  • 一周岁前做好两件事,孩子就不会语言迟缓,保证口齿伶俐

    与语言发展相关的原始反射有四个:张口反射、足跖反射、抓握反射和手拉反射,每个反射的发生、发展和整合都是次第进行的,...

  • 面试官问go反射第一弹

    目录 反射概念 reflect包 反射类型(Type)和种类(Kind) 反射类型(Type)使用 反射类型对象(...

网友评论

      本文标题:反射

      本文链接:https://www.haomeiwen.com/subject/rbchuxtx.html