这里写目录标题
数组越界错误
一个小小的疏忽引出一个未曾见过的错误
这个错误出现在编译通过之后,错因
是数组在被引用时超过了原本定义的长度,由于if后的双引号而使得s一直增大
public class Throw
{
public static void main(String[] agrs)
{
int i;
int s=0;
int[] oldArr={1,3,4,5,0,0,6,6,0,5,4,7,6,7,0,5};
for(i=0;i<oldArr.length;i++) //计算0的个数
{
if(oldArr[i]==0)
s++;//引起错因的地方时if后多出了;
}
int[] newArr=new int [oldArr.length-s]; //新数组的长度为旧数组长度减去0的数量
int j=0; //j不能放在for循环内,否则会一直为0
for(i=0;i<oldArr.length;i++)
{
if(oldArr[i]!=0) //将旧数组中的非零元素给新数组
{
newArr[j]=oldArr[i];
j++;
}
}
for(i=0;i<newArr.length;i++)
System.out.print(newArr[i]);
}
}
二维数组
初始化
在二维数组的初始化时不能在[]定义行或列中的任何一个来确定数组的长度
而是通过赋值来给定数组的大小
- 静态赋值(通过参数来确定):例如int b[][]={{1,2,3},{4,5,6},{7,8,9}}为一个3行3列的二维数组
- 动态赋值(给定大小而不赋给参数):例如int b[][]=new int[i][j]或int b[][]=new int[i][].注意可以省列但不可省行
char型数组
初始化
由一个简单的选择题引起的测试
- char型数组同样不能在[]内直接定义数组长度
- char数组中的每个参数需用单引号‘’包围
不能是双引号""
不能没有
数组保存位置
- Java在内存1中会先将class存入
方法区内存
保存代码片段(值得一提的是String作为特殊常量保存在常量池中,而常量池在JDK1.8后由方法区内存转到堆中) - 数组对象是储存在
堆
内存当中的. 栈(stack)
遵循后进先出规则时弹栈出的是所存储的对象的引用(内存地址).
可参照下图
图片引用于https://blog.csdn.net/Hurricane_m/article/details/89504445
做题小结
- 构造数组时必须指定长度,因为JVM需要知道该为它分配多少空间
- 数组复制时,"="传递的是数组的位置
- Java要求所有的数组元素具有相同的数据类型。
未完
在付出更多汗水收获更多知识后应该保持更新,无知需要努力弥补
内存可分为栈,堆,方法区内存(Java) ↩︎