本文涵盖数组基础语法、内存原理、遍历最值、二分查找、数组反转、评委打分实战,附大厂面试思路+IDEA技巧+职场心得,Java新手必看!

摘要
本篇为Java SE入门第三天核心笔记,聚焦数组这一核心数据结构,从基础定义、两种初始化方式,到内存原理、遍历最值操作,再到大厂高频面试算法(二分查找、数组反转)和实战评委打分案例,全程保姆级讲解,同时包含IDEA实用配置、职场软技能干货,适合零基础小白快速掌握数组核心知识。
一、前置干货:工具配置 + 职场成长指南
1. 学习理念
打牢基础,菜就多练!Java学习无捷径,反复敲代码、理解原理是核心;包的作用:用来管理Java类,避免类名冲突,企业开发必备。
2. IDEA 实用配置(护眼+开发效率)
- 主题配色:白天使用浅蓝色主题,晚上使用黑色主题,保护视力;
- 黄色警告线:IDEA中代码下方的黄线 = 警告⚠️,不影响代码运行,但建议优化规范;
- 快速生成变量、自动补全,提升编码速度。


3. 职场软技能(必看!)
- 情商+表达力:学会主动沟通、提供情绪价值,职场中圆滑处事更容易获得机会;
- 面试心态:不要害怕失败,通常需要经历20-30场面试才能拿到满意offer;
- 坚持就是胜利:只要持续努力,一定能在行业内拥有一席之地。
二、数组核心基础
1. 数组定义
数组是用来存储同种数据类型 的多个元素的容器,数组一旦创建,长度不可改变。
2. 数组定义格式
java
// 标准格式(推荐)
数据类型[] 数组名;
// 举例:存储int类型的数组
int[] array;
✅ 语法规范:方法带括号(),属性不带括号!
三、数组的两种初始化方式(核心)
初始化:为数组分配内存空间,并赋值。
1. 动态初始化
- 定义时只指定长度,由系统默认赋值;
- 适用场景:不确定元素具体值,只确定长度。
java
// 格式:数据类型[] 数组名 = new 数据类型[长度];
int[] arr = new int[6]; // 长度为6的int数组,默认值:0
2. 静态初始化
- 定义时直接指定元素值,系统自动计算长度;
- 适用场景:已知所有元素值。
java
// 标准格式
int[] arr = new int[]{5,13,19,21};
// 简化格式(最常用)
int[] arr = {5,13,19,21,37};
四、数组核心操作
1. 数组遍历
依次访问数组中的每一个元素,明确循环次数,优先使用for循环。
java
int[] arr = {10,20,30,40};
// 数组长度:数组名.length
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]); // 打印每个元素
}
2. 数组获取最值(最大值/最小值)
java
int[] arr = {12,56,3,78,23};
int max = arr[0]; // 假设第一个元素为最大值
int min = arr[0]; // 假设第一个元素为最小值
for (int i = 1; i < arr.length; i++) {
if(arr[i] > max) max = arr[i];
if(arr[i] < min) min = arr[i];
}
System.out.println("最大值:"+max);
System.out.println("最小值:"+min);
五、大厂面试算法:二分查找

1. 核心前提
数组必须有序 + 元素不重复,效率远高于普通查找!
2. 实现思路
- 定义查找范围:起始索引
start=0,结束索引end=数组长度-1; - 计算中间索引
mid; - 比较中间值和目标值:
- 相等 → 找到,返回索引;
- 中间值大 → 目标在左侧,修改
end=mid-1; - 中间值小 → 目标在右侧,修改
start=mid+1;
- 循环结束未找到 → 元素不存在。
3. 完整代码
java
package com.yangque;
public class BinarySearchDemo {
public static void main(String[] args) {
// 二分查找的前提:数组必须 有序!
int[] arr = {5,13,19,21,37,56,64,75,80,88,92};
int start = 0; // 查找范围起点
int end = arr.length-1; // 查找范围终点
int value = 15; // 要查找的目标值
// 不明确循环次数 → 使用while循环
while (start <= end) {
// 计算中间位置
int mid = (start + end) / 2;
// 找到目标值
if(arr[mid] == value) {
System.out.println(value + "找到了,下标为:" + mid);
return;
}
// 目标值在左侧
else if (arr[mid] > value) {
end = mid - 1;
}
// 目标值在右侧
else {
start = mid + 1;
}
}
// 循环结束 → 未找到
System.out.println("没有找到数字:" + value);
}
}
4. 大厂面试回答思路
如果写不出完整代码,口述思路即可:
二分查找需要有序数组,我会定义首尾索引,不断取中间值比较,缩小查找范围,直到找到元素或范围失效,这种方式时间复杂度更低,效率更高。
六、大厂面试算法:数组反转
1. 核心思路(最简单,面试必背)
- 双指针法:开头一个指针,结尾一个指针;
- 交换两个指针指向的元素;
- 指针向中间移动,直到相遇。
2. 简化理解
交换:第1个 ↔ 最后1个,第2个 ↔ 倒数第2个,以此类推。
七、数组实战案例:评委打分
1. 需求
6个评委打分(0-100),去掉一个最高分、一个最低分,计算剩余4个分数的平均值。
2. 解题思路
- 定义长度为6的数组,存储评委分数;
- 键盘录入6个分数;
- 遍历数组求总和、最大值、最小值;
- 平均分 = (总和 - 最大值 - 最小值) / 4;
- 输出结果。
3. 完整代码
java
package com.yangque;
import java.util.Scanner;
public class ScoreDemo {
public static void main(String[] args) {
// 1. 动态初始化数组,长度6
int[] scores = new int[6];
Scanner sc = new Scanner(System.in);
// 2. 循环录入6个分数
for (int i = 0; i < scores.length; i++) {
System.out.println("请输入第"+(i+1)+"个评委分数:");
scores[i] = sc.nextInt();
}
// 3. 求总和、最大值、最小值
int sum = 0;
int max = scores[0];
int min = scores[0];
for (int i = 0; i < scores.length; i++) {
sum += scores[i];
if(scores[i] > max) max = scores[i];
if(scores[i] < min) min = scores[i];
}
// 4. 计算平均分
int avg = (sum - max - min) / 4;
System.out.println("选手最终得分:" + avg);
}
}
八、数组内存原理(新手必懂)
- Java内存分为栈、堆等区域;
- 数组名存储在栈内存,保存数组的地址值;
- 数组元素存储在堆内存,数组通过地址值找到元素;
- 数组初始化时,堆内存会自动分配默认值(int→0,String→null)。

重点:方法区存字节码文件,方法栈存方法和变量,堆内存存new出来的对象

九、数组常见问题 + 异常机制
1. 数组操作常见问题
- 索引越界异常:访问了数组不存在的索引(
索引 ≥ 数组长度); - 空指针异常:数组名赋值为
null,无法访问元素。
2. 异常机制
代码出现异常 → JVM会直接终止当前进程 → 后续代码不再执行!
十、循环补充:for 和 while 选择规则
- 明确循环次数 → 优先使用
for循环(数组遍历、固定次数执行); - 不明确循环次数 → 优先使用
while循环(二分查找、死循环)。
十一、Day03 核心总结
- 数组:存储同种数据类型,长度固定,分动态/静态初始化;
- 核心操作:遍历(for)、求最值、索引访问;
- 高频算法:二分查找(有序数组)、数组反转(双指针);
- 实战案例:评委打分(综合练习数组+键盘录入+循环);
- 内存:数组名存栈,元素存堆;异常会终止程序运行;
- 规范:包管理类,IDEA配置护眼,基础不牢地动山摇!