您的位置:首页 > 编程语言 > Java开发

Java.lang.Class类

2015-12-04 11:10 351 查看
Java.lang.Class类:

Class 类是在Java语言中定义一个特定类的实现。一个类的定义包含成员变量,成员方法,还有这个类实现的接口,以及这个类的父类。Class类的对象用于表示当前运行的 Java 应用程序中的类和接口。

我们都知道所有的java类都是继承了object这个类,在object这个类中有一个方法:getclass().这个方法是用来取得该类已经被实例化了的对象的该类的引用,这个引用指向的是Class类的对象。我们自己无法生成一个Class对象(构造函数为private),而这个Class类的对象是在当各类被调入时,由 Java 虚拟机自动创建 Class 对象,或通过类装载器中的 defineClass 方法生成。 我们生成的对象都会有个字段记录该对象所属类在CLass类的对象的所在位置。

a1.getClass()==A.class==Class.forName("A所在的包路径");

比较常用的方法有:

forName(String classname)

该方法返回给定串名相应的Class 对象。若给定一个类或接口的完整路径名,那么此方法将试图定位、装载和连接该类。若成功,返回该类对象。否则,抛出 ClassNotFoundException 异常。 例如,下面代码段返回名为java.lang.Thread 的运行 Class 描述器。Class t = Class.forName("java.lang.Thread") ; 此方法是需要指定类加载器的,当用到仅有一个String参数的forName方法时,Class对象将默认调用当前类加载器作为加载器和将第二参数为true。第二个参数说明:如果是false时,调用forName方法只是在命令类加载器载入该类,而不初始化该类的静态区块,只有当该类第一次实例化时,静态区块才被调用。当为true时,则载入时就调用静态区块。

getName()

一个Class对象描述了一个特定类的属性,Class类中最常用的方法getName以 String 的形式返回此 Class 对象所表 示的实体名称,返回 Class 对象表示的类型(类、接口、数组或基类型)的完整路径名字符串。 包含全路径(包 名+类名),如com.freemarker.test...

newInstance()

Class还有一个有用的方法可以为类创建一个实例,这个方法叫做newInstance()。例如:

x.getClass.newInstance(),创建了一个同x一样类型的新实例。newInstance()方法调用默认构造器(无参数构造器) 初始化新建对象。

getClassLoader()

返回该类的类加载器。

getComponentType()

返回表示数组组件类型的 Class。

getSuperclass()

返回表示此 Class 所表示的实体(类、接口、基本类型或 void)的超类的 Class。

getGenericSuperclass()

返回表示此 Class 所表示的实体(类、接口、基本类型或 void)的带泛型的超类的 Class。返回类型是java.lang.reflect.Type.

isArray()

判定此 Class 对象是否表示一个数组类。

getField(String)

返回当前 Class 对象表示的类或接口的指定的公有成员域对象。

getFields()

返回当前 Class 对象表示的类或接口的所有可访问的公有域对象数组。

getInterfaces()

返回当前对象表示的类或接口实现的接口。

getMethod(String, Class[])

返回当前 Class 对象表示的类或接口的指定的公有成员方法对象。

getMethods()

返回当前 Class 对象表示的类或接口的所有公有成员方法对象数组,包括已声明的和从父类继承的方法。

Method[] methods = object.getClass().getMethods();

getModifiers()

返回该类或接口的 Java 语言修改器代码。

getResource(String)

按指定名查找资源所在路径,返回URL对象。getResource("/")将会返回到classes这一层目录,例如:

URL url = ConfigFile.class.getResource("/"+filename);

getResourceAsStream(String)

用给定名查找资源。

使用:

1、forName和newInstance结合起来使用,可以根据存储在字符串中的类名创建对象。例如

Object obj = Class.forName(s).newInstance();

2、虚拟机为每种类型管理一个独一无二的Class对象。因此可以使用==操作符来比较类对象。例如:

if(e.getClass() == Employee.class)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: