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)
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)
相关文章推荐
- Day_3流程控制
- Java 反射
- java(算法2)冒泡
- Day 18: BoilerPipe —— Java开发者的文章提取工具
- Day 17: 使用 JBoss Forge 和 OpenShift 构建部署 JAVA EE 6 应用
- JAVA中清除特殊字符
- 字符串匹配之KMP算法思路、原理与Java实现
- Eclipse提示No java virtual machine
- Day 13: Dropwizard —— 非常棒的Java REST服务器栈
- eclipse中添加pydev插件
- 使用Eclipse传项目到git上
- Day 12: OpenCV —— Java开发者的人脸检测
- spring aop 备忘 参考
- 使用Eclipse调试Java程序代码
- @XmlAccessorType详解
- Eclipse调试常用技巧
- Day 6:在 Java 虚拟机上使用 Grails 进行快速 Web 开发
- Java解惑
- maven+jetty+spring的jndi配置
- java 读写word java 动态写入 模板文件