Class clz=String.class; Object obj=clz.newInstance(); System.out.println(obj.getClass().getName());//java.lang.String Constructor constructor=clz.getConstructor(String.class); Constructor[] constructors=clz.getConstructors(); Field field=clz.getDeclaredField("value"); System.out.println(field.toString());//private final char[] java.lang.String.value Method[] methods=clz.getDeclaredMethods(); for (Method m:methods){ System.out.println(m.toString()); }
输出
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
java.lang.String private final char[] java.lang.String.value public boolean java.lang.String.equals(java.lang.Object) public java.lang.String java.lang.String.toString() public int java.lang.String.hashCode() public int java.lang.String.compareTo(java.lang.Object) public int java.lang.String.compareTo(java.lang.String) public int java.lang.String.indexOf(java.lang.String,int) static int java.lang.String.indexOf(char[],int,int,java.lang.String,int) static int java.lang.String.indexOf(char[],int,int,char[],int,int,int) public int java.lang.String.indexOf(int) public int java.lang.String.indexOf(java.lang.String) public int java.lang.String.indexOf(int,int) ... ...
Class clz=Class.forName("javaKnowledge.People"); People p=new People(18,"zzz",true,10000.0d); //name是私有字段 Field field1=clz.getDeclaredField("name"); String name= (String) field1.get(p);
结果
1
Exception in thread "main" java.lang.IllegalAccessException: Class javaKnowledge.ReflectDemo can not access a member of class javaKnowledge.People with modifiers "private"
调用setAccessible(true)方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Class clz=Class.forName("javaKnowledge.People"); //获取age字段 Field field=clz.getField("age"); People p=new People(18,"zzz",true,10000.0d); int a= (int) field.get(p); System.out.println(a); Field field1=clz.getDeclaredField("name"); //设置访问权限 field1.setAccessible(true); String name= (String) field1.get(p); System.out.println(name); //设置p对象name字段的值为“hhh” field1.set(p,"hhh"); //验证结果 System.out.println(p.getName());
FileReader in = new FileReader("src/javaKnowledge/a.properties"); properties.load(in); Constructor constructor=clz.getConstructor(int.class,String.class,boolean.class,double.class); People people= (People) constructor.newInstance(Integer.parseInt(properties.getProperty("age")),properties.getProperty("name"),Boolean.parseBoolean(properties.getProperty("sex")),Double.parseDouble(properties.getProperty("money"))); System.out.println(people.getName());
isPublic(int mod) 如果整数参数包括 public 修饰符,则返回 true,否则返回 false。
等等
一些常量
public static final int PUBLIC:表示public修饰的int值。
static int FINAL :表示 final 修饰符的 int 值。
等等
代码示例:
1 2 3 4 5 6 7 8 9 10 11 12 13
int a=clz.getModifiers(); System.out.println(a); System.out.println(field.getModifiers()); field=clz.getDeclaredField("name"); System.out.println(field.getModifiers()); field=clz.getDeclaredField("sex"); System.out.println(field.getModifiers()); //在People中添加一条语句 public static final int test=1; field=clz.getDeclaredField("test"); System.out.println(field.getModifiers()); System.out.println(Modifier.classModifiers()); System.out.println(field.getModifiers()); System.out.println(Modifier.isPrivate(field.getModifiers()));
近期评论