📄 use.java
字号:
package test;
import java.lang.reflect.*;
public class Use {
public void use1(){
Test1 t2 = new Test2();
t2.f1(); //打印出:Test2
Test1 t3 = (Test1)(new Test3("")); //打印出:Test2 Constructor
t3.f1(); //打印出:Test3
}
public void use2(Test1 t1){ t1.f1(); }
public void use3(String className) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, ClassNotFoundException{
Class c = Class.forName(className);
Method m = c.getDeclaredMethod("f2");
//m.setAccessible(true);
m.invoke(null); //此种调用法要求对应的方法必须是静态的,否则会出错.
}
public void use4(Class c) throws IllegalAccessException, NoSuchMethodException, InvocationTargetException, InstantiationException{
Method m = c.getDeclaredMethod("f2");
m.invoke(null); //此种调用法要求对应的方法必须是静态的,否则会出错.
m = c.getDeclaredMethod("f1");
m.invoke(c.newInstance(),new Object[]{});//此种调用法要求对应的类必须要有空的构造函数.
}
public void use5(Class c) throws InstantiationException, IllegalAccessException{
Test1 t3 = (Test1)c.newInstance(); //要求对应的类必须要有空的构造函数
t3.f1();
}
public static void main(String args[]) throws NoSuchMethodException, IllegalAccessException, ClassNotFoundException, InvocationTargetException, InstantiationException{
Use u = new Use();
u.use1();
u.use2(new Test3("")); //打印出:Test2 Constructor
// Test3
u.use3("test.Test3"); //打印出:Test3 f2
u.use4(Test3.class); //打印出:Test3 f2
// Test3
u.use5(Test3.class); //打印出:Test3
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -