Java中一维数组定义及初始化 int []a; a[]={1,2,3}; 是错的,为什么

如题所述

如果你熟悉C/C++,Java数组的工作原理与它们不同。Java中的数组是对象,这就意味着与C++中的数组的根本不同.
1、数组不是集合,它只能保存同种类型的多个原始类型或者对象的引用。数组保存的仅仅是对象的引用,而不是对象本身。数组声明的两种形式:一、int[] arr; 二、int arr[]; 推荐使用前者,这是一个int数组对象,而不是一个int原始类型。
2、数组本身就是对象,Java中对象是在堆中的,因此数组无论保存原始类型还是其他对象类型,数组对象本身是在堆中的。
4、在数组声明中包含数组长度永远是不合法的!如:int[5] arr; 。因为,声明的时候并没有实例化任何对象,只有在实例化数组对象时,JVM才分配空间,这时才与长度有关。
5、在数组构造的时候必须指定长度,因为JVM要知道需要在堆上分配多少空间。例:int[] arr = new int[5];
7、一维数组的构造。形如:String[] sa = new String[5]; 或者分成两句:String[] sa; sa = new String[5];
8、原始类型数组元素的默认值。对于原始类型数组,在用new构造完成而没有初始化时,JVM自动对其进行初始化。默认值:byte、short、 int、long--0 float--0.0f double--0.0 boolean--false char--'"u0000'。(无论该数组是成员变量还是局部变量)
10、对象类型的数组虽然被默认初始化了,但是并没有调用其构造函数。也就是说:Car[] myCar = new Car[10];只创建了一个myCar数组对象!并没有创建Car对象的任何实例!
11、多维数组的构造。float[][] ratings = new float[9][]; 第一维的长度必须给出,其余的可以不写,因为JVM只需要知道赋给变量ratings的对象的长度。
12、数组索引的范围。数组中各个元素的索引是从0开始的,到length-1。每个数组对象都有一个length属性,它保存了该数组对象的长度。(注意和String对象的length()方法区分开来)
13、Java有数组下标检查,当访问超出索引范围时,将产生ArrayIndexOutOfBoundsException运行时异常。注意,这种下标检查不是在编译时刻进行的,而是在运行时!也就是说int[] arr = new int[10]; arr[100] = 100; 这么明显的错误可以通过编译,但在运行时抛出!
Java中的数组中既可以存储基本的值类型,也可以存储对象。对象数组和原始数据类型数组在使用方法上几乎是完全一致的,唯一的差别在于对象数组容纳的是引用而原始数据类型数组容纳的是具体的数值。在讨论关于数组的问题时,一定要先确定数组中存储的是基本值类型还是对象。特别是在调试程序时,要注意这方面。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-01-05
java中数组不是一个基本数据类型,想这样定义的话,只能int []a = new int[3];a[0]= 1;a[1] = 2; a[2]= 3;这是先声明,再赋值。
第2个回答  2014-01-05
java 里面定义变量格式
类型 变量名
int []a int 为类型 ,[]a为变量名,请查看变量名命名规则,[]中括号不能作为变量名
第3个回答  2014-01-05
Java语法的规定就是这样。在声明中,= 后面的内容叫做initializer,在赋值表达式中, = 后面应该跟表达式。而Java并不把{1,2,3}看作是表达式。其实我认为Java允许你的第一种写法是尽量向C靠拢。 其实在第一种写法的数祖初始化时,作了两件事情:创建数组对象,将数组对象的引用赋给标识符。而在赋值表达式中,就只是赋值,而不是创建数组。如果需要创建数组,需要使用数组创建表达式。简单说就是用new。你可以这样写:public int[]a;a=new int[]{1,2,3};
第4个回答  2014-01-05
int[] a = {1,2,4};追问

我知道应该这么写。。但是我想知道像上面这样为什么错

追答

像上面那样写的话就相当于定义变量了 而变量是不能以“[”来开头的

追问

什么叫 不能以“[”来开头的

追答

变量名的定义只能以字母开头

追问

那写int a[]就对了么

追答

追问

那如果不初始化int []a;就不算变量么

追答

不管初始化不初始化,它都是定义变量,所以还是会报错的

追问

可是一维数组的定义格式这两种都有啊

再比如int[] a = {1,2,4};为什么[]a就对

追答

是两种 int[] a; 在变量名前面是有个空格的
还有就是这种 int a[] 这两种都是对的

追问

那加空格我最开始的问题就对了么

追答

总之 定义数组,就两种方式
int[] a;
int a[];
而变量名就是a
继续操作就是
a[0] = 1;

本回答被提问者采纳
相似回答