java学习day05——数组、内存划分

数组

数组的特点:

  1. 数组是一种引用数据类型
  2. 数组中的多个数据类型必须统一
  3. 数组的长度在程序运行期间不可改变

一维数组的初始化

  1. 动态初始化(指定长度)

数据类型[] 数组名称 = new 数据类型[数组长度];

  1. 静态初始化(指定内容)

数据类型[] 数组名称 = new 数据类型[] {元素1,元素2,…};

注意事项:虽然静态初始化没直接告诉长度,但是根据大括号里面元素的具体内容,也可以自动推算出来长度。
使用静态初始化数组的时候,格式还可以省略一下。
省略格式:

数据类型[] 数组名称 = {元素1,元素2,…};

public class Demo01Array {
    public static void main(String[] args) {
        //动态初始化数组
        int[] arrayA = new int[300];
        double[] arrayB = new double[10];
        String[] arrayC = new String[5];
        //静态初始化数组
        int[] arrayD = new int[] { 5,15,25 };
        String[] arrayE = new String[] { "Hello", "World", "Java" };
        //静态初始化数组的省略格式
        int[] arrayF = { 10, 20, 30 };

    }
}

访问一维数组元素进行赋值

直接打印数组名称,得到的是数组对应的内存地址哈希值
访问数组元素的格式: 数组名称[索引值]
【注意】索引值从0开始
使用动态初始化数组时,其中的元素自动拥有一个默认值,规则如下:
如果是整数类型,默认为0
如果是浮点类型,默认为0.0
如果是字符类型,默认为’\u0000’
如果是布尔类型,默认为false
如果是引用类型,默认为null

// 给数组元素赋值
arrayA[1] = 123;

二维数组

java中多维数组不必都是规则矩阵形式

/*
二维数组的定义
int[][] x
int[] x[]
int x[][]
*/
public class test1 {
    public static void main(String[] args) {
        //多维数组
        int[][] list1 = new int[2][3];//动态初始化
        int[][] list2 = {{1,2},{3,4,5}};//静态初始化
        int[][] list3 = new int[2][];//只定义第一位长度
        // 可以对这三个一维数组分别进行初始化
        list3[0] = new int[3];
        list3[1] = new int[1];
        list3[2] = new int[2];
        System.out.println(list1.length);
        System.out.println(list1[0].length);
    }
}

Java的内存划分

  1. 栈(Stack):存放的都是方法中的局部变量。方法的运行一定要在栈当中
    局部变量:方法的参数,或者是方法{}内部的变量
    作用域:一旦超出作用域,立即从占内存中消失
  2. 堆(Heap):凡是new出来的东西,都在堆当中
    堆内存里面的东西都有一个地址值:16进制
    堆内存里面的数据,都有默认值
  3. 方法区(Method Area):存储class相关信息,包含方法的信息。
  4. 本地方法栈(Native Method Stack):与操作系统相关
  5. 寄存器(pc Register):与cpu相关
    在这里插入图片描述

两个引用指向同一个数组

在这里插入图片描述

空指针异常

所有的引用类型变量,都可以赋值为一个null值。但是代表其中什么都没有。

数组必须进行new初始化才能使用其中的元素。
如果只是赋值了一个null,没有进行new创建,那么将会发生,空指针异常NullPointerException

数组的长度

int len = array.length;
System.out.println("array数组的长度是:"+len);

格式: 数组名称.length
如下图,改变数组的长度,堆中新建一个数组,数组名称指向新数组
在这里插入图片描述

数组作为方法参数传递

public class Demo03Array {
    public static void main(String[] args) {
        int[] array = {2,4,2,4,2,5,2};
        arrayPrint(array);
    }
    //数组作为参数
    public static void arrayPrint(int[] array){
        for(int i = 0;i<array.length;i++){
            System.out.println(array[i]);
        }
    }
}

注意: 向方法中的小括号进行传参,传递进去的其实是数组的地址值

数组作为返回值

当需要return的元素大于一个时,使用数组作为返回值

public class Demo03Array {
    public static void main(String[] args) {
        int[] result = calculate(10,20,30);
        System.out.println("总和"+result[0]);
        System.out.println("平均值"+result[1]);
    }
    //数组作为返回值
    public static int[] calculate(int a,int b,int c){
        int sum = a+b+c;
        int avg = sum/3;
        int[] array = {sum,avg};
        return array;
    }
}

注意: 数组作为方法的返回值,返回的其实也是数组的地址值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值