Class对象的学习笔记

来源:互联网 发布:中国煤炭进口量数据 编辑:程序博客网 时间:2024/06/09 01:08
每一个类都有一个Class对象,每当编译一个新类就产生一个Class对象,基本类型 (boolean, byte, char, short, int, long, float, and double)有Class对象,数组有Class对象,就连关键字void也有Class对象(void.class)。Class对象对应着java.lang.Class类,如果说类是对象抽象和集合的话,那么Class类就是对类的抽象和集合
一、获取对象

1.forName()

 Class.forName的好处就在于,不需要为了获得Class引用而持有该类型的对象,只要通过全限定名就可以返回该类型的一个Class引用。如果你已经有了该类型的对象,那么我们就可以通过调用getClass()方法来获取Class引用了,这个方法属于根类Object的一部分,它返回的是表示该对象的实际类型的Class引用

2.getClass

利用new操作符创建对象后,类已经装载到内存中了,所以执行getClass()方法的时候,就不会再去执行类加载的操作了,而是直接从java堆中返回该类型的Class引用。

3.类字面常量

  java还提供了另一种方法来生成对Class对象的引用。即使用类字面常量,就像这样:int.class,这样做不仅更简单,而且更安全,因为它在编译时就会受到检查(因此不需要置于try语句块中)。并且根除了对forName()方法的调用,所有也更高效。类字面量不仅可以应用于普通的类,也可以应用于接口、数组及基本数据类型。

        当使用.class来创建对Class对象的引用时,不会自动地初始化该Class对象。为了使用类而做的准备工作包含三个步骤:1.加载、2.链接、3.初始化。


泛化Class的引用(附加通配符?)

通配符?不仅可以与extend结合,而且还可以与super关键字相结合,表示被限定为某种类型,或该类型的任何父类型。.


二、创建对象

一旦获取了该类所对应的Class对象之后,就可以通过调用Class对象的方法来获得该对象和该类的真实信息了。

通过反射来生成对象有如下两种方式:
(1)使用Class对象的newInstance()方法来创建该Class对象对应类的实例。但是这种方式要求该Class对象的对应类有默认的构造器,而执行newInstance()方法时实际上是利用默认构造器来创建该类的实例。
(2)先使用Class对象获取指定的Constructor对象,再调用Construtor对象的newInstance()方法来创建该Class对象对应类的实例。通过这种方式可以选择使用某个类的指定构造器来创建实例。

  另外,如果我们不想利用默认构造器来创建java对象,而想利用指定的构造器来创建java对象,则需要利用Construtor对象,每个Construtor对应一个构造器,为了利用指定构造器来创建java对象,需要如下三个步骤:

(1)获取该Class对象;

(2)利用该Class对象的getConstrutor方法来获取指定的构造器; 

(3)调用Construtor的newInstance方法来创建Java对象。




  另外,如果我们不想利用默认构造器来创建java对象,而想利用指定的构造器来创建java对象,则需要利用Construtor对象,每个Construtor对应一个构造器,为了利用指定构造器来创建java对象,需要如下三个步骤:

(1)获取该Class对象;

(2)利用该Class对象的getConstrutor方法来获取指定的构造器; 

(3)调用Construtor的newInstance方法来创建Java对象。

原创粉丝点击