当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:17:00  来源:本站整理

java的rtti中class对象[Java编程]

赞助商链接



  本文“java的rtti中class对象[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
为理解RTTI在Java里若何工作,首先必须理解范例信息在运行期是若何表示的.这时要用到一个名为“Class对象”的特别情势的对象,此中包含了与类有关的信息(有时也把它叫作“元类”).事实上,我们要用Class对象成立属于某个类的全部“通例”或“普通”对象.
关于作为程序一部份的每个类,它们都有一个Class对象.换言之,每次写一个新类时,同时也会成立一个Class对象(更恰本地说,是保存在一个完好同名的.class文件中).在运行期,一旦我们想生成那个类的一个对象,用于执路程序的Java虚拟机(JVM)首先就会查抄那个范例的Class对象能否已经载入.若还没有载入,JVM就会查找同名的.class文件,并将其载入.所以Java程序启动时并非完好载入的,这一点与很多传统语言都差别.
一旦那个范例的Class对象进入内存,就用它成立那一范例的全部对象.
若这种说法多少让你产生了一点儿迷惑,大概并没有真正理解它,下面这个示范程序大概能供应进一步的帮忙:
//: SweetShop.java
// Examination of the way the class loader works

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) {
      e.printStackTrace();
    }
    System.out.println(
      "After Class.forName(\"Gum\")");
    new Cookie();
    System.out.println("After creating Cookie");
  }
} ///:~
对每个类来说(Candy,Gum和Cookie),它们都有一个static从句,用于在类初次载入时履行.呼应的信息会打印出来,奉告我们载入是什么时刻举行的.在main()中,对象的成立代码位于打印语句之间,以便侦测载入时间.
分外风趣的一行是:
Class.forName("Gum");
该办法是Class(即全部Class所从属的)的一个static成员.而Class对象和其他任何对象都是近似的,所以可以获得和掌握它的一个句柄(装载模块就是干这件事的).为得到Class的一个句柄,一个办法是利用forName().它的作用是获得包含了目标类文本名字的一个String(注意拼写和大小写).最后返回的是一个Class句柄.
该程序在某个JVM中的输出以下:
inside main
Loading Candy
After creating Candy
Loading Gum
After Class.forName("Gum")
Loading Cookie
After creating Cookie
可以看到,每个Class只有在它需求的时刻才会载入,而static初始化工作是在类载入时履行的.
非常风趣的是,另一个JVM的输出变成了另一个模样:
Loading Candy
Loading Cookie
inside main
After creating Candy
Loading Gum
After Class.forName("Gum")
After creating Cookie
看来JVM通过查抄main()中的代码,已经猜测到了对Candy和Cookie的需求,但却看不到Gum,因为它是通过对forName()的一个调用成立的,而不是通过更典型的new调用.固然这个JVM也到达了我们但愿的效果,因为确切会在我们需求之前载入那些类,但却不能必定这儿展示的行为百分之百精确.

1. 类标志
在Java 1.1中,可以采取第二种方法来产生Class对象的句柄:利用“类标志”.对上述程序来说,看起来就象下面这样:
Gum.class;
这样做不但越发简单,并且更安全,因为它会在编译期间得到查抄.由于它撤消了对办法调用的需求,所以履行的效率也会更高.
类标志不但可以利用于普通类,也可以利用于接口、数组以及基本数据范例.除此以外,针对每种基本数据范例的封装器类,它还存在一个名为TYPE的尺度字段.TYPE字段的作用是为相关的基本数据范例产生Class对象的一个句柄,以下所示:

……等价于……
... is equivalent to ...

boolean.class

Boolean.TYPE

char.class

Character.TYPE

byte.class

Byte.TYPE

short.class

Short.TYPE

int.class

Integer.TYPE

long.class

Long.TYPE

float.class

Float.TYPE

double.class

Double.TYPE

void.class

Void.TYPE


  以上是“java的rtti中class对象[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • 利用Javascript实现网页水印(非图片水印)
  • Java开辟环境的搭建
  • Ubuntu java安装与配置
  • 办理Ubuntu 10.04 Firefox3.6 Java浏览器插件不工作的问
  • Ubuntu重装后Java环境的设置
  • Sun Java进入Ubuntu 10.10软件中央
  • Ubuntu 10.10配置Java开辟环境
  • 在Ubuntu 10.10中配置Java环境变量的办法
  • Ubuntu下Java环境的搭建
  • Ubuntu 10.04 下安装 Java, JRE
  • Ubuntu 10.04下的搭建SUN JAVA开辟环境
  • Ubuntu 12.04安装java7
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .