Java基础知识 06(内存分配区域,数组角标越界,空指针异常,一维数组的遍历)

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]);
        }
    }
}
发布了7 篇原创文章 · 获赞 0 · 访问量 240

猜你喜欢

转载自blog.csdn.net/weixin_45447369/article/details/105460001