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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 黄玉昆 于 2013-3-16 12:55 编辑
  1.   int[] a = new int[3];
  2.                 Object obj = new Object[]{"abc",1};
  3.                 System.out.println(a.getClass().getName());//1,结果:[I
  4.                 System.out.println(obj.getClass().getName());//2,结果:[Ljava.lang.Object;
  5.                 System.out.println(obj[0].getClass().getName());//3,编译不通过
复制代码
在看张老师的数组反射的视频中,最后说到如何得到数组中元素的类型的问题,他说无法得到这个数组的类型,而只能得到数组中某个元素的类型。我对此有点怀疑,就试验了一下,结果不解:
在上面打印第1句和第2句都是行得通的,也就是说可以得到数组的类型,结果如上所示,但是第三句就报错了,说明不能得到某个元素的类型。
这是为什么呢?难道不能获得数组中某个元素的类型吗?还是我这种获取方式是错误的?求解

8 个回复

倒序浏览
我觉得无法获取到
因为数组中每个具体元素的类型都可以不同,需要取出每个元素对象,然后再对各个对象进行判断,例如:
  1. Object[] x = new Object[]{"abc",Integer.Max}
  2. Class clazz1 = x[0].getClass();
  3. Class clazz2 = x[1].getClass();
复制代码
每个具体元素的类型都可以不同

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
class Test4 {
        public static void main(String[] args) {

                int[] a = new int[3];
                   //                Object [] obj = new Object[] { "abc", 1 };   这是你原来的
                Object [] obj = new Object[] { "abc", 1 };  //你的  obj必须是一个数组啊,Object [], 而不是Object

                System.out.println(a.getClass().getName());// 1,结果:[I

                System.out.println(obj.getClass().getName());// 2,结果:[Ljava.lang.Object;

                // System.out.println(obj[0].getClass().getName());//3,编译不通过
                System.out.println(obj[0].getClass().getName());//请注意   你的  obj必须是一个数组啊,Object [], 而不是Object
        }

}

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1 赞一个!

查看全部评分

回复 使用道具 举报
itserious 发表于 2013-3-16 12:38
class Test4 {
        public static void main(String[] args) {

嗯啊,你说的没错,谢谢
回复 使用道具 举报
getClass()是一个方法,所有的类都从Object中继承到了此方法。
只有类的对象才能调用此方法。

obj[0]就是一个字符串常量,不是字符串对象。常量没有方法可调用。

a是int[]这个类型的对象,obj是Object[]这个类型的对象,所以能调用getClass()方法。
回复 使用道具 举报
why540804583 发表于 2013-3-16 12:56
getClass()是一个方法,所有的类都从Object中继承到了此方法。
只有类的对象才能调用此方法。

字符串常量不也是一个字符串吗?为什么它不能使用字符串的方法?
  1. public class Demo {
  2.         public static void main(String[] args) {
  3.                 final String P = "abc";
  4.                 char s = P.charAt(2);
  5.                 System.out.println(s);
  6.         }
  7. }
复制代码
你可以测验一下,是可以调用方法的。
回复 使用道具 举报
黄玉昆 发表于 2013-3-16 13:09
字符串常量不也是一个字符串吗?为什么它不能使用字符串的方法?你可以测验一下,是可以调用方法的。 ...

我手头没有工具,
你试一下这样写:"abc".charAt(2);看看会不会报错
回复 使用道具 举报
黄玉昆 发表于 2013-3-16 13:09
字符串常量不也是一个字符串吗?为什么它不能使用字符串的方法?你可以测验一下,是可以调用方法的。 ...

不好意思,搞错了,可以用。
回复 使用道具 举报
黄玉昆 黑马帝 2013-3-16 13:30:35
9#
why540804583 发表于 2013-3-16 13:18
我手头没有工具,
你试一下这样写:"abc".charAt(2);看看会不会报错
  1. public class Demo {
  2.         public static void main(String[] args) {
  3.                 final String P = "abc";
  4.                 char s = P.charAt(2);
  5.                 char x = "abcd".charAt(1);
  6.                 System.out.println(x);
  7.         }
  8. }
复制代码
既然上面的那个变量都可以调用了,这个对象当然也可以调用了啊,即使他是一个常量,但是它仍然是一个对象,那么他就可以调用自身的方法。回答别人问题一定要把自己有把握的告诉提问者,如果你也不确定,这样很容易让别人误导的。希望对你有帮助,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马