java.lang.Class类java
声明:数组
public final class Class<T>extends Object implements Serializable, GenericDeclaration, Type, AnnotatedElement
T
- 由此 Class
对象建模的类的类型。例如, String.class
的类型是 Class<String>
。若是将被建模的类未知,则使用 Class<?>
。函数
Class 类的实例表示正在运行的 Java 应用程序中的类和接口。ui
枚举是一种类,注释是一种接口。spa
每一个数组属于被映射为 Class 对象的一个类,全部具备相同元素类型和维数的数组都共享该Class 对象。.net
基本的 Java 类型(boolean、byte、char、short、int、long、float 和double)和关键字 void 也表示为 Class 对象。code
Class类没有public构造方法。Class对象是在加载类时由Java 虚拟机以及经过调用类加载器中的defineClass 方法自动构造的。对象
在Java中,每一个class都有一个相应的Class对象。也就是说,当咱们编写一个类,编译完成后,在生成的.class文件中,就会产生一个 Class对象,用于表示这个类的类型信息。Class类不是咱们认为建立的,是由java虚拟机,在咱们生成.class文件的时候建立的,咱们能够通 过几种方法,得到这个Class类实例。blog
Class 对象的三种获取方法继承
package com.tonyluis;
public class Test2 {
public static void main(String args[]) throws ClassNotFoundException {
Class<Test2> t1 = Test2.class;
Class<?> t2 = Class.forName("com.tonyluis.Test2");
Class<? extends Test2> t3 = new Test2().getClass();
System.out.println((t1 == t2) + " " + (t2 == t3));
//输出true true
}
}
重要的几个方法:
1, public static Class<?> forName(String className)
返回一个Class<?>对象,注意经过这个方法是不能肯定Class<?>里面通配符?的类型的。
2,public T newInstance() :根据对象的class新建一个对象,经常使用于反射中构建对象,调用对象方法,注意该类需实现默认无参构造方法。
Class<?> doubleClass= Class.forName("java.lang.Double"); try { Double objDouble = (Double) doubleClass.newInstance(); } catch (InstantiationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); }
3,public ClassLoader getClassLoader():
4,public String getName():
5,public native Class getSuperclass():获取类的父类,Object的父类为null
6,public java.net.URL getResource(String name)
解决 File File =new File("C:\\test.txt")绝对路径问题,能够得到相对路径。
参考:http://blog.csdn.net/lcj8/article/details/3502849
7,其余类
public boolean isEnum()
public native boolean isArray()
public native boolean isPrimitive()
public boolean isAnnotation()
public Package getPackage() :反射中得到package,如java.lang.Object 的package为java.lang。
public native int getModifiers() : 反射中得到修饰符,如public static void等 。
public Field getField(String name):反射中得到域成员。
public Field[] getFields() :得到域数组成员。
public Method[] getMethods() :得到方法。
public Method getDeclaredMethod(String name, Class<?>... parameterTypes):加个Declared表明本类,继承,父类均不包括。
public Constructor<?>[] getConstructors() :得到全部的构造函数。
其中Package、Field、Method方法均为java.lang.reflect包里的对象