package test.ClassLoader;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class TestClassLoader {
public static void main(String a[]) {
//测试一个参数的写法
getNowClass2();
//测试一个参数的另一个写法
getNowClass1();
//测试无参写法
getNowClass();
}
public void printDemo(int m) {
System.out.println("invoke print");
}
public void printDemo() {
System.out.println("invoke print no paramater");
//System.out.printf("congratulations %s1 !", "hello");
}
@SuppressWarnings("unchecked")
static void getNowClass2() {
ClassLoader cls = Thread.currentThread().getContextClassLoader();
// ClassLoader cls = this.getClass().getClassLoader();
try {
Class<TestClassLoader> t = (Class<TestClassLoader>) cls.loadClass("test.ClassLoader.TestClassLoader");
// t.newInstance().printDemo();
Method[] declaredMethods = t.getDeclaredMethods();
System.out.println(declaredMethods);
// 获得某个函数
Method method = t.getMethod("printDemo",int.class);
method.setAccessible(true);
method.invoke(t.newInstance(),100);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
@SuppressWarnings("unchecked")
static void getNowClass1() {
ClassLoader cls = Thread.currentThread().getContextClassLoader();
// ClassLoader cls = this.getClass().getClassLoader();
try {
Class<TestClassLoader> t = (Class<TestClassLoader>) cls.loadClass("test.ClassLoader.TestClassLoader");
// t.newInstance().printDemo();
Method[] declaredMethods = t.getDeclaredMethods();
System.out.println(declaredMethods);
// 获得某个函数
Method method = t.getMethod("printDemo", new Class[] { int.class });
method.setAccessible(true);
method.invoke(t.newInstance(), new Object[] { new Integer(100) });
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
@SuppressWarnings("unchecked")
static void getNowClass() {
ClassLoader cls = Thread.currentThread().getContextClassLoader();
// ClassLoader cls = this.getClass().getClassLoader();
try {
Class<TestClassLoader> t = (Class<TestClassLoader>) cls.loadClass("test.ClassLoader.TestClassLoader");
// t.newInstance().printDemo();
Method[] declaredMethods = t.getDeclaredMethods();
System.out.println(declaredMethods);
// 获得某个函数
Method method = t.getMethod("printDemo");
method.setAccessible(true);
method.invoke(t.newInstance());
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
这两个函数要public 不然会报错
public void printDemo(int m) {
System.out.println("invoke print");
}
public void printDemo() {
System.out.println("invoke print no paramater");
//System.out.printf("congratulations %s1 !", "hello");
}