Java中的数组
与变量一样在程序编写过程中进行数据的存储操作,与变量不同的是数组是引用数据类型,可以存储多个相同数据类型的数据
数组概念
数组是存储同一种数据类型多个元素的集合。也可以看成是一个容器。
数组既可以存储基本数据类型,也可以存储引用数据类型。
用于存储具有相同数据类型的多个数据的容器称之为数组
数组可以存储任意数据类型的数据(数组可以存储所有类型数据)
因为数组保存数据格式的特殊性,所以声明与创建与平常的变量声明与引用数据类型对象的创建有些不同
数组的定义格式
数组的声明:
数组与变量都是用来保存数据,所以为了与变量声明相区分 加[]
格式1:数据类型[] 数组名;
格式2:数据类型 数组名[];
注意:这两种定义做完了,数组中是没有元素值的。
数组的创建:
Java中的数组必须先初始化,然后才能使用。
所谓初始化:就是为数组中的数组元素分配内存空间,并为每个数组元素赋值。
数组的初始化方式
动态初始化:初始化时只指定数组长度,由系统为数组分配初始值。
静态初始化:初始化时指定每个数组元素的初始值,由系统决定数组长度。
// 用于存储具有相同数据类型的多个数据的容器称之为数组
// 数组可以存储任意数据类型的数据(数组可以存储所有类型数据)
// 数组的使用分为4步
// 1声明 2创建 3初始化赋值 4使用
// 数组的声明
// 1、数组中保存数据的数据类型 [] 数组名; 常用写法
// 声明一个保存指定数据类型的数组 名为 数组名
int[] ages1;
// 2、数组中保存数据的数据类型 数组名 [];
// 声明一个保存指定数据类型的名为 数组名的 数组
int ages2[];
// 数组的创建
// 创建指定数据类型的数组并长度
// 动态创建 new 指定数据类型 [数组保存数据长度]
// 创建一个新的指定数据类型的数组 长度为指定长度(存放数据的长度)
// 并赋值给以声明好的数据变量(要求两数据类型一致)
// 创建一个新的int类型的长度为26的数组对象并赋值给数组变量 ages1
ages1 = new int[26];
// 通常与变量一样 将数组的声明与创建一同进行且使用动态创建后会为每个位置
// 数据赋保存数据类型的默认值
// 静态创建 保存数据的数据类型 [] 数组名={数据1,数据2,...};
// 将数组的声明 创建 赋值操作一同进行
// 将要保存的数据以大括号包裹,数据之间以逗号分隔
// 声明后使用{}中数据的数据类型创建指定类型的数组,大括号中数据的个数
// 创建指定长度,并使用数据将指定位置赋值
int[] ages3 = { 2, 1, 3, 3, 4, 4, 34, 3, 3, 3, 23, 2, 32, 2 };
// 数组的赋值与修改
// 通常在声明创建结束后使用动态创建已经默认值赋值完毕,但仍需要对不同位置的
// 数据重新赋值
// 数组的赋值操作与使用都是通过数组名[下标(索引)]的形式进行操作
ages3[0] = 1;
// 数组的使用
// 与赋值相同直接通过数组名[索引]的形式进行操作
System.out.println(ages3[12]);
Java 程序在运行时,需要在内存中的分配空间。为了提高运算效率,就对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式。
栈 存储局部变量
堆 存储new出来的东西
方法区 (面向对象部分重点讲)
本地方法区 (和系统相关)
寄存器 (给CPU使用)
为了更好的运行程序,不同数据处理方式不同,回收机制不同,java分配了不同的用于存储不同类型数据的空间,每个空间有其单独的处理方式回收机制,从而提高运行效率
数组存储数据开辟空间与变量的区别
内存空间的大小在创建时就已经固定了,数组不允许存储除指定数据类型外的数据,存储数据的个数也不允许修改(不能超过设置长度)
数组操作常见的两个小问题
数组索引
使用了数组索引范围中不存在的索引值
空指针异常
对数组只进行了声明操作
增强for循环 foreach
用于数据的遍历操作
// foreach
// 增强for循环
// 用于数据集合的遍历
// 将数据逐条取出进行操作
// 语法 for(取出数据的数据类型 标识符 :要遍历的数据集合 ){}
for (String str : arr) {
System.out.print(str);
}
System.out.println();
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]);
}
System.out.println();
//区别:
//1、语法区别
//foreach只需要声明变量与指定遍历的数组
//2、流程不同
//for是根据自定义初始值索引使用数组名[索引]的形式对数据进行获取等操作
//foreach是从头开始逐条获取 将获取的值赋值给中间变量
//3、用法不同
//for循环用于遍历操作(修改)
//foreach只能用于遍历 且只能全部遍历
String补充方法
String str="a,b,v,c,d,d,d,s";
//toCharArray 将字符串拆分成字符数组
char[] charArray = str.toCharArray();
// for (char c : charArray) {
// System.out.println(c); }
//toCharArray 将字符串拆分成字节数组
byte[] bytes = str.getBytes();
for (byte b : bytes) {
//System.out.print((char)b);}
//copyValueOf 以指定字符数组创建字符串
String copyValueOf = String.copyValueOf(charArray);
String copyValueOf2 = String.copyValueOf(charArray, 2, 4);
//System.out.println(copyValueOf2)
//split 以指定字符分割字符串为字符串数组
String[] split = str.split(",");
for (String string : split) {System.out.println(string);}