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.
分享到:
相关推荐
JAVA反射机制-Class类-Class对象的获取.pdf
PHP把实例化的class对象存入session(session的值写入memcache),不必每次都创建类的实例 听起来有点绕口,其实就是: 1.不管你网站有多大,且有多少个class,用此方法之后每个类只需要实例化一次(除非你重启了服务器),听...
Class对象获取的三种方法
主要给大家介绍了关于Java中通过Class类获取Class对象的方法,文中通过示例代码介绍的非常详细,对大家学习或者使用java具有一定的参考学习价值,需要的朋友们下面跟着小编来一起学习学习吧。
Java中Class对象详解共2页.pdf.zip
Java中Class对象详解.docx
主要介绍了简单了解JAVA中类、实例与Class对象,类是面向对象编程语言的一个重要概念,它是对一项事物的抽象概括,可以包含该事物的一些属性定义,以及操作属性的方法,需要的朋友可以参考下
本篇主要是深入对Java中的Class对象进行分析,这对后续深入理解反射技术非常重要,主要内容如下:认识Class对象之前,先来了解一个概念,RTTI(Run-TimeTypeIdentification)运行时类型识别,对于这个词一直是C++中...
其实从某种意义上说,在java中有两种对象:实例对象和Class对象。实例对象是我们平常定义的一个类的实例: /** * Created by aristark on 3/28/16. */ public class Person { } 然后利用new关键字...
主要介绍了如何用原生JS获取CLASS对象,看过dom编程艺术的朋友或许会知道的
代码包含set使用中的size,insert,count,find,erase,swap,lower_bound,upper_bound,equal_range方法以及详细例子,并设立类和对象,可以看出set如何对对象进行排序和其他操作。
本文实例讲述了python实现class对象转换成json字典的方法。分享给大家供大家参考,具体如下: # -*- encoding: UTF-8 -*- class Student: name = '' age = 0 def __init__(self, name, age): self.name = name ...
1.Class对象 Class对象包含了与类相关的信息。事实上,Class对象就是用来创建类的所有的“普通”对象的。 类是程序的一部分,每个类都有一个Class对象。换言之,每当编写并且编译了一个新类,就会产生一个Class...
类似java面向对象风格的一个完整js类{构造方法,类成员变量,私有|公开静态变量,静态方法,类成员方法},从new一个对象开始,最终对一个list进行增删改查,希望能帮助到大家!! 里面包含测试mian(),详细记录了...
.class对象。 主要针对编写单元测试: Set< String > sources = new HashSet<> (); sources . put( " package a.b; \n " + " public interface Consts { \n " + " int A = 10; \n " + " } " ); sources . put...
主要介绍了Java反射获取class对象方式解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
本篇文章主要介绍了详解ECMAScript6入门--Class对象,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
一个Class对象, 代表一个类或接口; Class 对象由Java虚拟机在使用到该类的时候,自动创建; Class 对象的三种获取方式: 1: Class.forName(“全类名”); 2:类对象名.getClass(); 3:类名.Class(); 通过Class 对象...