01、java04-数组 1维 2维

1、数组

--这里默认二维数组为最高,更高维度的数组不是不可以,而是就好比是多层循环没有价值

--数组定义:固定长度的容器
    1、数据类型[][]...  数组名 = new 数据类型[num][num]...
        --int[][] a = new int[3][4];
        --int[] b = new int[12];

        --对于多维数组,其length是指第一维长度
        --这种需要给定数组大小,不赋值

    2、数据类型[][]..  数组名 = new 数据类型[][]{data1, data2, data3, ...}
        --int[] arr = new int[]{1,2,3,4,5};
        --int[][] c = new int[][]{{1}, {1, 2, 3, 4, 5, 6}};

        --这种方式通过所赋的值确定元素个数和纬度分布
        
    3、数据类型[][].. 数组名 = {{}, {}, ...}
        --int[] arr = {1,2,3,4,5};
        --int[][] brr = {{5, 6, 7}, {1, 2}};

    public static void main(String[] args){
        int[] a = new int[3];
        int[][] b = new int[3][4];
        int[][] c = new int[][]{{1,}, {2, 3, 4, 5, 6}};
        int[][] brr = {{5, 6, 7}, {1, 2}};
        System.out.println(a.length);
        System.out.println(b.length);
        System.out.println(c[0].length);
        System.out.println(brr[0][2]);
    }


--数组元素调用
    只需要记住一点,索引从0开始,最大索引为length-1

2、数组原理内存

--jvm内存划分
    --寄存器:给cpu使用,和我们开发无关
    --本地方法栈:jvm调用系统功能时使用的,和我们无关
    --方法区:存储可以运行的class文件
    --堆内存:存储对象或者数组,new创建的就存储在堆中
    --方法栈:方法运行时使用的内存,比如main方法运行时进入方法栈中执行

--变量arr保存的是数组的地址,而arr[]这种才是取出元素,和python完全不一样
    int[] arr = new int[3];
    System.out.println(arr);//[I@5f150435

--int [] [] a = new int [2] [12];
    --这里表示 [] 和 []之间有没有空格无所谓的,很多拿不准的建议自己写一点代码测试一下

--获取数据类型
    public static void main(String[] args){
        int l=100;
        short f = 12;
        System.out.println(getType(l));
        int[] a = new int[3];
        int[][] b = new int[3][4];
        int[][] c = new int[][]{{1,}, {2, 3, 4, 5, 6}};
        int[][] brr = {{5, 6, 7}, {1, 2}};
        System.out.println(a.length);
        System.out.println(b.length);
        System.out.println(c[0].length);
        System.out.println(brr[0][2]);
        System.out.println(b.getClass().toString());
        System.out.println(getType(a));
        System.out.println(getType(f));
    }

    public static String getType(Object o) { //获取变量类型方法
        return o.getClass().toString(); //使用int类型的getClass()方法
    }

--数组之间复制,本质上是指针的赋值,就是将数组变量的指针所指向的地址赋值给新的数组
--如果数组变量被赋值为null,则说明该数组不指向任何内存地址,如果使用a[0]这种方式取值会报错 
  NullPointerException 
    public static void main(String[] args) {
        int[] arr = {1,2,3};
        arr = null;
        System.out.println(arr[0]);
    }

--这里如果超出了数组的长度会报:ArrayIndexOutOfBoundsException溢出异常

3、三个小例子

1、数组遍历
2、求取最大值
3、数组交换

4、数组作为方法参数和返回值

--数组作为方法参数传入函数,传入的是数组地址
--数组作为方法返回值返回时,传出的也是数组地址

--所以如果定义的是数组变量,可以直接修改内存中数据的值,无需重新复制和C中指针类型变量一样

--传入数组参数到函数中
    public static void main(String[] args) {
        int[] arr = { 1, 3, 5, 7, 9 };
        //调用方法,传递数组
        printArray(arr);
    }
    /*
    创建方法,方法接收数组类型的参数
    进行数组的遍历
    */
    public static void printArray(int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
    }

--返回数组参数到函数中
    public static void main(String[] args) {
        //调用方法,接收数组的返回值
        //接收到的是数组的内存地址
        int[] arr = getArray();
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
    }

    public static int[] getArray() {
        int[] arr = { 1, 3, 5, 7, 9 };
        //返回数组的地址,返回到调用者
        return arr;
    }

--方法的参数为基本类型时,传递的是数据值. 方法的参数为引用类型时,传递的是地址值.
import java.awt.desktop.SystemSleepEvent;

public class ListNull {
    public static void main(String[] args){
        int [] [] a = {{7, 8, 9}, {10, 20, 30}};
        System.out.println(a[1][0]);
        intoList(a);

        int [][] b = reList(a);
        System.out.println(b[1][0]);
        System.out.println(a[1][0]);
    }

    public static void intoList(int [][] arrlist){
        System.out.println("\n输入数组");
        System.out.println(arrlist[0][2]);
        System.out.println("输入数组\n");
    }

    public static int[][] reList(int [][] arrList){
        arrList[1][0] = 1999;
        arrList[1][1] = 1888;
        arrList[1][2] = 1777;
        return arrList;
    }
}

    
        

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值