用反射的形式来执行以下代码
new String(new StringBuffer("abc"));
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
// 运用反射的方式来获取构造方法new String(new StringBuffer("abc"))
// 通过构造方法来执行
Constructor con = String.class.getConstructor(StringBuffer.class);
System.out.println(con.newInstance(new StringBuffer("abc")));
// 通过反射还可以操作成员变量
ReflactPoint point1 = new ReflactPoint(10, 15);
// 通常我们会这样取得ReflactPoint中的String类型变量的值,并且将其中字符b改成a;
System.out.println(point1.str1.replace(‘b‘, ‘a‘));
System.out.println(point1.str2.replace(‘b‘, ‘a‘));
System.out.println(point1.str3.replace(‘b‘, ‘a‘));
// 现在用反射的方式 应该怎样做呢。
Field[] fields = point1.getClass().getFields();
for (Field field : fields) {
if (field.getType() == String.class)
{
// 获得String变量值
String oldValue = (String) field.get(point1);
String newValue = oldValue.replace(‘b‘, ‘a‘);
// 重新将对象赋值
field.set(point1, newValue);
System.out.println(field.get(point1));
}
}
// 还可以执行方法 比如说获取ReflactPoint类中每个String变量的第二个字符
// 现在用反射的方式 应该怎样做呢。
for (Field field : fields)
if (field.getType() == String.class) {
// 获得String变量值
String oldValue = (String) field.get(point1);
Method method = String.class.getMethod("charAt", int.class);
System.out.println(method.invoke(oldValue, 1));
}
}
}
public class ReflactPoint {
public int x; public int y; public String str1 = "ball"; public String str2 = "basketBall"; public String str3 = "Demo"; //增加一个构造函数 public ReflactPoint(int pointx,int pointy) { this.x = pointx; this.y = pointy; } }