数组(容器)
数组是一组数据类型相同的数据的组合,将这些数据统一的管理起来
数组本身是一个引用数据类型,数组内存储的类型可以是基本类型 也可以是引用类型
数组的特点
1.数组本身是一个引用数据类型
2.数组是在堆内存中的一串连续的地址存在
3.数组在初始化时必须指定长度
4.堆内存的数组空间长度一旦确定 不能再次发生改变
5.栈内存的变量中存储的是数组的地址引用
6.数组内部存储的类型可以是基本的 也可以是引用
1.数组的定义(声明)
数据类型[] 数组名字;
int[] x;
char[] y;
boolean[] z;
String[] m;
2.数组的赋值(初始化)
静态初始化 有长度 有元素
int[] array = {10,20,30,40,50};
int[] array = new int[]{10,20,30};
动态初始化 有长度 没有元素(不是真的没有 默认值)
int[] array = new int[5];
整数默认值---0
浮点数默认值---0.0
字符型默认值--- 0---char 97-a 65-A 48-'0'
布尔型默认值--- false
引用数据默认值--- null String[]
3.数组元素的访问
通过元素在数组中的位置来访问
存值/取值
位置---->index索引
索引是有取值范围 [从0开始-----数组长度-1]
如果数组的索引超出了上述范围
会出现一个运行时异常 ArrayIndexOutOfBoundsException
4.数组元素的遍历(轮询)
通过循环的方式访问数组的每一个元素
for( ; ; ){
}
JDK1.5版本之后 新的特性 增强for循环 加强for forEach
for(自己定义的变量(接收数组内每一个元素) : 遍历的数组array){
}
正常的for循环以及加强的for循环都需要非常熟练
1.正常的for 有三个必要条件 index索引 找到某一个元素的位置
可以通过index直接访问数组的某一个位置 存值 取值都可以
不好在于写法相对来说比较麻烦
2.增强的for 有两个条件 用来取值的变量 用来遍历的数组 没有index索引
好处写法相对比较容易
不好只能取值 不能存值
没有index索引 找不到元素到底是哪一个
*5.基本数据类型和引用数据类型在内存结构上的区别
所有的变量空间都存储在栈内存
变量空间可以存储基本数据类型 也可以存储引用数据类型
如果变量空间存储的是基本数据类型 存储的是值 一个变量的值改变 另一个不会跟着改变
如果变量空间存储的是引用数据类型 存储的是引用(地址) 一个变量地址对应的值改变 另一个跟着改变
需求 容器(变量 数组)
1.创建一个数组 用来存储1-100之间的偶数
设计程序的时候出现的小问题
1.创建一个数组 动态初始化????
元素个数比较少 静态 元素个数很多有规律 动态 元素很多没规律
2.用了两个循环 一个只为了存值 另一个只为了输出看一看
存放时直接看结果可能由于存放误操作---看时正确 之后就发生变化
存放不一定必须要查看 存放是一件事情 查看是另一件
============================================================================================
二维数组
0.数组的概念 特点
1.数组的定义/声明
2.数组的初始化
静态初始化---有长度 有元素
动态初始化---有长度 没有元素(默认值)
3.数组元素的访问
通过元素在数组中的位置----index索引
4.数组元素的遍历/轮询
0.数组特点
数组本身是一个引用类型
声明时必须指定长度 长度一旦确定不能再次发生改变
1.定义/声明
里面存储的类型[] 数组名字;
int[][] array;
2.初始化
静态---有长度 有元素
int[][] array = {{1,2},{3,4,5,6},{7,8,9}};
动态---只有长度 没有元素(默认)
int[][] array =new int[3][2];
array--->{{x,x},{x,x},{x,x}}---> x默认值0
可能会产生一个运行时异常
NullPointerException
3.元素访问
通过元素在数组中的位置---index
array[i][j]
i控制大数组中 小数组的位置
j控制小数组中 元素的位置
4.遍历轮询
正常 增强for循环 嵌套完成
5.引用类型在内存中的存储结构
二维数组在内存中的存储
int[][] array = new int[3][];
//3表示有3个小数组 int[]
//2表示每一个小数组内有2个元素---->表示小数组的长度
//array[0][0] = 10;
//array[0][1] = 20;
//NullPointerException 空指针异常
三维数组
创建一个数组 数组内存储好多个 int[][]
int[][][] array = {{{1,2},{3,4}},{{},{}},{{},{}}};
int[][][] array = new int[3][][];
三个二维数组 每一个里面有两个一维数组 再里面有两个int元素
常见的运行时异常
1.InputMisMatchException 输入类型不匹配
input.nextInt(); 输入一个整数 a
2.ArrayIndexOutOfBoundsException 数组索引越界
静态初始化 int[] array = {10,20};
array[2] 索引超出边界
3.NegativeArraySizeException 数组长度不合法(长度出现负数)
动态初始化 int[] array = new int[-2];
4.NullPointerException 空指针异常
引用为null 还拿来使用就不行啦
int[] array = null;
array[0] = 10;//空元素再拿来用
最容易找到异常 同时也是最难找的
1.模拟班级同学每周换位置
{{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}}
留给大家2. 利用二维数组 实现用户登录认证
String[] 账号 索引对应 int[] 密码
String[][] {{"郑中拓","123"},{"渡一教育","666"},{"Java","888"}}
main方法
public static void main(String[] args){
}
public 访问权限修饰符 公有的
static 特征修饰符 静态的 有且只有一份
void 方法执行完没有返回值 关键字
main 方法名字 主要的
主方法中的args参数 可否传递?
1.主方法不是我们调用的 JVM虚拟机启动的时候 虚拟机调用的
2.主方法里面有args参数 是一个String[]类型 我们是可以传递参数进去 给JVM
================================================================