博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第十二章 执行期别辩识
阅读量:4980 次
发布时间:2019-06-12

本文共 1137 字,大约阅读时间需要 3 分钟。

一、描述(如何辩识型别)

  1. 传统的RTTI(run-time type identification,执行期型别辨识)机制,它假设你在编译期和执行期拥有所有型别信息
  2. reflection机制,允许你在执行期间找出和class相关的信息

二、为什么需要RTTI

  1. 多态
  2. 在执行期找出对象的型别

三、Class对象

  1. 每个class都有一个Class对象。
  2. 执行期间当你想要产生该class对象时,Java虚拟机会先检查该型别的Class对象是否已经被装载,如果尚未装载,JVM会根据名称找到.class文件并装载它。
  3. 装载的是Class对象
  4. 一旦某个型别的Class对象被装载内存,它就可以用来产生改型别的所有对象
  5. Class.forName("className");返回的是className相关联的Class对象,调用该方法会导致className的初始化(必须拥有无参构造方法(null构造方法))。该方法等同于:className.class;(外覆类[Boolean,Long等]都有一个名为TYPE的标准数据,用以产生一个与之相对应的Class对象)。
  6. 总之产生Class对象的reference之后,便可对其进行相关操作(有关具体操作可查看Class类源码或查看文档)

package soul.test.ch_12;

class Test {
static{
System.out.println("This is static !");
}
Test(){
System.out.println("This is Test() !");
}
}
//测试类
class Test_2 {
public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException{
Object o=Class.forName("soul.test.ch_12.Test").newInstance();
}
}
//print:
//This is static !
//This is Test() !

四、instanceof

  1. 只能它来比较具名型别,不能比较Class对象
  2. instanceof(isInstanceof)所表示的意义在于:“你就是这个class吗?或是其子类吗?”
  3. 使用==比较两个Class对象时:“正好就是这个型别吗”

五、总结

这里简单的对了解一下反射机制,以后用到时再系统的学习一下。

转载于:https://www.cnblogs.com/realsoul/p/5762226.html

你可能感兴趣的文章
MongoDB的简单使用
查看>>
【noip2004】虫食算——剪枝DFS
查看>>
java小技巧
查看>>
POJ 3204 Ikki's Story I - Road Reconstruction
查看>>
SQL中Group By的使用
查看>>
两个表格中数据不用是一一对应关系--来筛选不同数据,或者相同数据
查看>>
js05-DOM对象二
查看>>
mariadb BINLOG_FORMAT = STATEMENT 异常
查看>>
Java回顾之多线程
查看>>
2018 Multi-University Training Contest 10 - Count
查看>>
HDU6203 ping ping ping
查看>>
Fireworks基本使用
查看>>
Java基础常见英语词汇
查看>>
nginx启动、关闭命令、重启nginx报错open() "/var/run/nginx/nginx.pid" failed
查看>>
UINavigationController的视图层理关系
查看>>
组件:slot插槽
查看>>
Nginx配置文件nginx.conf中文详解(转)
查看>>
POJ 1308 Is It A Tree?(并查集)
查看>>
N进制到M进制的转换问题
查看>>
php PDO (转载)
查看>>