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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 付玉光 中级黑马   /  2013-3-1 00:21  /  1083 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 付玉光 于 2013-3-1 00:26 编辑

我知道数组是一个引用数据类型,也是一个类,但我无意中总感觉它跟其它的

类不一样,特别的另类,比如:枚举也是一个类,它里可定义构造方法,

抽象方法,普通方法,成员变量等。而注解很像接口(其实它就是一个接口),

它里的属性很像方法等,这些我都还能勉强理解,因为它们都有相似

的地方,而对于数组这种类,我是真的感觉到它奇怪的到不能行,
一个字屌!

以下是我认为它屌的原因:

①它作为一个类,在形式上居然没有类成员(应该有一个length属性),
   和类的声明,难道是都封装到JVM中了?

②从它定义数组的格式上就和其它类new对象的格式不一样。

③所有具有相同元素类型和维数的数组都共享它的 Class 对象。

//想到了反射,用反射来了解一下它。
class Demo3{
        public static void main(String args[])throws Exception{

                //运行这行代码后居然产生了InstantiationExceptio,查看该异常发现说
                //当应用程序试图使用 Class 类中的 newInstance 方法创建一个类的实例,
                //而指定的类对象无法被实例化时,抛出该异常。
                //难道它用反射的方式都不能创建吗?   真是不得了呀!!!!!

                //int[] i = (int[])int[].class.newInstance();
                //System.out.println(i);

                //于是我自己定义了一个数组,然后试图通过
                //反射来了解该数组类中的信息。
                int[] i = new int[5];

                //运行测试后发现
                //该数组实现了这两个接口 Cloneable 、 Serializable。
                System.out.println("--------------打印接口方法----------");
                Class[] clas  = i.getClass().getInterfaces();
                for(Class c : clas)
                        System.out.println(c);

                //它没有构造方法
                System.out.println("--------------打印构造方法----------");
                Constructor[] cs  = i.getClass().getConstructors();
                for(Constructor c : cs)
                        System.out.println(c);

                //它中的方法都是Object中的
                System.out.println("--------------打印方法----------");
                Method[] ms  = i.getClass().getMethods();
                for(Method m : ms)
                        System.out.println(m);

                //它没有字段,
                System.out.println("--------------打印字段----------");
                Field[] fs  = i.getClass().getFields();
                for(Field f : fs)
                        System.out.println(f);
        }
}

//居然使用反射不能创建它的对象。

//使用反射返回空字段,也就是说它没有length属性?它有呀。

//它继承自Object,这没错,但它什么时候实现了Cloneable 、 Serializable 口的呀?


//不懂了,请教高人!!!!!:):)


评分

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

查看全部评分

2 个回复

倒序浏览

回帖奖励 +6

我承认我来混金币,同等高人解答
回复 使用道具 举报
你用int[].class得到的类由于没有构造方法,自然不能直接用newInstance来实例化,对于数组的反射java提供了专门的类,你可以改成
  1.                 //java.lang.reflect.Array 用于数组的反射,参数第一个是数组元素类型,第二个是数组长度
  2.             int[] ints = (int[]) Array.newInstance(int.class, 2);
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马