Java反射2
来源:互联网 发布:西方音乐史重点知乎 编辑:程序博客网 时间:2024/05/17 10:28
1.2.3.Constructor类:
Constructor类代表某个类的一个构造方法。
得到某个类所有的构造方法:
Constructor[] constructor = Class.forName(“java.lang.String”).getConstructor();
得到某一个构造方法:
Constructor constructor =
Class.forName(“java.lang.String”).getConstructor(StringBuffer.class);
创建实例对象:String str2 = (String)constructor1.newInstance(new StringBuffer("abc"));
1.2.4.Field类:
Field代表某个类的一个成员变量。提供有关类或接口的属性的信息,以及对它的动态访问权限。反射的字段可能是一个类(静态)属性或实例属性,简单的理解可以把它看成一个封装反射类的属性的类。
public void setAccessible(boolean flag)
设置是否有权限访问反射类中的私有属性的,只有设置为true时才可以访问,默认为false。
public void set(Object obj,Object value)
设置指定属性的值。
public Object get(Object obj)
得到属性的值
问题:得到的Field对象是对应到类上面的成员变量,还是对应到对象上的成员变量?类只有一个,而该类的实例对象有多个,如果是与对象关联,那关联的是哪个对象呢?
测试代码:
public class ReflectPoint {
private int x;
public int y;
public ReflectPoint(int x, int y) {
this.x = x;
this.y = y;
}
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
}
测试代码:
ReflectPoint pt1 = new ReflectPoint(3,5);
Field fieldY = pt1.getClass().getField("y");
//fieldY的值是多少?是5,错!fieldY不是对象身上的变量,
//而是类上,要用它去取某个对象上对应的值
System.out.println(fieldY.get(pt1));
Field fieldX = pt1.getClass().getField("x");//出错,由于x是私有的
Field fieldX = pt1.getClass().getDeclaredField("x");
fieldX.setAccessible(true);
System.out.println(fieldX.get(pt1));
结论:
Field对象是对应到类上面的成员变量,而不是对应到对象上的成员变量,Field对象的get方法可以对象的成员变量的值。
练习:将任意一个对象中的所有String类型的成员变量所对应的字符串内容中的“b”改成“a”。
代码如下:
新建一个类Bean.java
public class Bean {
public String str1 = "ball";
public String str2 = "basketball";
public String str3 = "itgroup";
}
新建一个客户端测试代码:
Bean obj = new Bean();
Field[] fields = obj.getClass().getFields();
for(Field field : fields){
if(field.getType() == String.class){
String oldValue = (String)field.get(obj);
String newValue = oldValue.replace('b', 'a');
field.set(obj, newValue);
}
}
- 【Java】(2)Java反射
- java反射技术(2)
- Java 反射机制2
- Java反射2
- java反射2
- Java 反射 2
- [java]反射机制2
- Java 反射reflex(2)
- java反射(2)
- java反射详解(2)
- Java反射机制(2)
- Java反射机制(2)
- java 反射2
- Java 反射2 Member
- Java反射专题2
- java反射2
- java反射笔记2
- JAVA反射(2)
- Java反射1
- linux 进程通信——信号灯
- Ajax.Net--AutoCompleteExtender & CascadingDropDownList & ListSearchExtender
- 网上看到的伟大梦想!!!
- 网页游戏之路WEBGAME运营会游艺观点
- Java反射2
- TNS-12532: TNS:invalid argument 错误的解决!
- 在时间的脚步后,我们永远都是新人
- 五种Linux桌面操作过程录制的文件
- Java反射3
- 我的RMI服务端为什么启动不了??
- 吃面要吃大碗的,找团队要找志同道合的!!!!!
- java反射机制reflect
- ubuntu显示中文文本乱码解决方法