东莞市外贸网站建设公司,网站网警备案流程,杭州大型网站建设,网站建设职业怎么样1、一维数组
(1)初始化
①静态初始化#xff1a;只指定元素#xff0c;不指定长度
new 类型[] {元素1,元素2,...}
int[] intArr;
intArr new int[] {5,6,7,8};
②动态初始化#xff1a;只指定长度#xff0c;不指定元素
new 类型[数组长度]
int[] princes new in… 1、一维数组
(1)初始化
①静态初始化只指定元素不指定长度
new 类型[] {元素1,元素2,...}
int[] intArr;
intArr new int[] {5,6,7,8};
②动态初始化只指定长度不指定元素
new 类型[数组长度]
int[] princes new int[5];
【注意】
- 如果数组元素的类型是基本类型中的整数类型byte、short、int和long则数组元素的值为0
- 如果数组元素的类型是基本类型中的浮点类型float、double则数组元素的值为0.0
- 如果数组元素的类型是基本类型中的字符类型char则数组元素的值为\u0000
- 如果数组元素的类型是基本类型中的布尔类型boolean则数组元素的值为false
- 如果数组元素的类型是引用类型类、接口和数组则数组元素的值为null
(2)使用数组
①length
该属性返回数组的长度
②访问数组元素
索引从0开始最后一个元素的索引是length-1
使用的元素超出数组长度就会导致ArrayIndexOutOfBoundsException数组索引越界异常
③遍历数组
④foreach循环遍历数组
数组有几个元素该循环就执行几次变量会自动、依次等于每个元素
foreach循环只能访问数组元素的值不能修改数组元素的值。
for(元素类型 变量名 : 数组名)
{//可通过变量名访问每个元素
}
int[] iArr new int[] {20,30,40,50};
for (int it : iArr) {System.out.println(it);
}
建议永远不要在foreach循环中修改循环计算器的值
(3)深入理解数组
【Java程序必须要使用虚拟机Virtual Machine有些地方也称之为JVM才能运行】
Java程序的内存可分为
①堆(heap)内存Java虚拟机启动时分配的一块永久的、很大的内存区。堆内存只有一块。
堆内存中对象如果没有引用变量指向它那么它就会变成垃圾等待VM的垃圾回收器来回收。
public class 内存中的数组 {public static void main(String[] args) {//分配800个字节long[] arr new long[100];arr[99] 33;System.out.println(arr[99]);}
} 由于long数组需要分配800个字节而虚拟机只有258个字节所以报错“初始堆内存给的太少了”
②栈(stack)内存每次方法运行分配一块临时、很小的内存区。每个方法都有自己对应的栈区方法结束时对应的栈区就会被回收。
- 在方法中定义的、局部变量不管是什么类型都放入对应的方法栈区。
- new出来的对象都放在堆内存。
引用类型的变量是变量对象是对象两者是不同的东西。
例如
int[] iArr new int[4];
iArr存在栈内存中new出来的int[4]存在堆内存中。
【变量赋值的区别】
- 基本类型的赋值直接将该值存入变量所在内存。
- 引用类型的赋值将该对象所在第一个内存单元的编号内存地址存入变量。
下面使用代码图来演示
public class 内存中的数组 {public static void main(String[] args) {//基本类型的赋值int it 20; //4个字节//iArr在栈内存new出来的数组对象在堆内存int[] iArr new int[4]; //数组占16个字节}
} public class 内存中的数组 {public static void main(String[] args) {//基本类型的赋值int it 20; //4个字节//iArr在栈内存new出来的数组对象在堆内存int[] iArr new int[4]; //数组占16个字节System.out.println(iArr.length);//再次对引用变量赋值让iArr重新指向一个新的数组iArr new int[] {20,10};System.out.println(iArr.length);}
} 【验证自己是否真的理解基本类型和引用类型】
阅读一下代码说出每个输出语句的输出结果。
public class 基本类型和引用类型 {public static void main(String[] args) {int a 20;int b a;System.out.println(a: a);System.out.println(b: b);b 13;System.out.println(a: a);System.out.println(b: b);int[] arr new int[] {20};int[] brr arr;System.out.println(arr[0]: arr[0]);System.out.println(brr[0]: brr[0]);brr[0] 13;System.out.println(arr[0]: arr[0]);System.out.println(brr[0]: brr[0]);}
}
答案与解析
package day04;public class 基本类型和引用类型 {public static void main(String[] args) {int a 20;int b a;//基本类型赋值直接将值存入变量所在的内存System.out.println(a: a);//20System.out.println(b: b);//20b 13;//将13存入b所在的内存System.out.println(a: a);//20System.out.println(b: b);//13int[] arr new int[] {20};//引用类型赋值将该对象所在首地址存入变量int[] brr arr;//引用类型赋值将该对象所在首地址存入变量System.out.println(arr[0]: arr[0]);//20System.out.println(brr[0]: brr[0]);//20brr[0] 13;System.out.println(arr[0]: arr[0]);//13System.out.println(brr[0]: brr[0]);//13}
}2、没有多维数组
其实只有一维数组二维数组是假象。
二维数组的本质数组元素为一维数组的数组。
(1)初始化
①静态初始化
new 类型[]...[] {元素1,元素2,...}
int[][] arr new int[][]{{1,2,3},{4,5,6,7},{8,9,10,11}};
②动态初始化
new 类型[数组长度]...[数组长度]
int[][] arr new int[5][]; ③静态和动态混着用
public class 二维数组静态初始化 {public static void main(String[] args) {//静态int[][] arr new int[][] {new int[2],//元素用动态创建new int[3],new int[4] };System.out.println(arr.length);//静态int[][] brr new int[][] {new int[] {1,2},//元素用静态创建new int[] {3,4,5},new int[] {6,7,8,9} };System.out.println(brr.length);//静态int[][] crr new int[][] {new int[4],//元素用动态创建{1,2,3},//元素用静态的简化语法创建new int[3]//元素用动态创建};System.out.println(crr.length);}
} ④二维数组简化初始化
//创建一个长度为4的数组其中每个元素都是动态初始化的长度为5的数组
int[][] arr new int[4][5];
//相当于
int[][] brr new int[][] {new int[5],new int[5],new int[5],new int[5],new int[5],
};
(2)对数组元素赋值
【常见错误】
int[][] arr new int[5][];//对数组元素赋值
//arr[0]是数组元素是int[]类型20是int
arr[0] 20;
(3)使用数组
遍历
int[][] arr new int[][] {new int[2],//元素用动态创建new int[3],new int[4]
};for (int i 0; i arr.length; i) {//arr[i]是int[]类型int[] brr arr[i];for (int j 0; j brr.length; j) {System.out.print(brr[j] \t);}System.out.println();
}