快速业务通道

Java中Class类工作原理详解 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-24

Java中Class类工作原理详解

时间:2010-03-27

1.Class对象

Class对象包含了与类相关的信息。事实上,Class对象就是用来创建类的所有的“普通”对象的。

类是程序的一部分,每个类都有一个Class对象。换言之,每当编写并且编译了一个新类,就会产生一个Class对象(恰当地说,是被保存在一个同名的.class文件中)。在运行时,当我们想生成这个类的对象时,运行这个程序的Java虚拟机(JVM)首先检查这个类的Class对象是否已经加载。如果尚未加载,JVM就会根据类名查找.class文件,并将其载入。

一旦某个类的Class对象被载入内存,它就被用来创建这个类的所有对象。看下面示例。

SweetShop.java

package com.zj.sample; 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("com.zj.sample.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

Loading Gum

After Class.forName("Gum")

Loading Cookie

After creating Cookie

Java中Class类工作原理详解(2)

时间:2010-03-27

2.获取Class实例的三种方式

1)利用对象调用getClass()方法获取该对象的Class实例。

2)使用Class类的静态方法forName(),用类的名字获取一个Class实例。

3)运用.class的方式来获取Class实例,对于基本数据类型的封装类,还可以采用.TYPE来获取相对应的基本数据类型的Class实例。

3.Class.forName

上面的示例中:

Class.forName("com.zj.sample.Gum");

这个方法是Class类(所有Class对象都属于这个类)的一个static成员。Class对象就和其它对象一样,我们可以获取并操作它的引用。forName()是取得Class对象的引用的一种方法。它是用一个包含目标类的文本名的String作输入参数,返回的是一个Class对象的引用。

4.类字面常量

Java还提供了另一种方法来生成对Class对象的引用,即使用“类字面常量”。对上述程序来说,可以是:

com.zj.sample.Gum.class;

5.关键字instanceof

关键字instanceof返回一个布尔值,判断是不是某个特定类型的实例。

if(x instanceof Dog) ((Dog)x).bark();

6.获取Class实例

package com.zj.sample; class Point {   int x, y; } class ClassTest {   public static void main(String[] args) {     Point pt = new Point();     Class c1 = pt.getClass();     System.out.println(c1.getName());     try {       Class c2 = Class.forName("com.zj.sample.Point");       System.out.println(c2.getName());     } catch (Exception e) {       e.printStackTrace();     }     Class c3 = Point.class;     System.out.println(c3.getName());     Class c4 = int.cla

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号