java的Class类

转载 2016年05月31日 19:25:37

Class 类是在Java语言中 定义一个特定类的实现。一个类的定义包含成员变量,成员方法,还有这个类实现的接口,以及这个类的父类。Class类的对象用于表示当前运行的 Java 应用程序中的类和接口。 比如:每个数组均属于一个 Class 类对象,所有具有相同元素类型和维数的数组共享一个Class 对象。基本的 Java 类型(boolean, byte, char, short, int, long, float 和 double) 和 void 类型也可表示为 Class 对象。


以下示例使用 Class 对象显示一个对象的 Class 名: 
         void printClassName(Object obj) { 
            System.out.println("The class of " + obj + 
                               " is " + obj.getClass().getName()); 
        }


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

 

             Class类
       我们可以把每个Class类的对象当做众多类的代理。而且在每个Class类对象中有会有字段记录他引用的这个类的类加载器。如果该字段为null,表示该类的加载器为bootstrap loader.具体原因见:对于类加载器的认识一文。

 

 

我们知道java中有多个加载器,每个加载器能载入多个类,所以只要取得Class类对象,就可利用其getClassLoader()方法取得该类加载器的引用。

      jvm为每种类管理者独一的Class对象。因此我们可以用双等号操作符来比较对象:a1.getClass()==A.class;应该返回的是true。  
          class类和加载器
    forName(String classname)和 forName(String classname,boolean initialze,ClassLoader loader)   方法 
      该方法返回给定串名相应的de>Classde> 对象。若给定一个类或接口的完整路径名,那么此方法将试图定位、装载和连接该类。若成功,返回该类对象。否则,抛出 ClassNotFoundException 异常。 例如,下面代码段返回名为de>java.lang.Threadde> 的运行 de>Classde> 描述器。de>Class t = Class.forName("java.lang.Thread") ; 此方法是需要指定类加载器的,当用到仅有一个String参数的 forName方法时,Class对象将默认调用当前类加载器作为加载器和将第二参数为 true。第二个参数说明:如果是false时,调用forName方法只是在命令类加载器载入该类,而不初始化该类的静态区块,只有当该类第一次实例化 时,静态区块才被调用。当为true时,则载入时就调用静态区块。 de> 
getClassLoader() 
获取该类的类装载器。 
getComponentType() 
如果当前类表示一个数组,则返回表示该数组组件的 Class 对象,否则返回 null。 
getConstructor(Class[]) 
返回当前 Class 对象表示的类的指定的公有构造子对象。 
getConstructors() 
返回当前 Class 对象表示的类的所有公有构造子对象数组。 
getDeclaredConstructor(Class[]) 
返回当前 Class 对象表示的类的指定已说明的一个构造子对象。 
getDeclaredConstructors() 
返回当前 Class 对象表示的类的所有已说明的构造子对象数组。 
getDeclaredField(String) 
返回当前 Class 对象表示的类或接口的指定已说明的一个域对象。 
getDeclaredFields() 
返回当前 Class 对象表示的类或接口的所有已说明的域对象数组。 
getDeclaredMethod(String, Class[]) 
返回当前 Class 对象表示的类或接口的指定已说明的一个方法对象。 
getDeclaredMethods() 
返回 Class 对象表示的类或接口的所有已说明的方法数组。 
getField(String) 
返回当前 Class 对象表示的类或接口的指定的公有成员域对象。 
getFields() 
返回当前 Class 对象表示的类或接口的所有可访问的公有域对象数组。 
getInterfaces() 
返回当前对象表示的类或接口实现的接口。 
getMethod(String, Class[]) 
返回当前 Class 对象表示的类或接口的指定的公有成员方法对象。 
getMethods() 
返回当前 Class 对象表示的类或接口的所有公有成员方法对象数组,包括已声明的和从父类继承的方法。 
getModifiers() 
返回该类或接口的 Java 语言修改器代码。 
getName() 
返回 Class 对象表示的类型(类、接口、数组或基类型)的完整路径名字符串。 
getResource(String) 
按指定名查找资源。 
getResourceAsStream(String) 
用给定名查找资源。 
getSigners() 
获取类标记。 
getSuperclass() 
如果此对象表示除 Object 外的任一类, 那么返回此对象的父类对象。 
isArray() 
如果 Class 对象表示一个数组则返回 true, 否则返回 false。 
isAssignableFrom(Class) 
判定 Class 对象表示的类或接口是否同参数指定的 Class 表示的类或接口相同,或是其父类。 
isInstance(Object) 
此方法是 Java 语言 instanceof 操作的动态等价方法。 
isInterface() 
判定指定的 Class 对象是否表示一个接口类型。 
isPrimitive() 
判定指定的 Class 对象是否表示一个 Java 的基类型。 
newInstance() 
创建类的新实例。 
toString() 
将对象转换为字符串。

