A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 奔跑的二叉树 中级黑马   /  2013-9-17 11:17  /  1627 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  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的值是多少 ?那句话不是很理解,大神们能详细说下吗



评分

参与人数 1技术分 +1 收起 理由
黄兴旺 + 1

查看全部评分

3 个回复

倒序浏览
我觉得FieldY应该是字节码的地址吧!!
回复 使用道具 举报
首先,反射你可以看一下我写的那篇文章,我最近也看到了反射
http://xizihux.blog.163.com/blog/static/2258950232013817102425508/

其次,fieldy似乎只是存的是该类中被指定的成员变量的字节码, Field据我猜测是个反射点,并不是反射整个类.
Constructor 才是反射整个类.  你的那个错误可能是导包问题,
import java.lang.reflect.Constructor;   后面的Constructor改成* ,  
还有毕姥爷说过, 一次出现一大串错误,没别的,先检查有没有忘记大事了.....

评分

参与人数 1技术分 +1 收起 理由
EYE_SEE_YOU + 1

查看全部评分

回复 使用道具 举报
访问或修改私有成员或方法被称为暴力反射。这时候记住getDeclared。。。和setAccessible(true)
回复 使用道具 举报 1 0
您需要登录后才可以回帖 登录 | 加入黑马