纸绘武身(反射)

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值