package Reflect;
public class Student {
//属性
public String name;
protected int age;
String address;
private int idNum;
/* //静态代码块,类加载的时候执行
static{
System.out.println("加载类-->我是静态代码块");
}
{
System.out.println("生成了对象-->我是构造代码块");
}
public static void m1(int i){
}
public static int m1(int i,String a){
return 1;
}
public static void m2(){
}*/
}
package Reflect;
import java.io.File;
import java.io.FileDescriptor;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
/**
* 通过反射得到类的属性:
* Java中定义了一个Field类来表示属性
* @author john
*
*/
public class Demo2 {
/**
* @param args
* @throws ClassNotFoundException
* @throws SecurityException
* @throws NoSuchFieldException
* @throws IllegalAccessException
* @throws InstantiationException
*/
public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException, SecurityException, InstantiationException, IllegalAccessException {
Class class1=Class.forName("Reflect.Student");
/**
* 获得属性基本信息
*/
System.out.println("========================获得可访问属性===================================");
//获得可访问属性
//getFields()获得的是public修饰的属性
Field[] field1=class1.getFields();
for(Field fs:field1){
System.out.println(fs);
}
System.out.println("==========");
//获得所有的属性
Field[] field2=class1.getDeclaredFields();
for(Field fs:field2){
System.out.println(fs);
}
System.out.println("==========");
//获得单独属性
Field field3=class1.getDeclaredField("name");
System.out.println(field3);
System.out.println("======================== 给属性赋值===================================");
/**
* 给属性赋值(注意public与private属性)
*/
//得到对象
Object o=class1.newInstance();
//赋值
field3.set(o,"小汪");
//查看属性的值
System.out.println("给public属性赋值:name="+field3.get(o));
//给private修饰的属性赋值
Field field4=class1.getDeclaredField("idNum");
field4.setAccessible(true);//打破封装-->导致属性不安全
field4.set(o, 114);
System.out.println("给private属性赋值:idNum="+field4.get(o));
System.out.println("================获得属性中的类型,修饰符,变量名称===============================");
/**
* 获得属性中的类型,修饰符,变量名称
*/
//获得类型
for(Field fs:field2){
Class type=fs.getType();
System.out.println(type);
}
System.out.println("==========");
//获得变量名称
for(Field fs:field2){
System.out.println(fs.getName());
}
System.out.println("==========");
//获得修饰符(返回的数字代表不同的修饰符号)
for(Field fs:field2){
int i=fs.getModifiers();
System.out.println(Modifier.toString(i));
}
System.out.println("==================================================================");
}
}
还没有评论,来说两句吧...