Java数组的学习

数组的概述与定义

  • A数组的概念
    • 1,数组是存储同一个数据类型的多个元素的集合 也可以看成一个容器
    • 2,数组可以存储基本数据类型 和 引用数据类型
    • 3,数组本身属于引用数据类型
  • 数组的定义格式
    • 数据类型[] 数组名 = new 数据类型[] (数组长度);
  • *

数组初始化

  • A什么是数组的初始化
    • 为数组分配连续的内存空间 并为每个元素赋值
  • B如何对数组进行初始化
    • 动态初始化
      • 只指定数组的长度 由系统给出初始化的值
      • int[] arr = new int[5];
    • 静态初始化
      • 给出初始化的值 由系统决定数组的长度
  • C动态初始化的格式
    • 数据类型[] 数组名 = new 数据类型[数组长度];
  • D静态初始化的格式
    • 数据类型[] 数组名 = {元素1值,元素2值,……};
  • E默认初始化值
    • 整数类型:byte short int long 默认0
    • 浮点类型:float double 默认0.0
    • 字符类型:char 默认’\u0000’
    • 布尔类型:boolean 默认false

java中内存分配 及栈和椎的区别

  • A栈
    • 存储局部变量
    • 局部变量:定义在方法声明或者在方法内的变量
    • 栈概念:先进后出
  • B堆
    • 存储new 出来的数组或对象
  • C方法区
  • D本地方法区
    • 和系统相关
  • E寄存器
    • 给CPU使用

数组初始化静态初始化及内存图

  • A静态初始化格式
    • 格式: 数据类型[] 数组名 = new 数据类型[]{元素1,元素2,……} ;
    • 简写格式:数据类型[] 数组名 = {元素1,元素2,……};
    • 简写声明和赋值只能写在一行:int[] arr = {1,2,3};
    • int[] arr; arr = {1,2,3}//这种写法是错误的

数组的越界和空指针

  • ArrayIndexOutOfBoundsException:数组索引越界异常

    • 原因:你访问了不存在的索引

      int[] arr = new arr[4];
      System.out.println(arr[4]);//数组的最大索引为3 却访问索引4所以出异常
      
  • NullPointerException:空指针异常

    • 原因:数组已经不在指向堆内存了 而你还用数组名去访问元素

      int[] arr = {1,2,3};
      
      arr = null;//地址值 也就是堆里面的保存数组的地址为null
      
      System.out.println(arr[0]);          
      

数组的遍历

  • 数组遍历:就是依次输出数组中的元素
  • 数组的属性:arr.length为数组的长度
  • 数组的最大索引: arr.length-1

数组的获取最值

  • 使用方法获取数组中的最大值
    • 方法的返回值类型 int
    • 方法的参数列表 int[] arr

数组的反转

//分析使用方法使数组反转,使用for循环获取元素列表
//arr[i] = arr[arr.length-1-i];
//声明一个临时变量 int temp 实现数值的交换

//明确返回值类型 void
//明确参数列表 int[] arg

二维数组的概述和格式

  • A二维数组概述
    • 数组中的数组
  • B二维数组格式
    • 数据类型[][] 数组名 = new 数据类型[3]2;
      • 这是一个二维数组中 有3个一维数组 每个一维数组中有2个元素
  • C二维数组注意事项

二维数组的遍历

  • 使用for循环嵌套
  • 外循环控制的是二维数组的长度 基实就是一维数组的个数
  • 内循环控制一维数组的长度

java中参数的传递问题

基本数据类型的值传递 不改变原值 因为调用后会弹栈 局部变量随之消失
引用数据类型的值传递 改变原值   因为即使方法弹栈 但是堆内存数组对象 还在 可以通过地址继续访问

* Java中到底是传值还是传址
既是传值 也是传址 基本数据类型传值 引用数据类型传地址
只传值 因为地址值也是值

;