码迷,mamicode.com
首页 > 编程语言 > 详细

九、java中类型信息

时间:2015-09-06 01:07:29      阅读:161      评论:0      收藏:0      [点我收藏+]

标签:

一、什么是类型信息?

简单的理解 ,“类型信息”就是一种机制, java中用这种机制来实现: 在程序运行过程中发现和使用“类”信息。 

java的类型信息主要有两块组成:RTTI和反射。

 

二、什么是RTTI?

RTTI,全称是Run-Time Type Information  ,名字的含义是在运行时识别一个对象的类型。

1.Class对象

java中用一个特殊的对象Class, 通过它来执行其RTTI(这是一种思想, 用一个Class来表示所有类型对象,通过具体的Class里面的属性再来区分到底是哪种类型, 类似的思想也用在spring中,spring里面的所有bean都是由BeanDefinition来表示的)。

所有类都是在其第一次使用时,动态加载到JVM中, 类加载器首先检查这个类的Class对象是否已经被加载,如果尚未被加载,默认的类加载器就会根据类名查找.class文件; 一旦某个类的Class对象被载入JVM, 它就被用来创建这个类的所有对象。

来看两个例子理解下载入的过程:

 1 public class ClassTest {
 2     static {
 3         System.out.println("ClassTest");
 4     }
 5     public static void main(String[]args) {
 6         
 7     }
 8 }
 9 
10 class Candy {
11     static {
12         System.out.println("Candy");
13     }
14 }

 

结果如下:

技术分享

ClassTest类中, 执行main方法时,会自动加载ClassTest类, 这个类里面有静态方法块static, 所以会显示ClassTest;

而Candy类中, 由于一直没有用到其元素, 所以并不会加载Candy的类。

再看:

 1 public class ClassTest {
 2     public static void main(String[]args) {
 3         System.out.println(Candy.i);
 4     }
 5 }
 6 
 7 class Candy {
 8     public static final int i= 1;//定义一个常量
 9     
10     static {
11         System.out.println("Candy");
12     }
13 }

 

结果如下:

技术分享

这个例子中,常量是在编译期间就确定的,所以main函数中调用Candy.i ,实际上并不需要加载ClassTest的类型信息, 因此并没有执行static静态块中的语句。

2.类的字面量

1 public class ClassTest {
2     public static void main(String[]args) {
3         System.out.println(Boolean.TYPE);
4         System.out.println(Boolean.class);
5         System.out.println(boolean.class);
6         
7     }
8 }

结果如下:

技术分享

 

九、java中类型信息

标签:

原文地址:http://www.cnblogs.com/kaiguoguo/p/4784217.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!