黑马程序员技术交流社区
标题:
javaBean问题求解
[打印本页]
作者:
沈文杰
时间:
2013-2-28 11:37
标题:
javaBean问题求解
本帖最后由 沈文杰 于 2013-2-28 20:47 编辑
javaBean问题
public class IntroSpectorTest {
public static void main(String[] args) throws Exception{
ReflectPoint pt1 = new ReflectPoint(3,5);
//定义属性值。
String propertyName = "x";
PropertyDescriptor dp = new PropertyDescriptor(propertyName,pt1.getClass());
Method methodGetX = dp.getReadMethod();
Object retVal = methodGetX.invoke(pt1);
System.out.println(retVal);
}
}
//retVal不是Object类型的么?为什么打印结果是3而不是一个内存地址hash值我们复写了ReflectPoint中的toString
方法,但是这里调用的不是Object中的toString方法么?
同理看下面
public class StringTest {
public static void main(String[] args)
{
String s = "abc";
Object obj = "abc";
System.out.println(s);
System.out.println(obj);
//运行结果都是abc
}
}
//Object obj = "abc";这里是不是用到了自动装箱功能?为什么打印的出来的是abc,而不是内存地址hash值
作者:
李挺
时间:
2013-2-28 12:28
1、Object retVal = methodGetX.invoke(pt1);这句话是调用反射出来的类的方法,这个方法返回值是个int型,用object接收下,避免报错
然后System.out.println(retVal);是打印这个参数的值,而不是ReflectPoint的值,所以你复写了ReflectPoint的toString方法当然没效果
2、其实String这个类对toString()和hashCode() 这2个方法都有复写,你是得不到地址值的。
虽然你使用的父类的引用,但是在打印的时候,由于子类有复写方法,使用的还是子类的toString()方法
作者:
谢洋
时间:
2013-2-28 14:40
Object obj = "abc";中的字符串"abc",是String类的一个实例对象,
这条语句的意思是:把Object的一个引用名obj指向"abc"字符串,也就是说obj这地址上的内容是"abc"的地址;
那么当执行 System.out.println(obj);执行"abc"这个字符串中的toString方法
1、自动装箱是发生在基本类型与基本类的引用类型(基本类型的包装类型),
API文档:Integer 类在对象中包装了一个基本类型 int 的值。Integer 类型的对象包含一个 int 类型的字段。
2、你所说就应该是向上转型而不装箱,它发生在子父类之间;
地址.png
(5.88 KB, 下载次数: 45)
下载附件
2013-2-28 14:39 上传
作者:
沈文杰
时间:
2013-2-28 20:47
哦 ,谢谢你们的回答,我懂了,
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2