Java基础知识 06
java内存分配区域
java虚拟机在执行Java程序的过程中会把它管理的区域划分成若干个不同的数据区域。
一个数组的内存图解:
两个数组的内存图解:
三个数组的内存图解:
案例程序分析1:
public class test3 {
public static void main(String[] args) {
int[] arr1 = new int[3];
System.out.println(arr1);
arr1[0]=100;
int[] arr2 = new int[3];
System.out.println(arr2);
arr2[1]=200;
System.out.println(arr1[0]);
System.out.println(arr1[1]);
System.out.println(arr1[2]);
System.out.println("===================");
System.out.println(arr2[0]);
System.out.println(arr2[1]);
System.out.println(arr2[2]);
}
}
数组的一个默认属性.length,可以获取数组长度。
int len =arr.length;
案例程序分析2:
public class test2 {
public static void main(String[] args) {
//数组的默认属性length,可以获取数组的长度
int[] arr = new int[3];
int len=arr.length;
System.out.println(len);
//数组最后一个元素的索引=数组的长度-1
System.out.println(arr[2]);
}
}
数组角标越界
数组一旦定义,那么数组的长度就不可变化了。
当你访问了没有对应角标的元素,你就会出现角标越界。
报错:ArrayIndexOutOfBoundsException:数组索引越界异常
原因:你访问了不存在的索引。
空指针异常
int[] arr=new int[2];
arr=null; //把数组引用人为置为null---->如果放在最后,也就是数组用完再置空,就可以让垃圾回收器及早的回收数组这块空间。
//arr就指向不到堆内存的那块空间了。
arr[0]=100;
Ssytem.out.println(arr.length);
案例程序分析3:
public class test4 {
public static void main(String[] args) {
//数组角标越界的问题
int[] arr = new int[3];
//System.out.println(arr[3]);//报错
System.out.println("======================");
//空指针异常
//arr=null;
arr[0]=200;
System.out.println(arr.length);//报错
}
}
一维数组的遍历(正向遍历,反向遍历)
案例程序分析4:
public class test {
public static void main(String[] args) {
//遍历数组中的元素
//通过循环获取数组中的每一个元素
int[] arr={100,200,300,400,500};
//数组的正向遍历
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
System.out.println("====================");
//数组的反向遍历
for (int j = arr.length-1; j >= 0; j--) {
System.out.println(arr[j]);
}
}
}
案例程序分析5:获取数组的最大最小值:
public class test2 {
public static void main(String[] args) {
int[] arr={-1,100,200,300,400,500};
//输出数组中的最大值
int max=arr[0];
for (int i = 0; i <= arr.length-1; i++) {
if (arr[i] > arr[0]){
max=arr[i];
}
}
System.out.println(max);
}
}
public class test3 {
public static void main(String[] args) {
int[] arr={-1,100,200,300,400,500};
//输出数组中的最小值
int min=arr[0];
for (int i = arr.length - 1; i >= 0; i--) {
if (arr[i] < arr[0]){
min=arr[i];
}
}
System.out.println(min);
}
}
案例程序分析6:数组元素的反转:
方法1:
public class test4 {
public static void main(String[] args) {
//数组元素的反转
int[] arr={100,200,300,400,500,600};
for (int i = 0; i < arr.length / 2; i++) {
//通过中间变量进行首尾元素的交换
int t=arr[i];
arr[i]=arr[arr.length-1-i];
arr[arr.length-1-i]=t;
}
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}
方法2:
public class test5 {
public static void main(String[] args) {
int[] arr={100,200,300,400,500,600,700};
for (int i=0,j=arr.length-1;i<j;i++,j--) {
int t=arr[i];
arr[i]=arr[j];
arr[j]=t;
}
System.out.println("====================");
for (int i=0;i<arr.length;i++){
System.out.println(arr[i]);
}
}
}