package cn.itcast.test;
import java.io.FileReader;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.util.Properties;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.util.Properties;
/*
* 通过配置文件运行类中的方法
*
* 反射:
* 需要有配置文件配合使用。
* 用class.txt代替。
* 并且你知道有两个键。
* className
* methodName
*/
public class Test {
public static void main(String[] args) throws Exception {
// 反射前的做法
// Student s = new Student();
// s.love();
// Teacher t = new Teacher();
// t.love();
// Worker w = new Worker();
// w.love();
// 反射后的做法
* 通过配置文件运行类中的方法
*
* 反射:
* 需要有配置文件配合使用。
* 用class.txt代替。
* 并且你知道有两个键。
* className
* methodName
*/
public class Test {
public static void main(String[] args) throws Exception {
// 反射前的做法
// Student s = new Student();
// s.love();
// Teacher t = new Teacher();
// t.love();
// Worker w = new Worker();
// w.love();
// 反射后的做法
// 加载键值对数据
//Properties 类表示了一个持久的属性集。Properties 可保存在流中或从流中加载。属性列表中每个键及其对应值都是一个字符串。
Properties prop = new Properties();
FileReader fr = new FileReader("class.txt");
prop.load(fr);
fr.close();
// 获取数据
String className = prop.getProperty("className");
String methodName = prop.getProperty("methodName");
// 反射
Class<?> c = Class.forName(className);
Constructor<?> con = c.getConstructor();
Object obj = con.newInstance();//创建该构造方法的声明类的新实例,并用指定的初始化参数初始化该实例。
// 调用方法
Method m = c.getMethod(methodName);
m.invoke(obj);//调用由此 Method 对象表示的底层方法。
}
}
//Properties 类表示了一个持久的属性集。Properties 可保存在流中或从流中加载。属性列表中每个键及其对应值都是一个字符串。
Properties prop = new Properties();
FileReader fr = new FileReader("class.txt");
prop.load(fr);
fr.close();
// 获取数据
String className = prop.getProperty("className");
String methodName = prop.getProperty("methodName");
// 反射
Class<?> c = Class.forName(className);
Constructor<?> con = c.getConstructor();
Object obj = con.newInstance();//创建该构造方法的声明类的新实例,并用指定的初始化参数初始化该实例。
// 调用方法
Method m = c.getMethod(methodName);
m.invoke(obj);//调用由此 Method 对象表示的底层方法。
}
}
package cn.itcast.test;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.lang.reflect.Method;
import java.util.ArrayList;
/*
* 我给你ArrayList<Integer>的一个对象,我想在这个集合中添加一个字符串数据,如何实现呢?
*/
public class ArrayListDemo {
public static void main(String[] args) throws NoSuchMethodException, SecurityException, IllegalAccessException,
IllegalArgumentException, InvocationTargetException {
// 创建集合对象
ArrayList<Integer> array = new ArrayList<Integer>();
* 我给你ArrayList<Integer>的一个对象,我想在这个集合中添加一个字符串数据,如何实现呢?
*/
public class ArrayListDemo {
public static void main(String[] args) throws NoSuchMethodException, SecurityException, IllegalAccessException,
IllegalArgumentException, InvocationTargetException {
// 创建集合对象
ArrayList<Integer> array = new ArrayList<Integer>();
// array.add("hello");
// array.add(10);
// array.add(10);
// 获取集合ArrayList的class文件对象
Class c = array.getClass();
Method m = c.getMethod("add", Object.class);
Class c = array.getClass();
Method m = c.getMethod("add", Object.class);
// 调用array的add方法,传入的值是hello
m.invoke(array, "hello");
m.invoke(array, "world");
m.invoke(array, "java");
m.invoke(array, "hello");
m.invoke(array, "world");
m.invoke(array, "java");
StringBuffer sb = new StringBuffer();
// String s = arraytoString(array);
for (int x = 0; x < array.size(); x++) {
if (x == array.size() - 1) {
sb.append(array.get(x));
} else {
sb.append(array.get(x)).append(",");
}
}
System.out.println(sb);
// String s = arraytoString(array);
for (int x = 0; x < array.size(); x++) {
if (x == array.size() - 1) {
sb.append(array.get(x));
} else {
sb.append(array.get(x)).append(",");
}
}
System.out.println(sb);
}
}