黑马程序员技术交流社区

标题: 反射 [打印本页]

作者: 奔跑的二叉树    时间: 2013-9-17 11:17
标题: 反射
  1. package cn.baidu.com;

  2. import java.lang.reflect.Constructor;

  3. import java.lang.reflect.*;

  4. public class ReflectText {

  5.         public static void main(String[] args) throws Exception {
  6.                 String str1="abc";
  7.                 Class cls1=str1.getClass();
  8.                 Class cls2=String.class;
  9.                 Class cls3=Class.forName("java.lang.String");
  10.                 System.out.println(cls1==cls2);
  11.                 System.out.println(cls1==cls3);
  12.                 System.out.println();
  13.                
  14.                 System.out.println(cls1.isPrimitive());//是否是基本类型
  15.                 System.out.println(int.class.isPrimitive());
  16.                 System.out.println(int.class==Integer.class);
  17.                 System.out.println(int.class==Integer.TYPE);
  18.                 System.out.println(int[].class.isPrimitive());
  19.                
  20.                
  21.                
  22.                 Constructor constructor=String.class.getConstructor(StringBuffer.class);
  23.                 String str2=(String)constructor.newInstance(new StringBuffer("abc"));
  24.                 System.out.println(str2.charAt(2));
  25.                
  26.                
  27.                 Reflectpoint pt1=new Reflectpoint(3,5);
  28.                 //fieldY的值是多少?fieldY不是对象身上的变量,而是类上,要用它去取某个对象上对应的值
  29.                 Field fieldY=pt1.getClass().getField("y");
  30.                 System.out.println(fieldY.get(pt1));
  31.         }

  32. }
复制代码
  1. package cn.baidu.com;

  2. public class Reflectpoint {
  3.         private int x;
  4.         private int y;
  5.         public Reflectpoint(int x, int y) {
  6.                 super();
  7.                 this.x = x;
  8.                 this.y = y;
  9.         }
  10. }
复制代码
运行时说 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