博客说明:
- 仅是作为学习过程中的记录笔记,便于后期复习并不断修改完善
- 欢迎阅读、沟通和指正,谢谢
- 资料来源:包括但不限于B站、博客、淘宝、书籍等
数组与方法
一、数组
1、数组的定义格式
-
数组介绍
- 数组(array)是一种容器,用来存储同种数据类型的多个值
- 注:数组容器在存储数据的时候,需要结合数据类型考虑
-
数组容器的使用场景
- 如果今后要操作的数据,是同一组数据,就可以使用数组容器进行存储
-
数组的定义格式
-
格式一:数据类型[] 数组名(建议这个)
- 例如:
int[] score
- 例如:
-
格式二:数据类型 数组名[]
- 例如:
int score[]
- 例如:
注:仅仅这样写只定义了一个数组类型的变量,尚未初始化
2、数组的动态初始化
- 动态初始化
- 初始化时只指定数组长度,由系统为数组分配初始值
格式:
-
数据类型[] 变量名 = new 数据类型[数组长度];
-
例:
int[] arr = new int[3];
public class Demo1 {
/*
[I@1540e19d
[:表示这是一个数组
I:表示当前数组容器存放的数据类型
@:表示分隔符
1540e19d:表示16进制的内存地址
*/
public static void main(String[] args) {
int[] age = new int[5];
System.out.println(age);
// 打印数组变量名时,会出现数组的 [I@1540e19d 内存地址
System.out.println(age[2]);
// 默认是0
}
}
注:初始化的时候,手动指定数组长度,系统会为数组容器分配初始值
3、数组的元素访问
-
索引是数组中空间的编号
-
特征1:索引从0开始
-
特征2:索引是连续的
-
特征3:索引逐一增加,每次加1
-
-
作用:访问数组容器中的空间位置
注:数组在创建完毕后。即使没有赋值,也可以取出,但取出的元素都是默认初始化值
数据类型 | 默认值 |
---|---|
整数 | 0 |
浮点数 | 0.0 |
布尔 | false |
字符 | 空字符 |
引用数据类型 | null |
4、内存分配☆
-
Java中内存分配
- Java程序在运行时,需要在内存中分配空间
- 为了提高运算效率,就对空间进行了不同区域的划分,每一片区域都有特定的处理数据方式和内存管理方式
-
栈内存:方法运行时,进入内存,局部变量都存放于这块内存当中
-
堆内存:new出来的内容都会进入堆内存,并且会存在16进制的地址值
-
方法区:字节码文件(.class文件)加载时进入的内存
-
本地方法栈:调用操作系统相关资源
-
寄存器:交给CPU去使用
例:
引用数据类型:引用、记录了地址值的变量,所对应的数据类型,就是引用数据类型
注:每new一次,在堆内存中,都是一块新的空间,堆内存中的空间地址不会出现重复的现象
5、 数组初始化之静态初始化
-
静态初始化
- 初始化时,就可以指定数组要存储的元素,系统还会自动计算出该数组的长度
-
格式:
数据类型[] 变量名 = new 数据类型[]{数据1, 数据2, ......};
- 例:
int[] arr = new int[]{1, 2, 3};
- 例:
-
简化格式:
数据类型[] 变量名 = {数据1, 数据2, ......};
- 例:
int[] arr = {1, 2, 3};
- 例:
注:简化的是书写格式,依旧会new开辟堆的内存空间
-
两种初始化的区别对比
- 动态初始化:手动指定数组长度,由系统给出默认初始化值
- 静态初始化:手动指定数组元素,系统会根据元素的个数,计算出数组的长度
-
使用场景
-
动态初始化:只明确元素个数,不明确具体数值,推荐使用动态初始化
-
静态初始化:需求中已经明确了要操作的数据,直接静态初始化即可
-
6、数组操作的两个常见的小问题
-
索引越界:访问了数组中不存在的索引,造成索引越界问题
-
空指针异常:访问的数组已经不再指向堆内存的数据,造成空指针异常
public class Demo2 {
public static void main(String[] args) {
int[] array = new int[3];
// System.out.println(array[3]); 访问越界
// Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
System.out.println(array[1]);
array = null;
// System.out.println(array[1]); 空指针异常
// Exception in thread "main" java.lang.NullPointerException
}
}
注:null空值,引用数据类型的默认值,表示不指向任何有效对象
7、数组常见操作
- 遍历
- 数组遍历:将数组中所有的数据取出来
- 数组名.length 获取数组的长度
public class Demo3 {
public static void main(String[] args) {
int[] arr = {
1, 2, 3, 4, 5, 6, 7, 8, 9};
System.out.println("数组元素的个数" + arr.length);
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
}
}
- 获取最值
public class Demo4 {
public static void main(String[] args) {
int[] arr = {
121, 25, 23, 584, 554, 66, 17};
int max = arr[0];
int min = arr[0];
for (int i = 1; i < arr.length; i++) {
if(max < arr[i]){
max = arr[i];
}
if(min > arr[i]){
min = arr[i];
}
}
System.out.println("max = " + max);
System.out.println("min = " + min);
}
}
- 数组元素求和
键盘录入n个整数,存储到数组中,并对数组求和
import java.util.Scanner;
public class Demo5 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("请输入你要输入的多少个数:");
int le