java Class 类简介

一,class类有什么用?   class类的实例表示java应用运行时的类(class ans enum)或接口(interface and annotation)(每个java类运行时都在JVM里...
  • a379039233
  • a379039233
  • 2011年01月22日 17:48
  • 51659

Java中 Class类总结

1 Java 中获取Class对象的方法 分类: Java Class object 诞生管道 示例 运用getClass() 注:每个class 都有此函数 S...
  • u011258318
  • u011258318
  • 2015年04月18日 22:22
  • 944

【Java】Class 对象

每个类都有一个Class对象Java中一切皆对象,各种各样的对象提供了丰富的功能,今天说说”对象的对象”。java.lang.Object java.lang.Class每个类都有一个相应的C...
  • xiaohui_hubei
  • xiaohui_hubei
  • 2015年03月25日 15:53
  • 1100

深入理解Java类型信息(Class对象)与反射机制

【版权申明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) http://blog.csdn.net/javazejian/article/details/70768369 出自【...
  • javazejian
  • javazejian
  • 2017年05月01日 23:19
  • 21925

深入理解Java Class文件格式(一)

在上一篇博客中, 大致讲解了Java虚拟机的体系结构和执行原理。 本篇博客主要讲解能够被JVM识别, 加载并执行的class文件的格式。 对于理解JVM和深入理解Java语言, 学习并了解class...
  • brave2211
  • brave2211
  • 2014年03月18日 23:31
  • 31352

java中Class对象详解

java中把生成Class对象和实例对象弄混了,更何况生成Class对象和生成instance都有多种方式。所以只有弄清其中的原理,才可以深入理解。首先要生成Class对象,然后再生成Instance...
  • llhhyy1989
  • llhhyy1989
  • 2012年02月09日 08:15
  • 69400

Java获得Class对象的几种方式

1.类、枚举、接口、注解、数组类型、原生类型的名称.class 示例:Class classString=String.class;//类 Class classEnum=RetentionPoli...
  • u012643122
  • u012643122
  • 2015年06月16日 20:25
  • 4130

我是一个Java class

前言:本文主要想讲一下Java虚拟机的故事, 可能有点偏门,不妥之处欢迎留言交流。 第一回 陌生警察我出生在C盘下面一个很深层次的目录下, 也不知道是谁把我放到这里的。 我一直在睡觉,外边的日出日...
  • violet_echo_0908
  • violet_echo_0908
  • 2016年04月24日 13:51
  • 1302

cmd下执行java class

Java代码   package MyJava;      public class MyThread {          public static void SysPrin...
  • cwjcwj520
  • cwjcwj520
  • 2013年06月18日 04:55
  • 7370

Java Class文件结构

平台无关性和语言无关性Java在刚刚诞生的时候提出过一个宣传口号:“一次编写,到处运行”,这句话充分表达了软件开发人员对冲破平台界限的渴求。“与平台无关”的理想最终实现在操作系统的应用层上:Sun公司...
  • Nicorui
  • Nicorui
  • 2017年04月06日 22:31
  • 404
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java的Class类
举报原因:
原因补充:

(最多只允许输入30个字)