package sunday;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Properties;
public class
Demo
{
public static void main(String[] args) throws ClassNotFoundException, InvocationTargetException, NoSuchMethodException, InstantiationException, IllegalAccessException, IOException {
//reflect();
useFile();
}//main
public static void
idea()
throws ClassNotFoundException, NoSuchMethodException, NoSuchFieldException, InstantiationException, IllegalAccessException, InvocationTargetException {
//获取class对象
Class toolsClass = Tools.class;
Tools tools = new Tools();
Class<? extends Tools> aClass = tools.getClass();
Class<?> aClass1 = Class.forName(“sunday.Tools”);
//获取构造方法
Constructor<? extends Tools> gp = aClass.getConstructor();
Constructor<? extends Tools> g = aClass.getDeclaredConstructor(String.class);
Constructor<?>[] gps = aClass.getConstructors();
Constructor<?>[] gs = aClass.getDeclaredConstructors();
//破解私有构造方法、新建对象
Constructor declaredConstructor = toolsClass.getDeclaredConstructor(String.class);
declaredConstructor.setAccessible(true);
Tools tools1 = declaredConstructor.newInstance(“枳瑾花”);
//获取成员变量、赋值、成员方法
Field age = aClass1.getDeclaredField(“age”);
age.set(tools1,25);
Method method3 = aClass1.getDeclaredMethod(“method3”, String.class, int.class);
method3.invoke(tools,“枳瑾花”,25);
}
public static void
reflect()
throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {
//获取构造方法
Class<?> aClass = Class.forName(“sunday.Tools”);
Constructor<?> constructor = aClass.getConstructor(String.class, int.class, String.class);
Object o = constructor.newInstance(“枳瑾花”, 25, “龙虎山”);
System.out.println(o);
Constructor<?> declaredConstructor = aClass.getDeclaredConstructor(String.class);
declaredConstructor.setAccessible(true);
Object o1 = declaredConstructor.newInstance(“枳瑾花”);
System.out.println(o1);
}
public static void
useFile()
throws IOException, ClassNotFoundException, NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {
Properties properties = new Properties();
FileReader fileReader = new FileReader(“E:\idea\July\File.txt”);
//加载数据
properties.load(fileReader);
fileReader.close();
String classname = properties.getProperty(“classname”);
String methodname = properties.getProperty(“methodname”);
//通过反射来使用
Class<?> aClass = Class.forName(classname);
Constructor<?> constructor = aClass.getConstructor();
Object o = constructor.newInstance();
Method method = aClass.getMethod(methodname);
method.invoke(o);
}
}//end
package sunday;
public class
Tools
{
private String name;
int age;
//构造方法
public String address;
public Tools() {
}
private Tools(String name) {
this.name = name;
}
Tools(String name, int age) {
this.name = name;
this.age = age;
}
public Tools(String name, int age, String address) {
this.name = name;
this.age = age;
this.address = address;
}
//成员方法
private void method(){
System.out.println(“method”);
}
public void method1(){
System.out.println(“method1”);
}
public void method2(String s){
System.out.println(“method2”+s);
}
public String method3(String s,int i){
return s+i;
}
@Override
public String toString() {
return “Tools{” +
“name=’” + name + ‘’’ +
“, age=” + age +
“, address=’” + address + ‘’’ +
‘}’;
}
}
package sunday;
public class
Tools1
implements Peg{
@Override
public void service() {
System.out.println(“Tools1”);
}
}
package sunday;
public class
Tools2
implements Peg{
@Override
public void service() {
System.out.print(“Tools2”);
}
}
package sunday;
public interface
Peg
{
void service();
}
import sunday.Peg;
import sunday.Tools1;
import sunday.Tools2;
module
July {
exports sunday;
provides Peg with Tools2,Tools1;
}
File.txt
classname=sunday.Tools2
methodname=service
package sunday1;
import sunday.Peg;
import sunday.Tools;
import java.util.ServiceLoader;
public class
Demo1
{
public static void main(String[] args) {
Tools tools = new Tools();
tools.method1();
ServiceLoader pegs = ServiceLoader.load(Peg.class);
for(Peg p:pegs){
p.service();
}
}
}
import sunday.Peg;
module
July1 {
requires July;
uses Peg;
}