FROM: http://www.javaeye.com/topic/125752 java有三种数据类型:基本类型、null以及引用类型,我想请教各位大佬一个问题: java是用“ClassType 标识符 ”来定义一个标识符的,比如“String str”、“int i”等等,对于这些标识符,我的理解是java首先存储标识符本身,再根据ClassType决定是存储基本类型的值还是引用类型的内存地址,对于后者,上述两步便构成一个句柄。既然句柄存储的是标识符本身和对象的内存地址,那么句柄本身的数据结构应该是固定的,因此,我就想用一个简单的办法定义所有的引用类型的标识符: Object 标识符x; 当程序中需要明确“标识符x”的指向时,便利用以下的例子形式进行明确: 标识符x=new String ("This is a Example"); 令我高兴的是,java编译程序认可了这种做法:不管new后面是什么类型,皆通过无错(即使是自定义类),但是麻烦很快来了:
java 代码
请注意:i句柄已经定义成功并且也指向了一个new Integer(12)对象,因为可以成功地输出"12"。可是,就因为我首先是用Object定义的i,java竟然只允许我使用Object类定义的方法,这是为什么?java为什么要在运行期做出此种限制呢?
声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
| |
返回顶楼 | |
时间:2007-09-20
Object对象有intValue这个方法吗?
| |
返回顶楼 | |
时间:2007-09-21
上传类问题,父类是只能调用自己有声明过且被子类继承的方法.intValue这个方法是Interger子类后来添加的.所以Object是不能调用该方法的
| |
返回顶楼 | |
时间:2007-09-21
cast to Integer class, or invoke dynamically
| |
返回顶楼 | |
时间:2007-09-26
gordon@java 写道
cast to Integer class, or invoke dynamically
第二种方法就是利用了java的反射机制,对吧。 根据上例,“i.getClass()”返回一个Integer Class,这说明标识符i已经成功地指向了一个Integer实例,而不管预先将其定义为何种引用类型! 因此,我想,当需要引用一个未知的类的实例时,完全可以采用 “Object 标识符x”,然后指向该实例,再getClass()的方式解决 | |
返回顶楼 | |
时间:2007-09-26
cmbscqhd 写道
gordon@java 写道
cast to Integer class, or invoke dynamically
第二种方法就是利用了java的反射机制,对吧。 根据上例,“i.getClass()”返回一个Integer Class,这说明标识符i已经成功地指向了一个Integer实例,而不管预先将其定义为何种引用类型! 因此,我想,当需要引用一个未知的类的实例时,完全可以采用 “Object 标识符x”,然后指向该实例,再getClass()的方式解决 但是这样的话,你就不能利用到ide和compiler的错误检测功能了,出错几率会大些,比如把intValue写成了inValue,编译器是发现不了的,而且通过反射效率比直接调用会差些 |
初学者的疑问:关于java引用类型标识符
最新推荐文章于 2024-10-12 22:35:37 发布