一、数组的概述和静态初始化
数组介绍
数组指的是一种容器,可以用来存储同种数据类型的多个值
- 数组容器在存储数据的时候,需要结合隐式转换考虑
- 例:int类型的数组容器(byte、short、int可以存储)
- 例:double类型的数组容器(byte、short、int、long、float、double可以存储)
数组的定义
第一种:
数据类型 [ ] 数组名
int [ ] array
第二种:
数据类型 数组名[ ]
int array[ ]
数组的静态初始化
- 初始化:就是在内存中,为数组容器开辟空间,并将数据存入容器中的过程
- 完整格式:数据类型 [] 数组名 = new 数据类型[]{元素1,元素2,元素3…};
- 简化格式:数据类型 [] 数组名 = {元素1,元素2,元素3…};
- 例:int[] array = {11,22,33};
- 例:double[] array2 = {11.1,22.2,33.3};
//定义学生年龄
int[] array = new int[]{11, 22, 33};
int[] array1 ={11, 22, 33}; //简写格式
//定义学生身高
double[] array2 = new double[]{1.85, 1.86, 1.87};
double[] array3 = {1.85, 1.86, 1.87};
//定义学生姓名
String[] array4 = new String[]{"张三", "李四", "王五"};
String[] array5 = {"张三", "李四", "王五"};
二、数组的地址值和元素访问
数组的地址值:表示数组在内存中的位置
int[] array1 ={11, 22, 33}; //简写格式
System.out.println(array1);//地址值:[I@776ec8df
//[:表示当前是一个数组
//I:表示当前数组里面的元素都是int类型的
//@:表示一个间隔符号
//776ec8df:数组真正的地址值(十六进制)
元素访问
数组名[索引];
索引:
- 索引:也叫下标,角标。
- 特点:从0开始,逐个+1增长,连续不间断
public class array {
public static void main(String[] args) {
//利用索引对数组中的元素进行访问
int[] arr ={1, 2, 3, 4, 5};
int number = arr[0];
System.out.println(number);
//把数据存储到数组中
arr[0] = 100;
//一但被覆盖后,原来的数据就不存在了
System.out.println(arr[0]);
}
}
三、数组的遍历
利用循环快速的遍历数组
在Java中,关于数组的一个长度属性,length
调用方式:数组名.length
public class array {
public static void main(String[] args) {
int[] array ={1, 2, 3, 4, 5};
//利用循环取出元素
for(int i = 0; i < array.length; i++){
System.out.println(array[i]);
}
}
}
练习1
定义一个数组1,2,3,4,5,并求和
public class array {
public static void main(String[] args) {
int[] arr = {1,2,3,4,5};
//定义求和变量
int count = 0;
for (int i = 0; i < arr.length; i++) {
//i是数组中的索引
//arr[i]是数组中的元素
count = count + arr[i];
}
System.out.println(count);
}
}
练习2
定义一个数组1到10,统计能被3整除的数有多少个
public class array {
public static void main(String[] args) {
int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
//定义统计变量
int count = 0;
for (int i = 0; i < arr.length; i++) {
if(arr[i] % 3 == 0){
count++;
}
}
System.out.println(count);
}
}
练习3
在遍历的过程中修改数组里的元素
定义一个1-10的数组
如果是偶数变成当前数字的二分之一,如果是奇数,扩大两倍
public class array {
public static void main(String[] args) {
int[] arr ={1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
for (int i = 0; i < arr.length; i++) {
if(arr[i] % 2 == 0){
arr[i] = arr[i] / 2;
}else{
arr[i] = arr[i] * 2;
}
}
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}
四、数组的动态初始化
动态初始化:初始化时只指定数组长度,由系统为数组分配初始值
- 格式:数据类型[] 数组名 = new 数据类型[数组长度];
- 范例:int[] arr = new int[3];
定义一个动态初始化数组并赋值
public class array {
public static void main(String[] args) {
//假如新生有50人来报道,暂时不知道姓名,所以定义一个动态数组
String[] arr = new String[50];
//进行赋值
arr[0] = "张三";
arr[1] = "李四";
System.out.println(arr[0]);//张三
System.out.println(arr[1]);//李四
System.out.println(arr[2]);//null-动态初始化值
}
}
数组默认初始化值的规律
- 整数类型:默认初始化值0
- 小数类型:默认初始化值0.0
- 字符类型:默认初始化值’/u0000’ 空格
- 布尔类型:默认初始化值 false
- 引用数据类型:默认初始化值 null
静态初始化和动态初始化区别
动态初始化:手动指定数组长度,由系统给出默认初始化值
- 只明确元素个数,不明确具体数值,推荐使用动态初始化
静态初始化:手动指定数组元素,系统会根据元素个数,计算出数组的长度
- 需求中已经明确了要操作的具体数据,直接静态初始化就可以