数组的概述与定义
- 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个元素
- 数据类型[][] 数组名 = new 数据类型[3]2;
- C二维数组注意事项
二维数组的遍历
- 使用for循环嵌套
- 外循环控制的是二维数组的长度 基实就是一维数组的个数
- 内循环控制一维数组的长度
java中参数的传递问题
基本数据类型的值传递 不改变原值 因为调用后会弹栈 局部变量随之消失
引用数据类型的值传递 改变原值 因为即使方法弹栈 但是堆内存数组对象 还在 可以通过地址继续访问
* Java中到底是传值还是传址
既是传值 也是传址 基本数据类型传值 引用数据类型传地址
只传值 因为地址值也是值