黑马程序员技术交流社区
标题:
关于数组的问题
[打印本页]
作者:
付玉光
时间:
2013-3-1 00:21
标题:
关于数组的问题
本帖最后由 付玉光 于 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 口的呀?
//不懂了,请教高人!!!!!:):)
作者:
张豪杰
时间:
2013-3-1 01:12
我承认我来混金币,同等高人解答
作者:
许鑫星
时间:
2013-3-1 15:13
你用int[].class得到的类由于没有构造方法,自然不能直接用newInstance来实例化,对于数组的反射java提供了专门的类,你可以改成
//java.lang.reflect.Array 用于数组的反射,参数第一个是数组元素类型,第二个是数组长度
int[] ints = (int[]) Array.newInstance(int.class, 2);
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2