数组
概述
- 一次性声明大量的用于存储数据的变量
- 这写存储的数据一般都是相同的数据类型
- 数组是一个用于存储多个相同类型数据的存储模型
数组的定义
-
范例1
int [] arr;(推荐使用)
含义:先定义数组,在定义数组名
-
范例2
int arr [];
含义:先定义数组名,在定义数组;
数组的初始化
- 动态初始化
- int [] arr = new int[5];
1.int 数组的数据类型 []代表数组
2. arr代表的数组名
3. 第二个int 表示的时数组的数据类型要与前面定义的相同
4.[5]表示定义了一个数组长度为5的数组[0-4]
5.数组会分配一个初始值,值是多少油数据类型决定
package com.ygc;
/**
* @author: YGC
* @createTime: 2023/08/16 22:30
* @blogs: https://www.cnblogs.com/ygcDiary
* @description: 数组
*/
public class ArrayDemo {
public static void main(String[] args) {
int [] arr = new int[5];
/*
1.int 数组的数据类型 []代表数组
2. arr代表的数组名
3. 第二个int 表示的时数组的数据类型要与前面定义的相同
4.[5]表示定义了一个数组长度为5的数组[0-4]
5.数组会分配一个初始值,值是多少油数据类型决定
* */
}
}
数组的访问
需要注意的是,数组从0开始计算
public class ArrayDemo {
public static void main(String[] args) {
int[] arr = new int[5];
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
int c = arr[2];
System.out.println("c=" + c);
}
}
数组的内存分配
- 做new操作时都会将该对象(实例)存放在堆内存中
- 堆内存会将该实例的地址赋值给栈内存,也就是定义数组的时候的数组名
- 此时输出的是该数组在堆内存中的地址,用于栈内存访问
System.out.println(arr);//[I@4554617c
访问顺序
执行程序时,先根据栈内存中的地址,访问到堆内存,然后根据下标找到对应的数
注意事项
- 数组在初始化的时候,会为存储空间分配默认值
int :0
double :0.0
boolean :false
String : 空字符
- 如果数组指向相同的堆内存地址,则不会在开辟新的空间,而是将原来的空间取代
package com.ygc;
public class ArrayDemo {
public static void main(String[] args) {
int [] arr1 = new int[5];
arr1[0] = 100;
arr1[1] = 50;
System.out.println(arr1);//[I@4554617c
System.out.println(arr1[0]);
System.out.println(arr1[1]);
int [] arr2 = arr1 ;//将内存赋值给arr2
arr2[0] = 300;
arr2[1] = 10;
System.out.println(arr2);//[I@4554617c
System.out.println(arr2[0]);//300
System.out.println(arr2[1]);//10
System.out.println(arr1[0]);//300
System.out.println(arr1[1]);//10
}
}
栈内存
- 栈内存是一片存储区域,用来存储局部变量
- 堆内存:凡是通过new建立的都是在堆内存中,存放的都是 实体(对象 )
数组静态初始化
静态初始化指的就是,在数组初始化的时候,赋给数组值,并由系统决定数组的长度
格式
int [] arr = new int[]{1,2,3}
数组类型[] 数组名 = new 数组类型[]{数组元素}
简化
int[] arr = {1,2,3};
数组类型[] 数组名 = {数组元素}
package com.ygc;
/**
* @author: YGC
* @createTime: 2023/08/17 9:57
* @blogs: https://www.cnblogs.com/ygcDiary
* @description: 静态数组
*/
public class ArrDemo01 {
public static void main(String[] args) {
/*定义一个静态数组*/
int[] arr = {1,2,3,4};
int[] arr1 = new int[]{1,2,3,4,5};
System.out.println(arr[0]);
System.out.println(arr1[4]);
}
}
常见问题
- 数组访问越界,意思是定义了一个四个长度的数组却引用了第五个元素
package com.ygc;
/**
* @author: YGC
* @createTime: 2023/08/17 10:01
* @blogs: https://www.cnblogs.com/ygcDiary
* @description: 数组常见错误
*/
public class ArrDemo02 {
public static void main(String[] args) {
int[] arr = {1, 2, 3, 4};
System.out.println(arr[4]);
}
}
//错误代码
/*Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4
at com.ygc.ArrDemo02.main(ArrDemo02.java:12)*/
- 空指针异常,意思是原数组已经不在堆内存中具有地址,但你仍然使用数组名访问数组元素
package com.ygc;
/**
* @author: YGC
* @createTime: 2023/08/17 10:01
* @blogs: https://www.cnblogs.com/ygcDiary
* @description: 数组常见错误
*/
public class ArrDemo02 {
public static void main(String[] args) {
int[] arr = {1, 2, 3, 4};
arr = null;
System.out.println(arr[3]);
/*空指针异常
java.lang.NullPointerException
*/
}
}
数组遍历
使用for循环实现数组的遍历
package com.ygc;
/**
* @author: YGC
* @createTime: 2023/08/17 10:18
* @blogs: https://www.cnblogs.com/ygcDiary
* @description: 遍历数组
*/
public class ArrDemo03 {
public static void main(String[] args) {
int[] arr = {1,2,3,4};
for (int i = 0; i < 4; i++) {
System.out.println(arr[i]);
}
}
}
使用API进行数组的遍历
arr.length:表示的是数组的长度,数组元素的个数,不是数组的下标
package com.ygc;
/**
* @author: YGC
* @createTime: 2023/08/17 10:18
* @blogs: https://www.cnblogs.com/ygcDiary
* @description: 遍历数组
*/
public class ArrDemo03 {
public static void main(String[] args) {
int[] arr1 = {66,77,88,99};
for (int i = 0; i < arr1.length; i++) {
System.out.println(arr1[i]);
}
}
}
练习
- 输出数组的一个最大值
package com.ygc;
/**
* @author: YGC
* @createTime: 2023/08/17 10:39
* @blogs: https://www.cnblogs.com/ygcDiary
* @description: 数组获取最大值
*/
public class ArrExer01 {
public static void main(String[] args) {
int tempMax = 0;
int max = 0;
int[] arr = {170,162,131,168,190};
/*此时arr.length不满足条件,因为下面需要使用arr[i+1],会使数组下标越界*/
for (int i = 0; i < arr.length-1; i++) {
if (arr[i] > arr[i+1]) {
tempMax = arr[i];
arr[i+1] = arr[i];
arr[i+1] = tempMax;
}
max = arr[i+1];
}
System.out.println("最大的值是:"+max);
}
}
package com.ygc;
/**
* @author: YGC
* @createTime: 2023/08/17 10:22
* @blogs: https://www.cnblogs.com/ygcDiary
* @description: 获取数组最大值练习
*/
public class ArrExer {
public static void main(String[] args) {
int[] arr = {170,162,131,168,190};
int max = arr[0];
for (int i = 0; i < arr.length; i++) {
if (arr[i] > max) {
max = arr[i];
}
}
System.out.println("最大的值是:"+max);
}
}
标签:arr,int,System,数组,println,out
From: https://www.cnblogs.com/ygcDiary/p/17637062.html