Java中的数组
来源:互联网 发布:抢票用什么软件好 编辑:程序博客网 时间:2024/06/05 00:33
下面主要以Java中一维数组为例,说明Java中数组的用法。
先看一段代码:
public class ArrayTest {private int[] arr;public ArrayTest(int[] a){int i; for(i = 0; i < a.length; i++){arr[i] = a[i]; //对成员数组初始化赋值}}public static void main(String[] args) {int[] a = {1,2,3,4}; //+++++++++++++数组初始化ArrayTest aTest = new ArrayTest(a);}}
*** int[ ] a = {1,2,3,4}; 这是Java提供的一种初始化数组的简化形式,后面会看到还有其它的方式。
对这段代码使用javac可以正常编译,当用java命令执行时会出现java.lang.NullPointerException。如果你对java很熟悉的话,很容易找出导致该异常的原因:arr数组变量只是声明没有被初始化为一个真正的数组,即此时不允许使用 arr[i] 对数组取值。如何修正?
方法一:
public class ArrayTest {private int[] arr;public ArrayTest(int[] a){/*int i; for(i = 0; i < a.length; i++){arr[i] = a[i]; //对成员数组初始化赋值}*/arr = a; // +++++++++++++数组赋值}}
方法二:
public class ArrayTest {private int[] arr = new int[20]; // +++++++++++++声明的同时初始化public ArrayTest(int[] a){int i; for(i = 0; i < a.length; i++){arr[i] = a[i]; //对成员数组初始化赋值}} //...}
上面给出了另外两种初始化数组的方式。
- 方法一,Java允许将一个数组变量拷贝给两个数组变量,此时,两个变量arr和a引用了同一个数组,使用其中任何一个数组变量都可对原始数组进行改变。
- 方法二,这是Java中比较常用的数组初始化方式。声明变量的同时,使用new操作符创建数组并赋值给数组变量。new操作符必须指明数组的大小,所以此处我给出了一个常量值,这也许不是一种好的规范,为此,可以把初始化语句放到构造中:
public class ArrayTest {private int[] arr;public ArrayTest(int[] a){arr = new int[a.length]; //+++++++++++++使用了a的长度int i; for(i = 0; i < a.length; i++){arr[i] = a[i]; //对成员数组初始化赋值} //....}
Java数组 vs C++数组(指针)
“Java数组与C++数组在堆栈上有很大不同,但基本上与分配在堆(heap)上的数组指针一样。也就是说,int[] a = new int[100]; //java不同于int a[100]; //C++而等同于int* a = new int[100]; //C++Java中的 [ ] 运算符被定义为检查数组边界,而且没有指针运算,即不能通过a加1得到数组的下一个元素。” ----引自《Java核心技术 卷1:基础知识》p77
在此针对对 “Java中的 [ ] 运算符被定义为检查数组边界” 这句话写一下自己的理解,还是通过代码进行说明:
int* a = new int[100];cout<<a[100]; // out of bound??
使用g++编译、执行都不会提示任何错误,并且可以正常输出a[100]的值。
// JAVAint a[100];System.out.printf("%d",a[100]); // out of bound??
javac时编译器同样不会报错,java执行时抛出异常 java.lang.ArrayIndexOutOfBoundException。这实际上是Java比C++“安全”的一个例子,也是C++的“陷阱”之一。
- Java中的数组
- java中的数组
- 初识JAVA中的数组
- java中的数组声明
- 理解java中的数组
- java中的对象数组
- Java中的数组
- java中的数组
- Java中的数组学习
- Java中的数组
- 浅谈java中的数组
- Java中的数组
- Java中的数组
- Java中的数组
- java中的数组
- Java中的异常,数组
- Java中的数组解析
- java中的二维数组
- c++继承经典例子 .
- zoj 1796
- 遍历操作系统中的所有文件
- zoj 1002
- 传递动态内存
- Java中的数组
- 快速有效的解析大型XML文件
- C#中@的用法
- 关于Android不能正确发送User-Agent的解决方法
- 项目经理10大成功态度
- QSplitter 分割条默认位置怎么修改
- 项目管理成功的20个秘密
- Oracle与Mysql自动增长列(id)的区别
- winCE嵌入式开发学习(二)--winCE的体系结构和功能