1 、Class.forName("com.wzh.test.loadClass"); Class.forName("com.mysql.jdbc.Driver"); 加載類到虛擬機 首先你要明白在java裏面任何class都要裝載在虛擬機上才能運行。 這句話就是裝載類用的(和new 不一樣,要分清楚)。 jvm會執行靜態代碼段,你要記住一個概念,靜態代碼是和class綁定的,class裝載成功就表示執行了你的靜態代碼了。 而且以後不會再走這段靜態代碼了
import java.lang.annotation.Annotation;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
//使用兩個註釋修飾該類
@SuppressWarnings(value = "unchecked")
@Deprecated
public class ClassTest {
// 爲該類定義一個私有的構造器
private ClassTest() {
}
// 定義一個有參數的構造器
public ClassTest(String name) {
System.out.println("執行有參數的構造器");
}
// 定義一個無參數的info方法
public void info(String str) {
System.out.println("執行有參數的info方法" + ",其實str參數值:" + str);
}
// 定義一個測試用的內部類
class Inner {
}
public static void main(String[] args) throws Exception {
// 下面代碼可以獲取ClassTest對應的Class
Class<ClassTest> clazz = ClassTest.class;
// 獲取該 Class 對象所對應類的全部構造器
Constructor[] ctors = clazz.getDeclaredConstructors();
System.out.println("ClassTest 的全部構造器如下:");
for (Constructor c : ctors) {
System.out.println(c);
}
// 獲取該 Class 對象所對應類的全部 public 方法
Constructor[] publicCtors = clazz.getConstructors();
System.out.println("ClassTest 的全部 public 構造器如下 :");
for (Constructor c : publicCtors) {
System.out.println(c);
}
// 獲取該 Class 對象所對應類的指定方法
Method[] mtds = clazz.getMethods();
System.out.println("ClassTest 的全部 public 方法如下:");
for (Method md : mtds) {
System.out.println(md);
}
// 獲取該 Class 對象所對應類的指定方法
System.out.println("ClassTest 裏帶一個字符串參數的 info 方法爲:"
+ clazz.getMethod("info", String.class));
//獲取該 Class 對象所對應類的上的全部註釋
Annotation[] anns=clazz.getAnnotations();
System.out.println("ClassTest 的全部 Annotattion 如下:");
for (Annotation an : anns) {
System.out.println(an);
}
System.out.println("該 Class 元素上的 @SuppressWarnings 註釋爲:"+
clazz.getAnnotation(SuppressWarnings.class));
//獲取該 Class 對象所對應類的全部內部類
Class<?>[] inners=clazz.getDeclaredClasses();
System.out.println("ClassTest 的全部內部類如下:");
for (Class c : inners) {
System.out.println(c);
}
//使用 Class.forName 方法加載 ClassTest 的 Inner 內部類
Class inClazz=Class.forName("ClassTest$Inner");
//通過getDeclaringClass()防僞該類所在的外部類
System.out.println("inClazz 對應類所在的外部類爲:"+inClazz.getDeclaredClasses());
System.out.println("ClassTest 的包爲:"+clazz.getPackage());
System.out.println("ClassTest 的父類爲:"+clazz.getSuperclass());
}
}