Java学习笔记30——数组
数组
数组概念
1、数组是存储同一数据类型的多个元素的集合,暂时理解为一个容器
2、数组既可以存储基本数据类型,也可以存储引用数据类型
数组的定义格式
格式1:数据类型[] 数组名;
举例:int[] arr1
格式2:数据类型 数组名[];
举例:double arr2[]
注意
这两种定义做完了,数组中是没有元素值的。
针对于这两种定义数组的格式,推荐使用第一种,因为第一种的定义格式
可读性更强。早期的时候很多人喜欢用第二种,但是慢慢地发展,使用第一种的人越来越多了
如果说只是简单地定义了一个数组,但是呢,数组里面却没有值,没有任何意义。
所以要想使用它,就必须先做初始化。
什么叫初始化?
就是为数组中地元素进行分配内存空间,并且为元素赋值。
如何对数组的元素进行初始化呢?
1、动态初始化:初始化时只指定数组长度,由系统为数组分配初始值。
先不赋值
2、静态初始化:初始化时指定每个数组元素的初始值,由系统决定数组长度。
先赋值
动态初始化
初始化时只指定数组长度,由系统为数组分配初始值。
格式:数据类型[] 数组名 = new 数据类型[数组长度];
数组长度其实就是数组中元素的个数。
举例:
int[] arr = new int[3];
解释:定义了一个int类型的数组,这个数组中可以存放3个int类型的值。
public class ArrayDemo1 {
public static void main(String[] args) {
//定义一个数组,int类型地数组
// int[] arr;
//单独使用是没有任何意义地,因为尚未初始化变量arr,未初始化之前不能使用
// System.out.println(arr);
//动态初始化的方式定义一个int类型的数组,长度为3
int[] arr = new int[3];
/**
* 左边:
* int: 说明数组中的元素的数据类型是int类型
* []: 说明它是一个数组类型
* arr: 给数组起个名字
*
* 右边:
* new: 代表为数组分配一个内存空间
* int: 说明数组中的元素的数据类型是int类型
* []: 说明它是一个数组
* 3: 代表着数组的长度,其实这里的3就是数组元素的个数
*
* 学生[] 一班 = new 学生[50];
*
*/
System.out.println(arr); //[I@4554617c 地址值 十六进制的
//但是呢,在实际编写代码的过程中,拿到地址值是没有任何意义的,我们大多数情况下
//实际上是想获取数组的元素值,怎么获取呢?
//数组里面提供了一个类似于编号的作用的东西,我们称之为索引(下标)
//如何通过索引获取数组中的元素呢?
//语法格式:
// 数组的名称[索引]
//注意:索引的编号是从0开始的,从左往右的顺序编号。
//获取arr数组中的第一个元素
System.out.println(arr[0]);
//获取arr数组中的第二个元素
System.out.println(arr[1]);
//获取arr数组中的第三个元素
System.out.println(arr[2]);
}
}
Java中的内存分配
Java 程序在运行时,需要在内存中的分配空间。为了提高运算效率,就对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式。
栈:存储局部变量方法中定义的变量都称之为局部变量
堆:存储new出来的东西
方法区(面向对象的时候说)
本地方法区(和系统相关)
寄存器(给CPU使用)
int[] arr = new int[3];
System.out.println(arr);//地址值
System.out.println(arr[0]);//0
System.out.println(arr[1]);//0
System.out.println(arr[2]);//0
============================================================================================
堆内存的特点:
1、堆内存中放的都是new出来的东西
2、每个变量都有一个系统给的默认值,这个默认值根据数据类型不同,默认值也不同
| 数据类型 | 默认值 |
|---|---|
| byte,short,int,long | 0 |
| float,double | 0.0 |
| char | ' \u0000 ' |
| boolean | false |
| 引用数据类型 | null |
我们知道了如何定义一个数组,以及如何获取数组
中的每个元素。但是,此时数组中的元素的值是系统默认给的值,大多数情况下
我们定义一个数组,实际上想存的是我们自己给的值
如何将我们想给的值赋值给数组中的元素呢?
public class ArrayDemo2 {
public static void main(String[] args) {
//动态初始化定义一个数组,元素是int类型的,元素个数为3个
int[] arr = new int[3];
//定义完数组后,输出数组的名字和各个元素值
System.out.println(arr);
//输出数组中每个元素的值
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
//需求:想要把10,20,30这个三个值分别赋值给数组中的第一个元素,第二个元素
//第三个元素
arr[0] = 10;
arr[1] = 20;
arr[2] = 30;
//再打印数组的名字以及数组中的元素
System.out.println(arr);
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
}
}
定义两个数组,分别输出数组名及元素。int类型的数组
然后分别给数组中的元素赋值,分别再次输出数组名及元素。
public class ArrayDemo3 {
public static void main(String[] args) {
//定义一个数组(动态初始化的方式)
int[] arr1 = new int[3];
arr1[0] = 11;
arr1[1] = 22;
arr1[2] = 33;
System.out.println(arr1);//[I@1540e19d
System.out.println(arr1[0]);//11
System.out.println(arr1[1]);//22
System.out.println(arr1[2]);//33
//定义第二个数组(动态初始化的方式)
int[] arr2 = new int[4];
arr2[0] = 44;
arr2[1] = 55;
arr2[2] = 66;
System.out.println(arr2);//[I@677327b6
System.out.println(arr2[0]);//44
System.out.println(arr2[1]);//55
System.out.println(arr2[2]);//66
System.out.println(arr2[3]);//0(系统默认值)
}
}
定义两个数组,先定义一个数组,赋值,输出。
然后定义第二个数组的时候把第一个数组的地址赋值给第二个数组。
然后给第二个数组赋值,再次输出两个数组的名及元素。
public class ArrayDemo4 {
public static void main(String[] args) {
int[] arr1 = new int[3];
arr1[0] = 11;
arr1[1] = 22;
arr1[2] = 33;
int[] arr2 = arr1 ;
arr2[0] = 100;
arr2[1] = 200;
System.out.println(arr1);//[I@1540e19d
System.out.println(arr1[0]);//100
System.out.println(arr1[1]);//200
System.out.println(arr1[2]);//33
System.out.println("===========================================");
System.out.println(arr2);//[I@1540e19d
System.out.println(arr2[0]);//100
System.out.println(arr2[1]);//200
System.out.println(arr2[2]);//33
}
静态初始化
静态初始化:初始化时指定每个数组元素的初始值,由系统决定数组长度。
格式:
数据类型[] 数组名 = new 数据类型[]{元素1,元素2,…};
举例:
int[] arr = new int[]{1,2,3};
解释:定义了一个int类型的数组,这个数组中可以存放3个int类型的值,
并且值分别是1,2,3。
其实这种写法还有一个简化的写法
int[] arr = {1,2,3};
注意事项
1、大括号中值要和定义数组的时候数据类型要一致
2、使用静态初始化的时候,右边的中括号中不允许出现数字
如果出现了,就意味着,定义的时候既有动态初始化,也有静态初始化
两者不能混淆
int[] arr1 = new int[5]{1,2,3,4,5};//错误
3、当初始值不是0的时候,推荐使用静态初始化
public class ArrayDemo5 {
public static void main(String[] args) {
//静态初始化定义数组给11,22,33,44,55
int[] arr = new int[]{11,22,33,44,55};
// int[] arr1 = new int[5]{1,2,3,4,5};
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
System.out.println(arr[3]);
System.out.println(arr[4]);
//静态初始化简化版
int[] arr2 = {100,200,300};
System.out.println(arr2[0]);
System.out.println(arr2[1]);
System.out.println(arr2[2]);
//ArrayIndexOutOfBoundsException: 3
//数组下标索引越界异常,没有对应的索引
// System.out.println(arr2[3]);
arr2 = null;
//NullPointerException 空指针异常,说明没有任何实例
// System.out.println(arr2[0]);
}
}
数组遍历
/*
数组遍历(依次输出数组中的每一个元素)
*/
public class ArrayDemo6 {
public static void main(String[] args) {
//定义一个数组
int[] arr = new int[8];
arr[0] = 11;
arr[1] = 22;
arr[2] = 33;
arr[3] = 44;
arr[4] = 55;
arr[5] = 66;
arr[6] = 77;
arr[7] = 88;
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
System.out.println(arr[3]);
System.out.println(arr[4]);
System.out.println(arr[5]);
System.out.println(arr[6]);
System.out.println(arr[7]);
System.out.println("======for循环改进============");
for(int i=0;i<8;i++){
System.out.println(arr[i]);
}
System.out.println("=====for循环改进2=================");
//由于我们上面的数组arr可以一眼就能数清有多少个元素,所以在循环的时候,可以
//确定一个范围
//但是呢,当我们数组中的元素有非常多的时候,这时候就不一定能数清了
//如果有一个办法可以获取数组元素的个数就好了
//java中的数组提供一个属性,可以让我们获取到数组的长度
//这个属性的名字叫做:length
//使用格式:
// 数组名称.length
int[] arr2 = {3123,12,43,4,423,12,32,4,12,312,41,3,1,45324,23,4,3,12,3,21,412,3,21,3,21,4,21,3,213,43,5,4,554,3,432,4,2,23,4,2};
System.out.println(arr2.length);
for(int i=0;i<arr2.length;i++){
if(i==arr2.length-1){
System.out.println(arr2[i]+"]");
}else if(i==0){
System.out.print("["+arr2[i]+",");
}else {
System.out.print(arr2[i]+",");
}
}
System.out.println("=====用方法改进打印arr2======================");
printArray(arr2);
System.out.println("=====用方法改进打印arr======================");
printArray(arr);
}
/**
* 返回值类型:void
* 参数列表:int[]
*
*/
public static void printArray(int[] array){
for(int i=0;i<array.length;i++){
if(i==array.length-1){
System.out.println(array[i]+"]");
}else if(i==0){
System.out.print("["+array[i]+",");
}else {
System.out.print(array[i]+",");
}
}
}
}

浙公网安备 33010602011771号