数组

  • 是一种容器,可以同时存放多个数据值
  • 数据的特点
    1.数组是一种引用类型
    2.数组中的多个数据,类型必须统一
    3.数组的长度在程序运行期间不可改变
  • 数组的初始化

1.动态初始化(指定长度)
2.静态初始化(指定内容)

动态初始化数组的格式:
数据类型[] 数组名称 = new 数据类型[数组长度];
解析含义:
左侧数据类型,也就是数组当中保存的数据,全部都是统一的什么类型
左侧的中括号,代表我是一个数组
左侧数组名称:给数组取一个名字
右侧的new:代表创建数组的动作
右侧数据类型:必须和左边的数据类型保持一致
右侧:中括号的长度:也就是数组当中,到底可以保存多少个数据,是一个int数字

图片说明

  • 静态初始化基本格式:
    数据类型[] 数组名称 = new 数据类型[]{元素1,元素2,...}

虽然静态初始化没有直接告诉长度,但是根据大括号里面的元素具体内容,也可以自动推算出来长度。

int[] arrayA = new int[]{5, 15, 25};
String[] arrayB = new String[]{"Hello","World","Java"};

使用静态初始化数组的时候,格式可以省略一下。

标准格式:
数据类型[] 数组名称 = new 数据类型[]{元素1, 元素2,...}
省略模式:
数据类型[] 数据名称 = {元素1,元素2, ...};

注意事项:
1.静态初始化没有直接指定长度,但是仍然会自动推算得到长度
2.静态初始化标准格式可以拆分成两个步骤。
3.动态初始化也可以拆分成两个步骤。
4.静态初始化一旦使用省略格式,就不能拆分为两个步骤了。

使用建议:如果不确定数组内容,用动态初始化;否则,已经确定了具体的内容,用静态初始化。
图片说明

数组的元素获取

  • 直接打印数组名称,得到的是数组对应的,内存地址的哈希值。
  • 访问数组的格式:数组名称[索引值]
    索引值:就是一个int数字,代表数组当中元素的编号。
    【注意】索引从0开始,一直到数组长度-1为止。

数组元素的赋值

使用动态初始化数组的时候,其中元素将会自动拥有一个默认值。规则如下:
如果是整型类型,默认0
如果是浮点类型,默认0.0
如果是字符型,默认'\u0000'
如果是布尔型,默认false
如果是引用类型,默认null

注意事项:
静态初始化其实也有默认值的过程,只不过系统自动马上把赋值的值替换了默认值。

JAVA中的内存划分

  • 5个部分
    1.栈(Stack):存放的都是方法中的局部变量
    局部变量:方法的参数,立刻从栈内存中消失
    作用域:一旦超出作用域,立刻从栈内存中消失

    2.堆(Heap):凡是new出来的东西,都在堆当中,堆内存里面的东西都有一个地址值:16进制堆内存里面的数据,都有默认值。规则同数组默认值。
    3.方法区(Method Area):存储.class相关信息,包含方法的信息。
    4.本地方法栈(Native Method Stack):与操作系统相关
    5.寄存器(pc Register):与CPU相关。
    栈是名字张三,堆是能吃饭能睡觉能学习的张三
    图片说明
    图片说明
    图片说明

  • 类似于Python中的深拷贝和浅拷贝

数组越界

索引编号不存在,就会发生数组索引编号越界异常。

空指针异常

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

数组必须进行new初始化才能使用其中的元素
如果只是赋值了一个null,没有进行new创建
那么将会发生空指针异常NullPointerException
原因:忘了new
解决:补上new
图片说明

获取数组长度

-.length
-数组一旦创建,程序运行期间,长度不可改变。

遍历数组

array.fori

最大值

比武招亲

图片说明

数组元素的反转

图片说明
图片说明

数组作为形参传入

  • 当调用方法的时候,向方法中的小括号进行传参,传递进去的其实就是数组的地址值
    图片说明

数组作为返回值

  • 如果一个方法中产生了多个结果数据进行返回,怎么办?
    解决方案:使用一个数组作为返回类型即可
    数组作为方法的参数,传递进去的其实是数组的地址值。
    数组作为方法的返回值,返回的其实也是数组的地址值。
    public static  int[] caculate(int a ,int b, int a){
      int sum = a+b+c;
      int avg = sum/3;
    //两个结果都希望返回
    //需要一个数组,也就是一个塑料兜,数组可以保存多个结果
      int[] array = new int [2];
      array[0] = sum;
      array[1] = avg;
      //int[] array = {avg,sum};
      return array;
    

}