获取类型信息
|
获取包名
|
public Package getPackage()
|
返回该类的包,如果存档或基本代码中没有可用的包信息,则返回 null。
|
测试:
Class c1 = ClassA.class;
Class c2 = int.class;
System.out.println(c1.getPackage());// package jichu
System.out.println(c2.getPackage());// null
|
|
获取超类
|
public native Class<? super T> getSuperclass();
|
此对象所表示的类的超类。
|
测试:
Class c = ClassA.class;
System.out.println(c.getSuperclass());// class java.lang.Object
|
|
获取修饰符
|
public native int getModifiers();
|
表示该类修饰符的 int值。
|
测试:
Class c1 = Class.forName("jichu.ClassA");
Class c2 = Class.forName("jichu.InterfaceA");
int[] arr = new int[] {};
Class c3 = arr.getClass();
System.out.println(c1.getModifiers());//
System.out.println(c2.getModifiers());//
System.out.println(c3.getModifiers());//
将返回的int值转换成修饰符:
System.out.println(Modifier.toString(c1.getModifiers()));// public
System.out.println(Modifier.toString(c2.getModifiers()));// abstract interface
System.out.println(Modifier.toString(c3.getModifiers()));// public abstract final
|
|
获取非限定类名
|
public String getSimpleName();
|
返回源代码中给出的底层类的简称。如果底层类是匿名的则返回一个空字符串。数组的简称即附带 "[]" 的组件类型的简称。
|
测试:
Class c1 = ClassA.class;
Class c2 = InterfaceA.class;
Class c3 = int.class;
Class c4 = int[].class;
Class c5 = void.class;
System.out.println(c1.getSimpleName());// ClassA
System.out.println(c2.getSimpleName());// InterfaceA
System.out.println(c3.getSimpleName());// int
System.out.println(c4.getSimpleName());// int[]
System.out.println(c5.getSimpleName());// void
|
|
获取全限定类名
|
public String getCanonicalName();
|
返回 Java Language Specification 中所定义的底层类的规范化名称。如果底层类没有规范化名称(即如果底层类是一个组件类型没有规范化名称的本地类、匿名类或数组),则返回 null。
|
测试:
Class c1 = ClassA.class;
Class c2 = InterfaceA.class;
Class c3 = int.class;
Class c4 = int[].class;
Class c5 = void.class;
System.out.println(c1.getCanonicalName());//jichu.ClassA
System.out.println(c2.getCanonicalName());// jichu.InterfaceA
System.out.println(c3.getCanonicalName());// int
System.out.println(c4.getCanonicalName());// int[]
System.out.println(c5.getCanonicalName());// void
|
|
获取所有成员变量
|
public Field[] getDeclaredFields() throws SecurityException
|
返回 Field 对象的一个数组,这些对象反映此 Class 对象所表示的类或接口所声明的所有字段。包括公共、保护、默认(包)访问和私有字段,但不包括继承的字段。返回数组中的元素没有排序,也没有任何特定的顺序。如果该类或接口不声明任何字段,或者此 Class 对象表示一个基本类型、一个数组类或 void,则此方法返回一个长度为 0 的数组。
|
测试:
Class c = Class.forName("jichu.ClassA");
Field[] arr = c.getDeclaredFields();
StringBuffer s = new StringBuffer();
for (Field f : arr) {
s.append(Modifier.toString(f.getModifiers()) + " ");
s.append(f.getType().getSimpleName() + " ");
s.append(f.getName() + ";\n");
}
System.out.println(s.toString());
打印:
private String s1;
private String s2;
|
|
获取指定名称的成员变量
|
public Field getDeclaredField(String name)throws NoSuchFieldException, SecurityException
|
返回一个 Field 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明字段。name 参数是一个 String,它指定所需字段的简称。注意,此方法不反映数组类的 length 字段。
|
测试:
Class c = Class.forName("jichu.ClassA");
Field f = c.getDeclaredField("s2");
StringBuffer s = new StringBuffer();
s.append(Modifier.toString(f.getModifiers()) + " ");
s.append(f.getType().getSimpleName() + " ");
s.append(f.getName() + ";\n");
System.out.println(s.toString());
打印:
|
|
获取所有成员方法
|
public Method[] getDeclaredMethods() throws SecurityException
|
返回 Method 对象的一个数组,这些对象反映此 Class 对象表示的类或接口声明的所有方法,包括公共、保护、默认(包)访问和私有方法,但不包括继承的方法。返回数组中的元素没有排序,也没有任何特定的顺序。如果该类或接口不声明任何方法,或者此 Class 对象表示一个基本类型、一个数组类或 void,则此方法返回一个长度为 0 的数组。
|
测试:
Class c = Class.forName("jichu.ClassA");
Method[] arr = c.getDeclaredMethods();
StringBuffer s = new StringBuffer();
for (Method m : arr) {
s.append(Modifier.toString(m.getModifiers()) + " ");
s.append(m.getReturnType().getSimpleName() + " ");
s.append(m.getName() + ";\n");
}
System.out.println(s.toString());
打印:
public String method1;
public String method2;
|
|
获取指定名称的成员方法
|
public Method getDeclaredMethod(String name, Class<?>... parameterTypes) throws NoSuchMethodException, SecurityException
|
返回一个 Method 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明方法。name 参数是一个 String,它指定所需方法的简称,parameterTypes 参数是 Class 对象的一个数组,它按声明顺序标识该方法的形参类型。如果在某个类中声明了带有相同参数类型的多个方法,并且其中有一个方法的返回类型比其他方法的返回类型都特殊,则返回该方法;否则将从中任选一个方法。
|
测试:
Class c = Class.forName("jichu.ClassA");
Method m = c.getDeclaredMethod("method1");
StringBuffer s = new StringBuffer();
s.append(Modifier.toString(m.getModifiers()) + " ");
s.append(m.getReturnType().getSimpleName() + " ");
s.append(m.getName() + ";\n");
System.out.println(s.toString());
打印:
|
|