1.数组---相同类型数据的集合,定义很简单 type[] 变量名=newtype[数组中元素的个数];
数组初始化
数组初始化
比如int[] array = new int[5]; 这一点很重要,不能直接定义int[5] array;c语言可以,但是java不行,必须用new的方式来进行定义。然后再 int[0]=1; int[1]=2;.......
还有一种方式就是 int[] array ={1,2,3,4,5};这样就直接进行了初始化并且规定了数组的大小。
其实呢,我觉得最好是先定义对象,再动态初始化具体的值。
2.array.length是一个属性,不是方法,所以后面无括号。 a[n]的长度为n-1。这里需要注意的是,length表示的是数组能容纳的元素个数,并不是实际保存的元素个数。
3.main方法中有一个String[]args,之前我从来没有去探究过,今天也只是看了一个使用,好像是在命令行参数里面输入字符串,就会存放在args这个字符串数组中。
4.数组的长度一旦确定,就不能再更改。
数组的深入研究:
1.持有对象的主要方式是数组和容器,在java中,数组是效率最高的。通常情况下为了使空间的分配更加自如,都会选择定义一个ArrayList而不是数组,但是其效率远远低于数组。怎么说呢,对于普通的功能程序,不必考虑太多效率问题,方便第一。
2.数组可以持有基本数据类型,也可以持有对象,而容器不能持有基本数据类型,只能持有其包装类,比如如果你想将int类型的数值装进容器里的话,就要先将int类型的数据封装成为Integer类型的对象,然后才能放在容器里。但是从JAVA 1.5以后,对基本类型有了自动包装功能,所以容器加上泛型,使得对于基本类型的操作更为简便。
3.其实现实中容器已经可以具有和数组一样的功能,并且比数组方便很多,有更多的方法,当然数组主要是和ArrayList相似性最大。数组比起容器来说唯一仅存的优势就是效率。解决一般化的问题,用容器,别用数组。
其实呢,我觉得最好是先定义对象,再动态初始化具体的值。
2.array.length是一个属性,不是方法,所以后面无括号。 a[n]的长度为n-1。这里需要注意的是,length表示的是数组能容纳的元素个数,并不是实际保存的元素个数。
3.main方法中有一个String[]args,之前我从来没有去探究过,今天也只是看了一个使用,好像是在命令行参数里面输入字符串,就会存放在args这个字符串数组中。
4.数组的长度一旦确定,就不能再更改。
数组的深入研究:
1.持有对象的主要方式是数组和容器,在java中,数组是效率最高的。通常情况下为了使空间的分配更加自如,都会选择定义一个ArrayList而不是数组,但是其效率远远低于数组。怎么说呢,对于普通的功能程序,不必考虑太多效率问题,方便第一。
2.数组可以持有基本数据类型,也可以持有对象,而容器不能持有基本数据类型,只能持有其包装类,比如如果你想将int类型的数值装进容器里的话,就要先将int类型的数据封装成为Integer类型的对象,然后才能放在容器里。但是从JAVA 1.5以后,对基本类型有了自动包装功能,所以容器加上泛型,使得对于基本类型的操作更为简便。
3.其实现实中容器已经可以具有和数组一样的功能,并且比数组方便很多,有更多的方法,当然数组主要是和ArrayList相似性最大。数组比起容器来说唯一仅存的优势就是效率。解决一般化的问题,用容器,别用数组。
4.对象数组和基本类型的数组在使用上几乎是相同的,唯一的区别就是对象数组保存的是引用,而基本类型数组直接保存的是基本类型的值。
5.与C/C++不同的一点,java中的方法的返回类型可以直接是数组,不用担心内存泄露。
6.数组在内存中的布局分为2种,但是无论是哪一种,数组和对象一样,其值都是在堆内存中分配空间存储,而不是栈内存。
第一种,如果数组里面装的是基本类型,那么你定义一个数组,在栈内存为这个引用分配一块空间,指向堆内存,你定义了多少个元素就分配多少块内存。元素的初始值均为0,如果是char型的,就是(char)O,如果是boolean型的,就是false。
第二种,数组里面装的是对象(其实是对象的引用),那么在栈内存里面还是为数组对象的引用先分配一块空间,然后指向堆内存里面的n小块内存,每一小块内存仍然指向堆内存里面的一个对象空间。元素的初始值均为null。