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();
}
}
}