黑马程序员技术交流社区
标题:
反射
[打印本页]
作者:
奔跑的二叉树
时间:
2013-9-17 11:17
标题:
反射
package cn.baidu.com;
import java.lang.reflect.Constructor;
import java.lang.reflect.*;
public class ReflectText {
public static void main(String[] args) throws Exception {
String str1="abc";
Class cls1=str1.getClass();
Class cls2=String.class;
Class cls3=Class.forName("java.lang.String");
System.out.println(cls1==cls2);
System.out.println(cls1==cls3);
System.out.println();
System.out.println(cls1.isPrimitive());//是否是基本类型
System.out.println(int.class.isPrimitive());
System.out.println(int.class==Integer.class);
System.out.println(int.class==Integer.TYPE);
System.out.println(int[].class.isPrimitive());
Constructor constructor=String.class.getConstructor(StringBuffer.class);
String str2=(String)constructor.newInstance(new StringBuffer("abc"));
System.out.println(str2.charAt(2));
Reflectpoint pt1=new Reflectpoint(3,5);
//fieldY的值是多少?fieldY不是对象身上的变量,而是类上,要用它去取某个对象上对应的值
Field fieldY=pt1.getClass().getField("y");
System.out.println(fieldY.get(pt1));
}
}
复制代码
package cn.baidu.com;
public class Reflectpoint {
private int x;
private int y;
public Reflectpoint(int x, int y) {
super();
this.x = x;
this.y = y;
}
}
复制代码
运行时说 33行有个错误,不了解
还有
fieldY的值是多少
?那句话不是很理解,大神们能详细说下吗
作者:
酱爆
时间:
2013-9-17 11:23
我觉得FieldY应该是字节码的地址吧!!
作者:
jìng╮煜
时间:
2013-9-17 11:36
首先,反射你可以看一下我写的那篇文章,我最近也看到了反射
http://xizihux.blog.163.com/blog/static/2258950232013817102425508/
其次,fieldy似乎只是存的是该类中被指定的成员变量的字节码, Field据我猜测是个反射点,并不是反射整个类.
Constructor 才是反射整个类. 你的那个错误可能是导包问题,
import java.lang.reflect.Constructor; 后面的Constructor改成* ,
还有毕姥爷说过, 一次出现一大串错误,没别的,先检查有没有忘记大事了.....
作者:
刘劲松
时间:
2013-9-17 12:53
访问或修改私有成员或方法被称为暴力反射。这时候记住getDeclared。。。和setAccessible(true)
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2