`

关于Class对象的作用与产生

阅读更多

 

Class对象是用来创建类的常规对象的,当我们编译一个Java类就会同时产生一个与该类相对应的Class对象(保存在.class文件中)。

  Class对象是用来创建类的常规对象的,当我们编译一个Java类就会同时产生一个与该类相对应的Class对象(保存在.class文件中)。该Class对象中保存了创建对象所需的所有信息。

  共有三种产生Class对象的方法下面分别说明之:

  1.public static Class Class.forName("完整的类名") throws ClassNotFoundException;

  public static Class forName(String name, boolean initialize,

  ClassLoader loader) throws ClassNotFoundException

  假若我们用Class.forName("");的方式获取Class对象,其实就相当于Class.forName("完整类名", true, this.getClass().getClassLoader())也就是说在默认情况下在产生Class对象的同时会对该Class对象进行初始化(若以前没有初始化过)。

  2.public final Class getClass()

  可以通过任何实例对象来引用该方法来获取相应的Class对象。使用此种方式的前提是我们需要产生相应的实例对象。

  3.类名.class 此种方式产生Class对象较前两种简单,无需第一种还要进行异常处理(在编译期就进行错误的检查了)。此种方式不会自动初始化该Class对象。初始化被延迟到对静态方法(包括构造方法)或非常数静态域进行首次引用时才进行。

 

 

      import java.util.*;

  class Initable{

  static final int staticFinal = 47;

  static final int staticFinal2 = ClassInitialization.rand.nextInt(100);

  static{

  System.out.println("Initialization Initable");

  }

  }

  class Initable2{

  static int staticNoFinal = 147;

  static{

  System.out.println("Initialization Initable2");

  }

  }

  class Initable3{

  static int staticNoFinal = 74;

  static{

  System.out.println("Initialization Initable3");

  }

  }

  public class ClassInitialization

  {

  public static Random rand = new Randdom(47);

  public static void main(String[] args){

  Class initable = Initable.class; //不会引起初始化

  System.out.println("after creating Initable reference");

  System.out.println(Initable.staticFinal); //引用编译器常量不会引起初始化

  System.out.println(Initable.staticFinal2); //引起初始化

  System.out.println(Initable2.staticNoFinal); //引用非编译期常量会引起初始化

  Class initable3 = Class.forName("Initable3"); //默认会引起初始化

  System.out.println("after creating Initable3 reference");

  System.out.println(Initable3.staticNoFinal);//前面已经初始化此处不用再初始化

  }

  }

分享到:
评论

相关推荐

    Java中Class类工作原理详解

    Class对象包含了与类相关的信息。事实上,Class对象就是用来创建类的所有的“普通”对象的。 类是程序的一部分,每个类都有一个Class对象。换言之,每当编写并且编译了一个新类,就会产生一个Class对象(恰当地说,...

    Java中的Class类

    换言之,每当编写并且编译了一个新类,就会产生一个Class对象(恰当地说,是被保存在一个同名的.class文件中)。在运行时,当我们想生成这个类的对象时,运行这个程序的Java虚拟机(JVM)首先检查这个类的Class对象...

    类与对象,继承,多态,数据共享和安全

    类(class)和对象(object)是两种以计算机为载体的计算机语言的合称。对象是对客观事物的抽象,类是对对象的抽象。类是一种抽象的数据类型。它们的关系是,对象是类的实例,类是对象的模板。继承机制是面向对象程序...

    jsp内置对象的用法

    exception对象是一个例外对象,当一个页面在运行过程中发生了例外,就产生这个对象。如果一个JSP页面要应用此对象,就必须把isErrorPage设为true,否则无法编译。他实际上是java.lang.Throwable的对象 序号 方 法...

    Java反射机制——类的加载方法,创建对象,获取方法以及结构

    加载完类之后,在堆内的方法区中就产生了一个Class类型的对象(一个类只有一个class对象),这个对象就包含了完整类的结构信息,我们可以通过这个对象看到类的结构。这个对象就像一面镜子,透过这个镜子看到类的结构...

    【05-面向对象(下)】

    •Object类提供的equals方法判断两个对象相等的标准与==完全相同。因此开发者通常需要重写equals方法。 类成员 •在java类里只能包含Field,方法,构造器,初始化块,内部类(接口、枚举)等5种成员。 用...

    AnyFo - Util - DynaObject :专门创建动态对象的工具

    于是,专门创建动态对象的工具包DynaObject产生了。 DynaObject简介 DynaObject是AnyFo – Util下的一个子项目,其中提供了一个类,是用来专门创建动态对象的,调用本类的createInstance方法,就能返 回一个...

    PHP 面向对象技术(全面讲解).txt

    类与对象的关系就如模具和铸件的关系,类的实例化结果就是对象,而对一类对象的抽象就是 类。类描述了一组有相同特性(属性)和相同行为(方法)的对象。 上面大概就是它们的定义吧,也许你是刚接触面向对象的朋友,...

    dbclass.zip_array_ database_crecordset

    有一点不足的就是当应用程序涉及到多表数据库时,类向导将产生大量的关于记录集的源码文件使得工程(project)给人的感觉很混乱。 这里介绍如何使用一个模板记录集类来降低类向导所产生的记录集文件的数量,同时增强...

    Java笔试题:Java基础概念(附答案)

    都是选择题,挺简单的: 例: 1.Java是从()语言改进重新设计。... constructor必须与class同名,但方法不能与class同名 C. constructor在一个对象被new时执行 D.一个class只能定义一个constructor 答案:C

    Python学习笔记_9:class 类定义的属性与方法——详解

    1、首先类的对象是什么时候产生的? 当类被定义完成时,类定义就变成了类的对象,可以通过 “类名.属性” 或 “类名.方法名()” 引用或使用相关的属性或方法 >>> class I: def text(self,x): print('%d'%(x**2))...

    详解C++ 中的临时对象

    1.建立一个没有命名的非堆(non-heap)对象,也就是无名对象时,会产生临时对象。 Integer inte= Integer(5); //用无名临时对象初始化一个对象 2.构造函数作为隐式类型转换函数时,会创建临时对象,用作实参传递给...

    超级有影响力霸气的Java面试题大全文档

     GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收...

    Java面向对象程序设计试题一.doc

    } } A good and abc B good and gbc C test ok and abc D test ok and gbc A5、运行下列程序, 会产生什么结果 ( ) public class X extends Thread implements Runable{ public void run(){ System.out.println(...

    day021-反射和注解笔记和代码.rar

    所以不能够直接new一个Class对象出来,是通过Class类中的一个方法获取到的。 例如:通过全限定路径类名 2、同一种类型不管通过什么方式得到Class的实例都是相等的;一个类型的字节码对象只有一份,在...

    北航网络教育JAVA语言与面向对象程序设计单选题及答案.doc

    JAVA语言与面向对象程序设计单选题 applet的主要方法 在Java Applet程序用户自定义的Applet子类中,一般需要重载父类的( )方法来完成主类实例的初始化工作。 A.A. start( ) B. B. stop( ) C. C. init( ) D. D. paint...

    Java编程思想读书笔记.rar

    而产生对象时,只把对象的reference存放在stack中,用于指向某个对象,对象本身存放在Heap中。 3. Java中的数组 当你产生某个存储对象的数组时,真正产生的其实是存储reference的数组。引数组建立后,其中的每一...

    Java 语言基础 —— 非常符合中国人习惯的Java基础教程手册

    对象通过向其他对象发送消息与其他对象进行交互作用和通信。 消息是以参数的形式传递给某方法的。一个消息通常由三部分组成: 1. 消息传送到对象的名称。 2. 要执行的方法的名称。 3. 方法需要的任意参数。 2.2.4 ...

    C#中委托的例子(简单)

    //产生delegate对象 mydelegate("Hello delegate"); MyDelegate myStaticDelegate = new MyDelegate(TestClass.HelloStaticDelegate); myStaticDelegate("Hello static delegate"); Console.ReadKey(); } } }

Global site tag (gtag.js) - Google Analytics