认识java的Class类

  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类的对象的所在位置。如下图所示:
              o_1.jpg
       我们可以把每个Class类的对象当做众多类的代理。而且在每个Class类对象中有会有字段记录他引用的这个类的类加载器。如果该字段为null,表示该类的加载器为bootstrap loader.具体原因见: 对于类加载器的认识一文
1.jpg
我们知道java中有多个加载器,每个加载器能载入多个类,所以只要取得Class类对象,就可利用其getClassLoader()方法取得该类加载器的引用。
      jvm为每种类管理者独一的Class对象。因此我们可以用双等号操作符来比较对象:a1.getClass()==A.class;应该返回的是true。
      forName(String classname)和 forName(String classname,boolean initialze,ClassLoader loader)  方法
      该方法返回给定串名相应的 Class 对象。若给定一个类或接口的完整路径名,那么此方法将试图定位、装载和连接该类 。若成功,返回该类对象。否则,抛出 ClassNotFoundException 异常。 例如,下面代码段返回名为java.lang.Thread 的运行Class 描述器。 Class t = Class.forName("java.lang.Thread") ; 此方法是需要指定类加载器的,当用到仅有一个String参数的forName方法时,Class对象将默认调用当前类加载器作为加载器和将第二参数为true。第二个参数说明:如果是false时,调用forName方法只是在命令类加载器载入该类,而不初始化该类的静态区块,只有当该类第一次实例化时,静态区块才被调用。当为true时,则载入时就调用静态区块。 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()
将对象转换为字符串。      

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值