数组的概念: 是一种容器, 可以同时存放多个数据值
数组的特点:
数组是一种引用数据类型
数组当中的多个数据, 类型必须统一
数组的长度在程序运行期间不可以改变
数组的初始化: 在内存当中创建一个数组, 并且向其中赋予一些默认值.
两种常见的初始化方式:
1. 动态初始化(指定长度)
2. 静态初始化(指定类容)
动态初始化数组的格式:
数据类型[] 数组名称 = new 数组类型[数组长度];
解析含义:
左侧数据类型: 也就是数组当中保存的数据, 全都是统一的什么类型
左侧的括号: 代表是一个数组
左侧数组名称: 给数组取一个名字
右侧的 new: 代表创建数组的动作
右侧的数据类型: 必须和左边的数据类型保持一致
右侧中括的长度: 也就是数组当中, 到底可以保存多少个数据, 是一个 int 数字
- // 动态初始化(指定长度)
- int[] array1 = new int[3377];
数组定义的格式 - 静态初始化
动态初始化(指定长度): 在创建数组的时候, 直接指定数组当中的数据元素个数
静态初始化(指定类容): 在创建数组的时候, 不直接指定数据个数多少, 而是直接将具体的数据类容进行指定.
静态初始化基本格式:
数据类型[] 数组名称 = new 数据类型[]{元素 1, 元素 2,...}
注意事项:
虽然静态初始化没有直接告诉长度, 但是根据大括里面的元素具体内容, 也可以自动推算出来长度.
- // 静态初始化
- String[] array2 = new String[]{
- "cai","niao","chuan","qi"
- };
使用静态初始化数组的时候, 格式还可以省略一下.
// 省略格式
数据类型[] 数组名称 = {元素 1, 元素 2,...};
注意事项:
1. 静态初始化没有直接指定长度, 但是仍然会自动推算得到长度.
2. 动态和静态初始化可以拆分为两步骤.
3. 静态初始化一旦使用省略模式, 就不能拆分成为两步骤了.
- // 拆分为两步骤.
- int[] array1;
- array1 = new int[7]
- int[] array2;
- array2 = new int[] {
- 3,4,5,6,7
- }
数组元素的访问
直接打印数组名称: 得到的是数组对应的, 内存地址哈希值.
访问数组元素的格式: 数组名称[索引值]
索引值: 就是一个 int 数字, 代表数组当中元素编号.
[注意] : 索引值从 0 开始, 一直到 "数组的长度 - 1" 为止.
使用动态初始化数组的时候, 其中的元素将会自动拥有一个默认值. 如下:
如果是整数类型: 那么默认值为 0
如果是浮点类型: 那么默认值为 0.0
如果是字符类型: 那么默认值为 \ u0000
如果是布尔类型: 那么默认值为 false
如果是引用类型: 那么默认值为 null
注意事项:
静态初始化其实也有默认值, 只不过系统自动马上将默认值替换成为了大括当中的具体数值.
Java 的内存需要划分成为 5 个部分:
1. 栈(Stack): 存放的都是方法中的局部变量. 方法的运行一定要在栈当中运行.
局部变量: 方法的参数, 或者是方法 {} 内部的变量
作用域: 一旦超出作用域, 立从栈内存当中消失.
2. 堆(Heap): 凡是 new 出来的东西, 都在堆当中.
堆内存里面的东西都有一个地址值: 16 进制
堆内存里面的数据, 都有默认值. 规则:
如果是整数类型: 那么默认值为 0
如果是浮点类型: 那么默认值为 0.0
如果是字符类型: 那么默认值为 \ u0000
如果是布尔类型: 那么默认值为 false
如果是引用类型: 那么默认值为 null
3. 方法区(Method Area): 存储. class 相关信息, 包含方法的信息.
4. 本地方法栈(Native Method Stack): 与操作系统相关.
5. 寄存器(pc Register): 与 CPU 相关.
数组操作异常:
数组索引号越界异常
数组的索引编号从 0 开始, 一直到 "数组的长度 - 1" 为止.
如果访问数组元素的时候, 索引号并不存在, 那么将会发生
数组索引号越界异常
ArrayIndexOutOfBoundsException
原因: 索引编号写错了.
解决: 修改成为存在正确索引编号
空指针异常
所有的引用类型变量, 都可以赋值为一个 null 值. 但是代表其中什么都没有.
数组必须进行 new 初始化才能使用其中的元素.
如果只是赋值了一个 null, 没有进行 new 创建, 那么将会发生
空指针异常
NullPointerException
原因: 忘了 new
解决: 补上 new
获取数组的长度
如何获取数组的长度, 格式:
数组名称. length
这将会得到一个 int 数字, 代表数组的长度
数组一旦创建, 程序运行期间, 长度不可改变.
例子: 数组的反转
- public class CaiNaio{
- public static void main(String[] args){
- int[] array = {10,20,30,40,50};
- // 遍历打印数组本来的样子
- for(int i = 0;i<array.length;i++){
- System.out.println(array[i]);
- }
- // 进行反转操作
- for(int min = 0,max = array.length-1;min <max;min++,max--){
- int temp = array[min];
- array[min] = array[max];
- array[max] = array[temp];
- }
- // 再次遍历打印数组
- for(int i = 0;i<array.length;i++){
- System.out.println(array[i]);
- }
- }
- }
数组可以作为方法的参数
当调用方法的时候, 向方法的小括进行传参, 传递进去的其实是数组的地址值.
一个方法可以有 0,1, 多个参数, 但是只能有 0 或者 1 个返回值, 不能有多个返回值.
如果希望一个方法当中产生了多个结果数据进行返回, 怎么办?
解决方案: 使用一个数组作为返回值类型即可.
数组可以作为返回值类型
任何数据类型都能作为方法的参数类型, 或者返回值类型.
数组作为方法的参数, 传递进去的其实是数组的地址值.
数组作为方法的返回值, 返回的其实也是数组的地址值.
来源: http://www.bubuko.com/infodetail-3099593.html