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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张华廷 中级黑马   /  2012-6-19 15:46  /  1730 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张华廷 于 2012-6-20 12:00 编辑

nt[] al=new int[3];
int[][] a2=new int[2][3];
String [] a3=new Sting[]{"1","abc","dfg"};

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

3 个回复

倒序浏览
本帖最后由 耿鑫 于 2012-6-19 16:05 编辑

数组类型是不确定的,是看你定义的是什么类型的数组,如你描述的 int[] al=new int[3];是定义了一个int类型的数组,系统会为它分配连续的内存空间,来存储数据,显然这个数组的长度是3,但只是分配了空间,里边并没有值,因为并没有初始化,默认是0。int[][] a2=new int[2][3]也是同理,只不过是2维数组而已,何为2维数组?就是数组中的元素还是个数组。String [] a3=new Sting[]{"1","abc","dfg"};这个就是你定义了一个长度3的String(字符串类型)类型的数组,记住数组一旦定义了之后,长度是不能改变的。
这些只是基本数据类型的数组,将来你也可以定义其他对象类型的数组,User[] users = new User[5];  这就是定义了一个User类型的数组长度为5,前提是存在User这个类。

刚刚你提到反射,这个知识点很重要,用的地方很多,后边你会学到各种框架,底层的封装大多都是用反射实现的,学好反射对你理解程序执行流程,理解框架,源码分析有很大帮助,所以希望你能好好学习反射。

评分

参与人数 2技术分 +1 黑马币 +10 收起 理由
职业规划-刘倩老师 + 1
张华廷 + 10 赞一个!

查看全部评分

回复 使用道具 举报
数组有很多种类型,就看你怎么定义了,楼主第一个是定义的一个长度为3的int型一维数组;第二个是2行3列的int型二维数组;第三个是String类型的数组;
java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。 反射的主要用途有:
    (1)使用Assembly定义和加载程序集,加载在程序集清单中列出模块,以及从此程序集中查找类型并创建该类型的实例。
    (2)使用Module了解包含模块的程序集以及模块中的类等,还可以获取在模块上定义的所有全局方法或其他特定的非全局方法。
    (3)使用ConstructorInfo了解构造函数的名称、参数、访问修饰符(如pulic 或private)和实现详细信息(如abstract或virtual)等。
    (4)使用MethodInfo了解方法的名称、返回类型、参数、访问修饰符(如pulic 或private)和实现详细信息(如abstract或virtual)等。
    (5)使用FiedInfo了解字段的名称、访问修饰符(如public或private)和实现详细信息(如static)等,并获取或设置字段值。
    (6)使用EventInfo了解事件的名称、事件处理程序数据类型、自定义属性、声明类型和反射类型等,添加或移除事件处理程序。
    (7)使用PropertyInfo了解属性的名称、数据类型、声明类型、反射类型和只读或可写状态等,获取或设置属性值。
    (8)使用ParameterInfo了解参数的名称、数据类型、是输入参数还是输出参数,以及参数在方法签名中的位置等。

评分

参与人数 1黑马币 +12 收起 理由
张华廷 + 12 赞一个!

查看全部评分

回复 使用道具 举报

     反射为标准类提供的构造函数接入不能用于数组,而且数组没有任何可接入的字段,只有基本的 java.lang.Object 方法定义用于数组对象。数组的特殊处理使用 java.lang.reflect.Array 类提供的静态方法的集合。该类中的方法使您能够创建新数组,获得数组对象的长度,读和写数组对象的索引值。

下面显示了一种重新调整现有数组大小的有效方法。它使用反射来创建相同类型的新数组,然后在返回新数组之前,在老数组中复制所有数据。


通过反射来扩展一个数组:

public Object growArray(Object array, int size) {

    Class type = array.getClass().getComponentType();

    Object grown = Array.newInstance(type, size);

    System.arraycopy(array, 0, grown, 0,

        Math.min(Array.getLength(array), size));

    return grown;

}

评分

参与人数 1黑马币 +4 收起 理由
张华廷 + 4 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马