Java Class类常用方法描述

Java Class类常用方法描述

一 生成Class对象的三种方式

  1 Class.forName("全路径名")

  2  类名.Class

  3 实例对象.getClass()

   接着看三种方式生成Class对象的区别

package com.shangcg.reflect;


/**
 * 
 * <p>
 *  三种方式生成Class对象的区别测试
 *  说明:测试一、二、三可屏蔽代码分开进行看输出结果
 * </p>
 */
public class ClassDemo {

  public static void main(String[] args)

  {

    try {

    

      /*  
       *  测试一   测试类名.class  
       *  输出为:
       *  testTypeClass---class com.shangcg.reflect.AnyOneObject 没有执行构造函数没有执行静态块
       */

      Class<?> testTypeClass = AnyOneObject.class;

      System.out.println("testTypeClass---" + testTypeClass);
      
      /*测试二   测试Class.forName()   
       * 输出为:
       ---静态的参数初始化--- 说明执行静态块
       testForName---class com.shangcg.reflect.AnyOneObject 
       */

       Class<?> anyOneTypeForName = Class.forName("com.shangcg.reflect.AnyOneObject");
 
       System.out.println("testForName---" + anyOneTypeForName);

       /* 测试三   测试Object.getClass()
        * 输出:
        * ---静态的参数初始化---  执行静态块
          ----非静态的参数初始化--- 执行非静态块初始化
          ----构造函数--- 执行构造函数
          testGetClass---class com.shangcg.reflect.AnyOneObject
        */
      AnyOneObject testGetClass = new AnyOneObject();

      System.out.println("testGetClass---" + testGetClass.getClass());

    } catch (Exception e) {


      e.printStackTrace();

    }

  }

}

class AnyOneObject {

  //构造函数  

  public AnyOneObject() {

    System.out.println("----构造函数---");

  }

  //静态的参数初始化  

  static {

    System.out.println("---静态的参数初始化---");

  }

  //非静态的参数初始化  

  {

    System.out.println("----非静态的参数初始化---");

  }
}

 

结论:

1 类名.class(也称类字面常量)  方式生成Class对象不会初始化的静态块,不会初始化参数,不会调用构造函数
2 Class.forName()方式生成Class对象会初始化类静态块,但不会初始化非静态的代码块,也不调用构造函数
3 Object.getClass()方式生成Class对象会先初始化静态块,接着执行非静态块的初始化,最后调用构造函数

二 java反射(介绍Class类中方法之前,先介绍一下反射)

  1 Java反射机制主要功能:

    1.在运行时判断任意一个对象所属的类。

    2.在运行时构造任意一个类的对象。

    3.在运行时判断任意一个类所具有的成员变量和方法。

    4.在运行时调用任意一个对象的方法。

 

      2 对反射提供支持的类(反射功能主要由Class对象和java.lang.relflect包中的类提供支持)

    Class类:代表一个类,位于java.lang包下。

     Field类:代表类的成员变量(成员变量也称为类的属性)。

     Method类:代表类的方法。

     Constructor类:代表类的构造方法。

     Array类:提供了动态创建数组,以及访问数组的元素的静态方法。

 

三 Class常用方法解释

 Class就是普通的一个类,和我们平时写的类没有什么区别,它位于java.lang包下,和java.lang.reflect包下的类共同支持了java的整个反射功能

 常用方法列表

  1getName():返回String形式的该类的名称。
  2 newInstance():根据某个Class对象产生其对应类的实例,它调用的是此类的默认构造方法(没有默认无参构造器会报错)
  3 getClassLoader():返回该Class对象对应的类的类加载器。
  4 getSuperClass():返回某子类所对应的直接父类所对应的Class对象
  5 isArray():判定此Class对象所对应的是否是一个数组对象
  6 getComponentType() :如果当前类表示一个数组,则返回表示该数组组件的 Class 对象,否则返回 null。
  7 getConstructor(Class[]) :返回当前 Class 对象表示的类的指定的公有构造子对象。
  8 getConstructors() :返回当前 Class 对象表示的类的所有公有构造子对象数组。
  9 getDeclaredConstructor(Class[]) :返回当前 Class 对象表示的类的指定已说明的一个构造子对象。
  10 getDeclaredConstructors() :返回当前 Class 对象表示的类的所有已说明的构造子对象数组。
  11 getDeclaredField(String) :返回当前 Class 对象表示的类或接口的指定已说明的一个域对象。
  12 getDeclaredFields() :返回当前 Class 对象表示的类或接口的所有已说明的域对象数组。
  13 getDeclaredMethod(String, Class[]) :返回当前 Class 对象表示的类或接口的指定已说明的一个方法对象。
  14 getDeclaredMethods() :返回 Class 对象表示的类或接口的所有已说明的方法数组。
  15 getField(String) :返回当前 Class 对象表示的类或接口的指定的公有成员域对象。
  16 getFields() :返回当前 Class 对象表示的类或接口的所有可访问的公有域对象数组。
  17 getInterfaces() :返回当前对象表示的类或接口实现的接口。
  18 getMethod(String, Class[]) :返回当前 Class 对象表示的类或接口的指定的公有成员方法对象。
  19 getMethods() :返回当前 Class 对象表示的类或接口的所有公有成员方法对象数组,包括已声明的和从父类继承的方法。
  20 isInstance(Object) :此方法是 Java 语言 instanceof 操作的动态等价方法。
  21 isInterface() :判定指定的 Class 对象是否表示一个接口类型
  22 isPrimitive() :判定指定的 Class 对象是否表示一个 Java 的基类型。
  23 newInstance() :创建类的新实例

 

 

参考文章http://www.cnblogs.com/mengdd/archive/2013/01/26/2877972.html

    http://blog.csdn.net/ghuilee/article/details/45821537
 

 

posted on 2017-10-25 21:14 沪深狙击手 阅读( ...) 评论( ...) 编辑 收藏
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值