数组

数组

为什么需要学习数组? 存储多个变量的容器

数组的概述: 一组存储相同数据类型的容器

数组的本质也是一个变量,用来存储一组变量的容器

格式: 数据类型[] 数组名 = new 数据类型[数组的长度]; // Java写法

变式: 数据类型 数组名[] = new 数据类型[数组的长度]; // C语言写法

这里的数据类型可以是八大基本数据类型也可以是引用数据类型

数组名满足变量名的命名规范,一般都是复数

new: 在堆区分配内存空间

数组的长度: 表示数组可以存放多少个连续的变量

变量的三要素: 1.声明 2.赋值 3.使用

数组的声明:

表示告诉计算机开辟多大的连续的内存空间

数组的赋值:

地址传递

数组的使用: 访问数组中的元素

如何来访问数组中的元素: 通过下标、索引

数组名[索引]

索引范围 [0,数组的长度)

ArrayIndexOutOfBoundsException

异常名称: 数组索引越界异常

产生原因: 访问了不存在的索引

解决办法: 检查索引是否在 [0,数组的长度) 的范围内

NullPointerException

异常名称: 空指针异常

产生原因: 引用类型的变量没有 new,就访问了对象的成员或者访问了数组的元素

解决办法: 找到错误代码对应的那一行,观察哪些是引用类型,再观察这个引用类型有没有new

数组的初始化

  • 1.静态初始化:
  • 初始化的同时给数组的每一个元素赋值,不需要指明数组的长度,系统根据元素的个数动态计算数组的长度

  • 格式:

  • 格式一:数据类型[] 数组名 = {元素1, 元素2, 元素3, … , 元素n};

  • 格式二:数据类型[] 数组名 = new 数据类型[] {元素1, 元素2, 元素3, … , 元素n};

  • 有了格式一为什么有格式二? --> 在传递参数的时候,如果是匿名数组必须使用格式二

  • 2.动态初始化:
  • 初始化的同时由系统为每一个元素赋值,必须指明数组的长度,赋值的特点满足堆区的默认值特点

  • 堆区中每个变量都有默认值

  • byte short int long 默认值 0

  • float double 默认值 0.0

  • char 默认值 ‘\u0000’ 就是一个空字符

  • boolean 默认值 false

  • 引用类型 默认值 null

  • 格式: 数据类型[] 数组名 = new 数据类型[数组的长度]; // Java写法

  • 变式: 数据类型 数组名[] = new 数据类型[数组的长度]; // C语言写法

值传递和引用传递

  • 方法调用的时候:

  • 形式参数可以是如下类型

  • 八大基本数据类型: 数值本身

  • 引用数据类型: 地址

    方法调用前a的值: 10
    方法中的参数a的值: 15
    方法调用后a的值: 10
     
    方法调用前数组中所有元素的值: [11, 22, 33]
    方法调用中数组中所有元素的值: [11, 300, 33]
    方法调用中数组中所有元素的值: [11, 300, 33]
    - 
    值传递本质传递的是数值,引用传递传递的是地址
    */
    public class ArrayDemo04 {
    public static void main(String[] args) {
    	// test1();
    	// test2(); 
    	int[] arr = {11, 22, 33};
    	int[] arr2 = {44, 55, 66};
    	int[] arr3 = arr;
    	
    
    ```
    System.out.println(Arrays.toString(arr)); // [11, 22, 33]
    System.out.println(Arrays.toString(arr2)); // [44, 55, 66]
    System.out.println(Arrays.toString(arr3)); // [11, 22, 33]
    
    arr3[1] = 500;
    
    System.out.println(Arrays.toString(arr)); // [11, 500, 33]
    System.out.println(Arrays.toString(arr2)); // [44, 55, 66]
    System.out.println(Arrays.toString(arr3)); // [11, 500, 33]
    ```
    
    }
    
    private static void test2() {
    	int[] arr = {11, 22, 33};
    	System.out.println("方法调用前数组中所有元素的值: " + Arrays.toString(arr)); 
    	change(arr);
    	System.out.println("方法调用后数组中所有元素的值: " + Arrays.toString(arr));
    }
    
    public static void test1() {
    	int a = 10;
    	System.out.println("方法调用前a的值: " + a); // 10
    	change(a);
    	System.out.println("方法调用后a的值: " + a);
    }
    
    public static void change(int a) {
    	a += 5;
    	System.out.println("方法中的参数a的值: " + a); // 15
    }
    
    public static void change(int[] arr) {
    	arr[1] = 300;
    	System.out.println("方法中数组的所有元素的值: " + Arrays.toString(arr)); 
    }
    }
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值