1、通過ClassLoader的loadClass方法。
package com.IO;
public class ClassLoaderTest {
public static void main(String[] args) {
ClassLoader c = ClassLoader.getSystemClassLoader();
try {
//加載指定的類型,需要指定類型的全限定名
//加載類不代表會初始化類
//當加載某個類型之後,就會創建所加載類型的Class的對象。
//該隊形包含了所加載類的相關信息
Class<?> cl = c.loadClass("com.IO.V");
//類加載器
System.out.println(cl.getClassLoader());
// 通過Class對象來創建對象。 (調用無參的構造器)
Object o = c.newInstance();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
com.IO
class V{
static {
System.out.println("執行了");
}
}
2、通過Class的forName方法。
package com.IO;
public class ClassforName {
public static void main(String[] args) {
try {
Class<?> c2 = Class.forName("com.IO.V");
//v中靜態代碼塊的語句會輸出
c2.newInstance();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
3、通過T.class
package com.IO;
public class Reflect3 {
public static void main(String[] args) {
try {
Class<String> c3 = String.class;
Class cl = V.class
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
4 、通過getClass方法
package com.IO;
public class Reflect4 {
public static void main(String[] args) {
try {
V v = new V();
Class<? extends V> c4 = v.getClass();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}