黑马程序员技术交流社区

标题: 数组反射遇到的问题 [打印本页]

作者: 李月    时间: 2012-4-27 19:42
标题: 数组反射遇到的问题
我听了张老师说了两遍我也没有听明白
int[] al=new int[3];//为什么不能这样写Object[] obj=a1
int[][] a2=new int[2][3];//这个为什么就能这样写Object[] obj=a2
String [] a3=new Sting[]{"1","abc","dfg"};//这个为什么就能这样写Object[] obj=a3

同样都是数组为什么呢?
还有,我们什么时候能用到反射呢?

反射真的不好理解。
作者: 崔仁军    时间: 2012-4-27 20:42
1.老师定义的那个是基本数据类型数组   你定义的那个是引用数据类型     
2.老师定义的那个数组可以直接放入基本数据类型的数    而你定义的那个要想放入基本数据类型的数 必须要先进行装箱 取出来时还要进行拆箱才能用
3 String [] a3=new Sting[]{"1","abc","dfg"};  string 本来就是object类型的所以行
作者: prospect    时间: 2012-4-27 20:53
基本类型的一维数组可以被当做Object类型使用,不能当做Object[]类型使用;非基本类型的一维数组,既可以当做Object类型使用,又可以当做Object[]类型使用。
Object[] 表示有一个数组,数组里面装的是Object。
作者: 丁佼    时间: 2012-4-27 21:06
本帖最后由 丁佼 于 2012-4-27 21:07 编辑

数据类型大范围上分为两种:
1、基础数据类型:byte、short、int、long、float、double、char、boolean
2、引用数据类型:class、interface、数组[]
基础数据类型不能用Object代替,引用数据类型可以用Object代替。

上面的int[]数组内部是基本数据类型,也就无法用object代替,
int[][]是一个数组的数组,可以看做(int[])[],内部是数组,所以可以用object代替,
String[]本身就是类,一个引用数据类型,内部数据对应于上面数据类型中的class,所以也可以用object代替;

=============================================================

反射的用处是搭建框架,目前的话了解就好,以后做项目到用的时候,自然会想起,信手拈来。。。那怕拈不来,边做边查书,据说是一个老程序员的日常状态。关键是要知道有这么个东西。。

简单看一下反射。
要知道一个类,叫做Class类,这是一个用来描述 类 的特性的类;
然后有个类叫做Method类,这是一个用来描述 函数 的类;
最后有个类叫做Field类,用来描述 成员变量 的类;
然后通过以上三个类就可以将任何一个对象的任何一个属性提取出来,就是反射了。
具体使用。。。。我也不知道。。工作中要用的时候自然就自己想用了。。。
作者: 亚男    时间: 2012-4-28 02:32
第一个问题,object指的是所有类的父类任何类都可以继承它,包括引用类型,一维数组不算引用类型,但数组的数组就是了,所以可以如此定义
第二个问题,比如在写程序时要用到其他程序的内容可有没原代码这时就用反射.
作者: 张小庆    时间: 2012-4-28 08:08
其实就一个道理,就是传进Object数组后会将其打散,而第一个打散后就是基本数据类型了,所以就不行啊,后边的也就能理解了吧~~
作者: 根号5    时间: 2012-4-28 08:21
这就是原生数据类型的问题 :
第一个是一维数组,里面放的是int 类型的数据,8大原生数据类型不是能转换为Object类型的,
第二个二维数组 ,可以理解为数组里面又存放了一个数组也就是  (int[])  [],而括号中的int[]  是数组类型,而数组类型可以转换为object类型(也就是说除了那8大原生数据类型(byte,short,int,long,float,double,char,boolean)外其余的都可以理解为Object类型);
第三个是数组里面存放的是字符串类型的数据,String类型的数据不是原生数据类型,所以嘛。。。楼主你懂得
作者: 罗旭维    时间: 2012-4-28 08:28
在java里除了8个基本类型外其他的都是一个类。
所以“int[] al;”里int[]是一个类,但它的元素类型是int,是一个基本类型不是一个类,
所以al是int[]类的一个对象不是一个对象数组!你可以这样赋值:Object obj = al。
而“int[][] a2”可以理解为a2数组的元素为int[]类的对象。所以你可以这样赋值:Object[] obj=a2。
虽然“String [] a3”是一个一维数组,但这个数组的元素是String类的对象。所以你也可以这样赋值:Object[] obj=a3。



作者: 邵中国    时间: 2012-4-28 12:38
1.jvm默认数组中的基本数据类型不为对象,数组中基本类型的包装类
如:int的包装类Integer为Object
2.二维数组可以理解为数组中的数组,一维数组是Object,那二维数组
就可以是Object[]
3.String[]中装的是String,他的父类就是Object,可以作为对象

反射解决的问题就是框架,再往后你就看到了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2