反射常用方法
1.反射器获取属性,方法和构造器
public class Test {
public static void main(String[] args) throws Exception{
test1();
}
public static void test3() throws ClassNotFoundException, NoSuchMethodException, SecurityException,
InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
Class clazz = Class.forName("com.buleize.reflectreview.Person");
Constructor[] constructors = clazz.getConstructors();
for (Constructor c : constructors) {
System.out.println(c);
}
System.out.println("************");
Constructor constructor = clazz.getConstructor();
System.out.println(constructor);
System.out.println("*****************");
Constructor[] constructors1 = clazz.getDeclaredConstructors();
for (Constructor c : constructors1) {
System.out.println(c);
}
System.out.println("***********");
Constructor constructor1 = clazz.getDeclaredConstructor(String.class, int.class, String.class);
constructor1.setAccessible(true);
System.out.println(constructor1);
Object obj = constructor1.newInstance("张安", 22, "男");
System.out.println(obj);
}
public static void test5() {
try {
Person p = new Person();
Class clazz = p.getClass();
Field[] fields = clazz.getDeclaredFields();
for(Field f : fields) {
String str = f.getName();
System.out.println(str);
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static void test2()
throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
Person p = new Person();
Class clazz = p.getClass();
Field field = clazz.getField("name");
field.setAccessible(true);
Object obj = null;
try {
obj = clazz.newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
}
field.set(obj, "张三");
System.out.println(field.get(p));
}
public static void test4() {
try {
Person p = new Person();
Class clazz = p.getClass();
Field[] fields = clazz.getDeclaredFields();
for(Field f : fields) {
System.out.println(f);
}
Field field = clazz.getField("name");
field.setAccessible(true);
field.set(p, "李四");
System.out.println(Modifier.toString(field.getModifiers()));
System.out.println(p);
} catch (Exception e) {
e.printStackTrace();
}
}
public static void test1() throws NoSuchFieldException, SecurityException {
Class clazz = Person.class;
Field[] fields = clazz.getFields();
for (Field f : fields) {
System.out.println(f);
}
Field f= clazz.getDeclaredField("name");
System.out.println(f);
try {
Object obj = clazz.newInstance();
f.set(obj, "张三");
System.out.println(obj);
} catch (InstantiationException | IllegalAccessException e) {
e.printStackTrace();
}
}
}
2.常用API
public class Test {
public static void main(String[] args) {
test4();
int a =5;
int b = ++a;
System.out.println(a+"***" + b);
}
public static void test4() {
try(FileReader fr = new FileReader("src/data.properties");
){
Properties p = new Properties();
p.load(fr);
String str = p.getProperty("name");
System.out.println(str+"*******");
Set<String> keys = p.stringPropertyNames();
for(String key : keys) {
System.out.println(key);
}
}catch(Exception e) {
e.printStackTrace();
}
}
public static void test3() {
try {
Class clazz =Class.forName("com.buleize.reflecthree.Person");
Method[] method = clazz.getMethods();
Method m = clazz.getMethod("setName",String.class);
Method[] method1 = clazz.getDeclaredMethods();
Method m2 = clazz.getDeclaredMethod("setName",String.class);
m2.setAccessible(true);
Object obj = clazz.newInstance();
m2.invoke(obj, "张三");
System.out.println(obj);
} catch (Exception e) {
e.printStackTrace();
}
}
public static void test2() {
try {
Class clazz =Class.forName("com.buleize.reflecthree.Person");
Constructor constructor1 = clazz.getDeclaredConstructor(String.class,String.class,int.class,double.class);
constructor1.setAccessible(true);
Object obj = constructor1.newInstance("于漫漫","女",23,65.0);
System.out.println(obj);
} catch (Exception e) {
e.printStackTrace();
}
}
public static void test1() {
try {
Class clazz =Class.forName("com.buleize.reflecthree.Person");
Field field1 = clazz.getDeclaredField("name");
System.out.println(field1);
field1.setAccessible(true);
Object obj = clazz.newInstance();
field1.set(obj, "张三");
System.out.println(obj);
} catch (Exception e) {
e.printStackTrace();
}
}
}