【Java】——数组知识点详解

数组的定义和使用

1.数组基本用法

1.1数组——一块连续的内存,存储的是相同数据类型的集合。

                       数组本质上就是——批量的创建相同类型的变量。

                       在Java中,数组中包含的变量必须是相同类型

1.2创建数组

基本语法:

//动态初始化

数据类型[] 数组名称 = new 数据类型 []  {初始化数据};

//静态初始化

数据类型[] 数组名称 = {初始化数据};

代码示例:

        //静态初始化
        int[] arr = {1,2,3};
        
        //动态初始化
        int[] arr1 = new int[]{1,2,3};

静态初始化的时候,数组元素个数和初始化数据的格式是一致的。

1.3数组的使用

举例:——获取长度&访问元素

public class Test {
    public static void main(String[] args) {
        //静态初始化
        int[] arr = {1,2,3};
        //获取数组长度
        System.out.println("length = " + arr.length);
        
        //访问数组中的元素
        System.out.println(arr[1]);
        System.out.println(arr[0]);
        arr[2] = 100;
        System.out.println(arr[2]);
        
    }
}

(1)使用arr.length  能够获到数组的长度, .   是成员访问操作符;

(2)使用  []   按下标取数组元素。——下标从0开始计数;

(3)使用  []  操作既能读取数据,也能修改数据;

(4)下标访问操作不能超出有效范围 [0,length - 1] ,如果超出有效范围,会出现下标越界访问。

举例2——遍历数组——(遍历:即是指将数组中的所有元素收访问一遍,常使用循环语句)

public class Test {
    //2.遍历数组
    public static void main(String[] args) {
        int [] arr = {1,2,3,4,5};
        for (int i = 0; i <arr.length ; i++) {
            System.out.println(arr[i]);
        }
    }
}

举例3——使用foreach遍历数组

public class Test {
    //3.使用foreach遍历数组
    public static void main(String[] args) {
        int[] arr = {7,8,9,0};
        for (int x:arr){
            System.out.println(x);
        }
    }
}

举例4——使用操作数组的工具类Array.toString()——将数组以字符串的形式进行输出

public class Test {
    //4.使用操作数组的工具类Arrays.toString()——将数组以字符串的形式输出
    public static void main(String[] args) {
        int[] arr = {4,5,7,6};
        System.out.println(Arrays.toString(arr));
    }
}

2.数组作为方法的参数

2.1基本用法

举例1 ——打印数组内容

public class Test {
    //5.打印数组内容
    public static void main(String[] args) {
        int[] arr1 = {2,3,4,8,5};
        printArray(arr1);
    }
    public static void printArray(int[] arr){
        for(int x:arr){
            System.out.println(x);
        }
    }
}
    

此代码中 int[] arr是函数形参;int[] arr1是函数实参。

2.2引用类型

举例2—— 参数传内置类型

public class Test {
    //6.参数传内置类型
    public static void main(String[] args) {
        int num = 10;
        func(num);
        System.out.println("num = " + num);
    }
    public static void func(int x){
        x = 10;
        System.out.println("x = " + x);
    }

执行结果:

可发现修改形参x的值,并不影响实参的num 值。

举例2——参数传数组类型

public class Test {
    //7.参数传数组类型
    public static void func1(int[] arr){
        arr[0] = 10;
        System.out.println("arr[0] = " + arr[0]);
    }

    public static void main(String[] args) {
        int[] arr1 = {12,13,11,15};
        func1(arr1);
        System.out.println("arr1[0] = " +  arr1[0]);
    }
}

执行截图:

可发现:在函数内部修改数组内容,函数外部也发生改变;

此时数组名arr1是一个“引用”,当传参的时候,是按照引用传参。

所谓引用:——本质上是存了一个地址。

Java数组设定成引用类型——方便进行数组参数传参——即将数组的地址传入到函数形参中。

2.3null

null——在Java中表示“空引用”——即一个无效的引用。——因此不可对此引用指向对象的内存进行任何读写操作——会抛出NullPointerException

2.4JVM 内存区域划分

   (1)JVM Stack——虚拟机栈——重点是存储局部变量表:

   (2)本地方法栈——保存的是Native方法的局部变量;

(3)堆——JVM所管理的最大内存区域——使用new创建的对象都是在堆上保存;

(4)程序计数器——保存下一条执行的指令地址;

(5)方法区——用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据;方法编译出的字节码就是保存在这个区域。

3.数组作为方法的返回值

举例—— 数组作为方法的返回值——写一个方法,将数组中的每一个元素 * 2

代码实现:

public class Test {
    //8.数组作为方法的返回值——写一个方法,将数组中的每一个元素 * 2
    public static void main(String[] args) {
        int[] arr = {1,2,3,4};
        int[] output = transform(arr);
        printArray1(output);
    }
    public static void printArray1(int[] arr){
        for (int i = 0; i < arr.length ; i++) {
            System.out.println(arr[i]);
        }
    }
    public static int[] transform(int[] arr){
        int[] ret = new int[arr.length];
        for (int i = 0; i < arr.length; i++) {
            ret[i] = arr[i] * 2;
        }
        return ret;
    }

执行结果:

4.使用数组的常见问题:

(1)下标越界——ArrayIndexOutOfBoundsException

(2)空指针异常——NullPointerException——需检查哪个引用为null

       null ——引用对应的0值——不知其指向的对象时,置为null

int array2 = null;//此引用不指向任何对象。

5.for   与    foreach 循环的区别:

for:可使用下标访问找到某元素;

foreach:没有下标。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值