class对象

Class对象 (2007-03-16 22:50:23)转载▼
分类: Java编程
要理解RTTI在Java中的工作原理,首先必须知道类型信息在运行时是如何表示的.这项工作是由称为"Class对象"的特殊对象完成的,它包含了与类有关的信息.事实上,Class对象就是用来创建类的所有的"普通"对象的.
类是程序的一部分,每一个类都有一个Class对象,换言之,每当编写并且编译一个新类,就会产生一个Class对象(更恰当地说,是被保存在一个同名的.class文件中).在运行时,当我们想生成这个类的对象时,运行这个程序的JVM首先检查这个类的Class对象是否已经加载,如果尚未加载,JVM就会根据类名查找.class文件,并将其载入,所以Java程序并不是一开始执行就被完全加载的,这一点与许多传统语言都不同的.
一旦某个类的Class对象被载入内存,它就被用来创建这个类的所有对象.如果这么解释仍然不清楚,请看下面的一个程序:
class Candy{
static{
System.out.println("Loading Candy");
}
}
class Gum{
static{
System.out.println("Loading Gum");
}
}
class Cookie{
static{
System.out.println("Loading Cookie");
}
}
public class SweetShop{
public static void main(String[] args){
System.out.println("inside main");
new Candy();
System.out.println("After creating Candy");
try{
Class.forName("Gum");
}catch(ClassNotFoundException e){
System.out.println("Couldn't find Gum");
}
System.out.println("After Class.forName(\"Gum\")");
new Cookie();
System.out.println("After creating Cookie");
}
}
输出结果为:
inside main
Loading Candy
After creating candy
After Class.forName("Gum")
Loaing Cookie
After creating Cookie
这里的每个类Candy,Gum和Cookie,都有一个static子句,这个子句在类第一次被加载时执行.这时会有相应的信息打印出来,告诉我们这个类什么时候被加载了.在main()中,创建对象的代码被置于打印语句之间,以帮助我们判断加载的时间点.从输出中可以看出,Class对象仅在需要的时候才被加载,static初始化是在类加载时进行的,特别有兴的一行是Class.forName("Gum");这个方法是Class类(所有Class对象都属于这个类)的一个static成员.Class对象就和其他对象一样,我们可以获取并操作它的引用.
forName()是取得Class对象引用的一种方法,它是用一个包含目标类的文本名的String作输入参数,返回的是一个Class对象的引用,上面的代码忽略了返回值,对forName()的调用是为了它产生的"副作用":如果类Gum还没有加载就加载它,在加载的过程中,Gum的static子句被执行.
在这个例子中,如果Class.forName()找不到要加载的类,它会抛出一个异常ClassNotFoundException.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值