一.Arrays 数组工具类(重点)
Arrays 是 Java 提供的数组专用工具包,不用自己手写复杂逻辑,直接调用方法操作数组,非常便捷。
1. 第三种打印数组方式:Arrays.toString()
之前打印数组需要手写循环,现在可以直接使用工具类:
• 语法:Arrays.toString(数组名)
• 作用:把整个数组整体转为字符串格式输出
• 使用特点:需要定义字符串变量接收结果,或直接打印
int[] arr = {1,3,2};
String res = Arrays.toString(arr);
System.out.println(res);
// 输出:[1, 3, 2]
2. Arrays.sort() 数组自动排序
• 语法:Arrays.sort(数组名)
• 作用:对数组从小到大自动升序排序
• 无需手动写排序逻辑,底层封装好算法
3. Arrays.equals() 判断两个数组是否相等
• 作用:比较两个数组的元素、长度、顺序是否完全一致
• 返回值:布尔值 true / false
4. Arrays.fill() 数组批量填充
• 作用:自动给数组所有元素统一赋值填充
• 适合快速初始化数组所有数据
5. Arrays.copyOf() 数组拷贝
• 作用:复制原数组,生成一个新数组
• 可以自定义新数组长度,实现扩容、缩容效果
6. 二分查找(Arrays工具类)
• 前提:数组必须先排序
• 作用:快速查找指定元素的下标位置,效率极高
二、数组经典算法(今日补充重点)
1. 冒泡排序
核心思想:
相邻两个元素两两比较,如果顺序错误就交换位置,每一轮排序都会把当前最大值“冒泡”到末尾。
• 作用:实现数组从小到大排序
• 属于基础手写排序算法,区别于工具类自带 sort
2. 数组逆序
核心思想:
首尾对应位置元素互换,中间位置结束循环。
• 效果:原数组顺序反转(1,2,3 → 3,2,1)
3. 二分查找
• 适用:有序数组
• 原理:每次砍掉一半查找范围,快速锁定目标元素下标
三、二维数组
1. 概念
二维数组是特殊的一维数组:
• 外层数组的每一个元素,又是一个一维数组
2. 三种定义方式
1. 标准动态初始化:数据类型[][] 数组名 = new 类型[行数][列数];
2. 只定义行数、未定列数(不规则数组可用):数据类型[][] 数组名 = new 类型[行数][];
3. 静态初始化:数据类型[][] 数组名 = {{1,2},{3,4,5}};
3. 获取行列长度
• 获取总行数:数组名.length
• 获取指定行的列数:数组名[i].length
4. 三种遍历打印方式
1. 普通双层for循环:外层遍历行,内层遍历每一行的列元素
2. 增强for-each循环:简洁遍历所有元素,无需下标
3. Arrays.deepToString() 专用二维数组打印
• 普通 Arrays.toString() 打印二维数组只会输出地址值
• Arrays.deepToString(二维数组名):直接打印所有内层数值,是二维数组专属打印方式
5. 规则与不规则二维数组
• 规则二维数组:每一行的列数全部相同
• 不规则二维数组:每一行的列数不统一,长度各不相同
四、面向过程 vs 面向对象
1. 面向过程
• 核心:关注每一步过程、每一个细节流程
• 思路:怎么做、步骤是什么
• 偏向机械化、步骤化编程
2. 面向对象
• 核心:关注谁来做,依靠对象交互解决问题
• 思想更抽象、更适合复杂程序
• Java 是纯面向对象语言
五、类与对象(核心重点)
1. 类的作用
类是对象的模板,用来描述一类事物:
• 包含:属性(成员变量)、行为(成员方法)
2. 类的组成
1. 成员变量:描述事物的特征、属性
2. 成员方法:描述事物的功能、行为
3. 类的书写规范(必考)
1. 类名使用大驼峰命名法(首字母大写)
2. 成员变量、成员方法统一用 public 修饰
3. 自定义方法不能加 static(普通成员方法)
4. 一个 Java 文件中建议只定义一个类
5. public 修饰的类名 必须和文件名完全一致,不能随意改名
6. 不加 public 的普通 class,可以随意定义、不限文件名
六、对象实例化
• 通过 new 关键字创建对象:类名 对象名 = new 类名();
• 通过对象名可以:给成员变量赋值、调用成员方法
• 一个引用变量只能指向一个对象,不能同时指向多个对象
七、this 引用
• this 代表当前对象
• 用于区分成员变量和局部变量重名问题
• 每new一次对象,就有一个独立的this引用
八、构造方法
1. 作用
对象实例化创建的一瞬间自动调用,专门用来初始化对象成员变量
2. 核心规则
1. 方法名必须和类名完全相同
2. 没有返回值类型
3. 当我们没有手动写任何构造方法时,编译器会自动赠送一个无参空构造方法
4. 一旦手动写了构造方法,系统不再提供默认无参构造
今日学习心得
今天系统学完了 Java 数组全套进阶内容和面向对象入门核心。
从工具类简化数组操作、手写基础排序算法,到二维数组的定义与遍历,完整打通了一维、二维数组的所有常用操作。
同时正式入门面向对象思想,理解了类、对象、成员变量、成员方法、this、构造方法的底层逻辑,但自身掌握还不够,有些不太懂,明天多练习题来巩固一下,尤其类和对象以及构造方法这一块儿。