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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© yy505032788 中级黑马   /  2014-12-2 21:48  /  1531 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

        今天是开学的第五天,之前自学就没有弄明白这里,然后后面的遍历就学得很渣渣……       首先必须理解,数组就是一个容器,可以把相同类型的数据都存到里头,能存储基本类型和引用类型的数据;还可以把一组存放的相同类型数据的容器放到更大的容器里面,这个大的容器就是二维数组。
       理解数组定义是从0开始编号的,遍历的时候注意不要越界。今天讲了几种数组的定义格式:
       一维数组:      
                       1.数据类型 [ ] 数组名 = new 数据类型 [数组长度];
                       2.数据类型 [ ] 数组名 = new 数据类型 {元素1,元素2...};
                       3数据类型 [ ] 数组名 ={元素1,元素2...};
       二维数组:
                       1.数据类型 [ ] [ ] 数组名 = new 数据类型 [x] [y];
                       2.数据类型 [ ] [ ] 数组名 = new 数据类型 [x] [ ];
                                   数组名[0] = new 数据类型 [a];
                                   数组名[1] = new 数据类型 [b];
                       3.数据类型 [ ] [ ] 数组名 = {{元素1,元素2... },{元素1,元素2...  },{ 元素1,元素2... }...};
        今天做练习,如下代码弄不懂为什么报错,还是Java明确定义只能用这几种格式来给数组赋值:
                              int[][] array = new int[4][];
                             array[0] = {80,90,85,78,90};
                             array[1] = {95,88,82,80,81};
                             array[2] = {52,82,81,75,75};
                            array[3] = {70,75,78,72,88};       这样定义,为什么会报错,只是按自己理解的格式来定义的,求大神指点。
        再一个就是栈和堆,栈是存储基本数据类型的局部变量,访问前必须要初始化,否则编译报错,当数据使用完,所占空间会自动释放;堆通过new关键字实例化,数据都会自动初始化,整数型初始值:0,浮点型初始值:0.0,空字符初始值:\u0000,布尔型初始值:false,引用初始值:null。当引用类型的变量结束生命周期,堆内的对象空间不会立即清楚,JVM中的垃圾回收期会不定期扫描并清楚。



4 个回复

倒序浏览
总结的不错,总结了三种数组初始化的方式:
                      1.数据类型 [ ] 数组名 = new 数据类型 [数组长度];
                       2.数据类型 [ ] 数组名 = new 数据类型 {元素1,元素2...};
                       3数据类型 [ ] 数组名 ={元素1,元素2...};
那么变量赋值和初始化是有区别的,第三种形式只能用在数组初始化上,这也是从C/C++里继承过来的。
还有你用eclipse是,它会有提示错误提示,会提示为什么错。
回复 使用道具 举报
kerner 发表于 2014-12-2 22:39
总结的不错,总结了三种数组初始化的方式:
                      1.数据类型 [ ] 数组名 = new 数据类型  ...

我用的Editplus,提示Array_Dome.java:6: 错误: 非法的表达式开始
                array[0] = {80,90,85,78,90};
                           ^
Array_Dome.java:6: 错误: 不是语句
                array[0] = {80,90,85,78,90};
                            ^
Array_Dome.java:6: 错误: 需要';'
                array[0] = {80,90,85,78,90};
                              ^
Array_Dome.java:7: 错误: 需要']'
                array[1] = {95,88,82,80,81};
                      ^
Array_Dome.java:7: 错误: 需要';'
                array[1] = {95,88,82,80,81};
                       ^
Array_Dome.java:7: 错误: 非法的类型开始
                array[1] = {95,88,82,80,81};
                         ^
Array_Dome.java:7: 错误: 需要<标识符>
                array[1] = {95,88,82,80,81};
                          ^
Array_Dome.java:7: 错误: 需要';'
                array[1] = {95,88,82,80,81};
                            ^
Array_Dome.java:7: 错误: 非法的类型开始
                array[1] = {95,88,82,80,81};
                              ^
Array_Dome.java:7: 错误: 需要<标识符>
                array[1] = {95,88,82,80,81};
                               ^
Array_Dome.java:7: 错误: 需要<标识符>
                array[1] = {95,88,82,80,81};
                                  ^
Array_Dome.java:7: 错误: 非法的类型开始
                array[1] = {95,88,82,80,81};
                               按定义的规则,觉得没有错……
回复 使用道具 举报
yy505032788 发表于 2014-12-2 22:56
我用的Editplus,提示Array_Dome.java:6: 错误: 非法的表达式开始
                array[0] = {80,90,85,78,90};
                    ...

用集成开发环境,eclipse或者myeclipse,更加智能,会提示你为什么错了。
Array constants can only be used in initializers,数组内容只能用在初始化表达式上,这是语法规定。
为什么有这样的规定呢?
{1,3,4,5,6,7,8},它具体是什么样类型的数组? 是int short int byte char float这几个中哪一种数组?
比如在函数调用时:
void f(int [] x) {}
void f(short[] x){}
void f(float[] x) { }
void f(double[] x) { }

f({1, 2, 3, 4});请问这个是调用那个函数?
回复 使用道具 举报
kerner 发表于 2014-12-2 23:31
用集成开发环境,eclipse或者myeclipse,更加智能,会提示你为什么错了。
Array constants can only be u ...

今天问老师了  说不能这样给一维数组赋值
要定义为array[0]=new int[]{元素1,元素2..};
这样就不会报错,已调试了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马