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