Java基础知识全景复习:从数组到面向对象与高级特性
本文系统梳理了Java学习路线中的核心知识点,涵盖数组、排序算法、面向对象、修饰符、变量、static、代码块、final、重载与重写、this/super、三大特性、抽象类、接口、lambda表达式等内容,适合初学者和面试复习。
一、数组基础与遍历
数组是Java中最基础的数据结构之一,存储在堆内存中,空间连续且类型一致。其优点是查询快(可通过下标定位),缺点是增删慢(长度固定,操作需移动元素)。
遍历方式:
- 标准for循环:
for(int n=0;n<nums.length;n++){ System.out.println(nums[n]); } - 增强for循环(底层迭代器):
for(int n:nums){ System.out.println(n); }
二、数组排序与经典算法
- Arrays.sort(数组): 默认升序排序。
- 自定义Comparator实现对象排序。
- 常见排序算法:
- 冒泡排序
- 选择排序
- 插入排序
- 快速排序(递归+基准数分区)
冒泡排序示例:
for(int i=0;i<nums.length-1;i++){
for(int j=0;j<nums.length-1-i;j++){
if(nums[j] > nums[j+1]){
// 交换
int temp = nums[j];
nums[j] = nums[j+1];
nums[j+1] = temp;
}
}
}
二分查找(前提:有序数组):
public int getIndex(int[] nums,int number){
int begin=0, end=nums.length-1;
while(begin<=end){
int mid=(begin+end)/2;
if(nums[mid]>number){
end=mid-1;
}else if(nums[mid]<number){
begin=mid+1;
}else{
return mid;
}
}
return -1;
}
复杂度对比表:
| 排序算法 | 时间复杂度 | 空间复杂度 | 稳定性 |
|---|---|---|---|
| 冒泡 | O(n^2) | O(1) | 稳定 |
| 选择 | O(n^2) | O(1) | 不稳定 |
| 插入 | O(n^2) | O(1) | 稳定 |
| 快速 | O(nlogn) | O(nlogn) | 不稳定 |
| 二分查找 | O(logn) | O(1) | - |
三、面向对象核心
-
类与对象: 类是模板,对象是实例。
-
属性与方法: 静态属性(static)属于类,成员属性属于对象。
-
访问修饰符:
修饰符 本类 同包 子类 其他 public √ √ √ √ protected √ √ √ 默认 √ √ private √ -
成员变量与局部变量区别: 作用范围、默认值、优先级不同。
-
static关键字: 静态变量/方法/代码块,属于类级别,所有对象共享。
-
代码块: 静态代码块(类加载时执行)、构造代码块(对象创建时执行)、普通代码块(方法调用时执行)。
-
final关键字: 修饰常量、类、方法,分别表示不可变、不可继承、不可重写。
四、方法重载与重写、this/super
- 重载(overload): 同类中方法名相同,参数不同。
- 重写(override): 子类重写父类方法,要求方法签名一致,修饰符不能更严格。
- this/super: this代表当前对象,super代表父类对象。
五、三大特性:封装、继承、多态
- 封装: 属性私有化,提供getter/setter控制访问。
- 继承: 子类继承父类非私有资源,Java只支持单继承。
- 多态: 父类引用指向子类对象,方法重写实现多态性。
六、抽象类与接口
- 抽象类: 不能实例化,可包含普通属性、方法、抽象方法、构造方法。
- 接口: 只定义常量和抽象方法(JDK1.8支持默认方法和静态方法),支持多继承。
- 区别: 抽象类可有普通属性/方法/构造方法,接口只能有常量和抽象方法。
七、函数式接口与Lambda表达式
- 函数式接口: 只包含一个抽象方法的接口,@FunctionalInterface注解。
- Lambda表达式: 用于简化函数式接口实现,语法:
(参数) -> {方法体}。
@FunctionalInterface
interface A4{
void method();
default void test1(){}
}
A4 a4 = () -> {
System.out.println("运行");
};
总结
本文梳理了Java基础到进阶的核心知识点,建议大家结合代码多练习,理解每个知识点背后的原理。无论是面试还是实际开发,掌握这些内容都能让你在Java之路上走得更远!
如果你觉得这篇文章对你有帮助,欢迎点赞、收藏、关注我,后续会持续分享更多Java干货!