数组

1.一维数组声明

1.1先声明,再用new关键字进行内存分配

两种方式声明
数据类型 数组名字[]; int arr[];
数据类型[] 数组名字; int[] arr;

为数组分配空间
数组名字 = new 数据类型[容量];arr = new int[5]
此时数组arr[]中默认值为0,并没有为数组赋值

赋值:

arr [0] = 1;

如果赋值时候超过下标,例如

int arr[5] = 5;

程序报错:java.lang.ArrayIndexOutOfBoundsException
正因为如此所以开发中不使用数组,使用集合。

1.2声明的同时为数组分配内存

数据类型 数组名字[] = new 数据类型[容量];int arr[] = new int[5];

2.初始化一维数组

第一种方式
数据类型[] 数组变量名字 = {值1, 值2, 值3,......};
或者
数据类型 数组变量名字 []= {值1, 值2, 值3,......};
int arr[] = {1, 2, 3}

第二种声明方式:
数据类型[] 数组变量名字 = new 数据类型[]{值1, 值2, 值3,.....};
int arr[] = new int[]{1, 2, 3}

System.out.println(数组名字);

打印的是数组的内存地址

System.out.println(Arrays.toString(数组名));

将内存地址转为字符串输出
但唯独char类型的数组不需要使用toString,可直接输出,其他
类型的都不可以。

取值

通过循环取值

package com.wyx.a_array;

public class Demo1 {
    public static void main(String[] args) {
        int arr[] = {20, 30, 40, 50};
        //arr.length 获取数组长度
        for (int i =0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
    }
} 

通过foreach取值

package com.wyx.a_array;

public class Demo2 {
    public static void main(String[] args) {
        int arr[] = {20, 30, 40, 50};
        for (int i : arr) {
            System.out.println(i);
        }
    }
}

数组可以当成一个方法的参数(重点)

语法格式
public static void 方法名 (数据类型 形参[]) {
方法体
}

案例:声明一个方法遍历数组

package com.wyx.a_array;

public class Demo3 {
    public static void main(String[] args) {
        int arr[] = {2, 3, 4};
        printArr(arr);
        
    }
    //声明一个方法遍历数组
    public static void printArr (int arr[]) {
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
    }
}

案例:声明一个方法,用来为数组赋值

package com.wyx.a_array;

import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.Scanner;

//1声明数组,2赋值,3打印
public class Demo4 {
    public static void main(String[] args) {
        //1声明一个空数组
        int arr[] = new int[4];
        
        add(arr);
        
        //打印数组
        System.out.println(Arrays.toString(arr));
        
    }
    /**
     * 
     * @param arr 空数组进行赋值
     */
    public static void add (int arr[]) {
        Scanner scanner = new Scanner(System.in);
        for (int i = 0; i < arr.length; i++) {
            System.out.println("请输入第" + (i+1) + "个数:");
            int i1 = scanner.nextInt();
            arr[i] = i1;
        }
    }
}

数组可以当成方法的返回值

案例:声明一个方法,实现数组中的值翻转

package com.wyx.a_array;

import java.lang.reflect.Array;
import java.util.Arrays;

public class Demo5 {
    public static void main(String[] args) {
        System.out.println(Arrays.toString(reverse()));
    }
    
    public static int[] reverse () {
        //被用来翻转的数组
        int arr[] = {1, 2, 3, 4};
        //空数组用来接收翻转之后的数据
        int arr1[] = new int[arr.length];
        //实现翻转
        for (int i = 0, j = arr.length - 1; i < arr.length; i++, j--) {
            arr1[j] = arr[i];
        }
        return arr1;
    }
}

数组在内存中如何分配的【了解,以后还会再讲】

目前学到的知识点你只需要关注:栈内存 和堆内存

内存区域的名字 作用
寄存器 给CPU使用的,和开发没有关系
本地方法栈 JVM虚拟机操作咱们的电脑的系统的时候,才会使用
方法区 存储和运行的class文件
堆区 存储的是对象或者数组, 凡是new出来的都存在堆区
方法栈 方法运行的时候使用的内存,比如main方法会进入到方法栈区

栈:存储的是八大基本数据类型的数据

    int a = 20; 这个存在了栈区

    存储的是对象的引用  scanner   就是一个对象的等号的左边的

    Scanner scanner = new Scanner(System.in);

堆区:

    凡是new的 都存在堆区

    int[] arr = new int[5];

    arr存在了栈区     new int[5];存在了堆区

    Scanner scanner = new Scanner(System.in);

scanner  存在了栈区, new Scanner(System.in);  在堆区
1.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容