1. 项目概述
"狂神说Java"系列学习笔记是Java初学者广泛参考的学习资料,Day(05/10)作为该系列的重要节点,主要涵盖了Java基础语法、面向对象编程的核心概念。这个阶段的学习往往决定了初学者能否顺利过渡到Java开发的中级水平。
我在实际教学和项目开发中发现,很多Java初学者在这个阶段会遇到几个典型瓶颈:对面向对象思想的理解不够透彻、对Java内存机制感到困惑、在IDE使用上频繁踩坑。这份笔记正是针对这些痛点,结合我八年Java开发经验整理而成的实战指南。
2. 核心知识点解析
2.1 面向对象三大特性
Java作为纯粹的面向对象语言,其封装、继承、多态三大特性是Day5的重点内容。很多教程只讲语法规则,而我想强调的是实际开发中的运用技巧:
-
封装:不只是简单的private修饰符使用。好的封装要考虑:
- 哪些属性真正需要暴露getter/setter
- 如何设计不可变对象(final关键字的妙用)
- 方法参数校验的最佳实践(比如使用Objects.requireNonNull)
-
继承:要特别注意继承的滥用问题。我见过太多过度继承导致的"类爆炸"案例。建议:
- 优先考虑组合而非继承
- 使用抽象类时要明确其设计目的
- 注意方法重写时的@Override注解使用
-
多态:这是面试高频考点,但很多初学者只停留在概念层面。需要掌握:
- 编译时类型和运行时类型的区别
- 方法调用的动态绑定机制
- 接口多态的典型应用场景(如策略模式)
2.2 Java内存模型初探
虽然完整的内存模型会在后续深入学习,但Day5就应该建立基本认知:
java复制// 典型的内存分配示例
public class MemoryDemo {
private static int staticVar; // 方法区
private int instanceVar; // 堆内存
public void method() {
int localVar = 0; // 栈帧中的局部变量表
Object obj = new Object(); // 引用在栈,对象在堆
}
}
关键要点:
- 基本类型和引用类型的存储差异
- 方法调用时的栈帧变化
- 垃圾回收的基本原理(可达性分析)
注意:很多初学者会混淆"=="和equals()的比较逻辑,这本质上是栈内存和堆内存的理解问题
3. 开发环境实战
3.1 IDEA高效使用技巧
工欲善其事必先利其器,Day5应该掌握的IDE技巧:
-
代码模板:
- psvm → public static void main
- sout → System.out.println
- 自定义Live Template提升编码效率
-
调试技巧:
- 条件断点的设置
- 表达式求值(Evaluate Expression)
- 多线程调试的注意事项
-
版本控制集成:
- Git基本操作(commit/push/pull)
- .gitignore文件的合理配置
3.2 常见问题解决方案
根据高频问题整理的速查表:
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| 程序报错"找不到主类" | 1. 类没有main方法 2. 编译输出路径错误 |
1. 检查方法签名 2. 重新配置Module的Output Path |
| NullPointerException | 未做空指针检查 | 使用Optional类或Objects.requireNonNull |
| 编码乱码 | 文件编码与IDE编码不一致 | 统一设置为UTF-8 |
4. 面向对象设计实践
4.1 类设计原则
SOLID原则的入门级应用:
-
单一职责:一个类只做一件事
- 反例:既处理业务逻辑又负责数据存储的"上帝类"
-
开闭原则:通过抽象实现扩展开放
- 典型实现:策略模式+工厂模式
-
里氏替换:子类不能破坏父类约定
- 注意重写方法时的前置/后置条件
4.2 设计模式初探
虽然设计模式是进阶内容,但Day5可以接触两个基础模式:
工厂模式示例:
java复制interface Shape {
void draw();
}
class Circle implements Shape {
@Override
public void draw() {
System.out.println("Drawing Circle");
}
}
class ShapeFactory {
public Shape getShape(String type) {
if(type.equalsIgnoreCase("CIRCLE")) {
return new Circle();
}
return null;
}
}
单例模式的正确实现:
java复制// 双重检查锁实现
public class Singleton {
private static volatile Singleton instance;
private Singleton() {}
public static Singleton getInstance() {
if(instance == null) {
synchronized(Singleton.class) {
if(instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}
5. 学习路线建议
根据多年面试经验,给初学者的进阶建议:
-
知识图谱:
- Java核心 → 集合框架 → IO/NIO → 并发编程 → JVM
- 每个阶段配合LeetCode简单/中等题巩固
-
项目实践:
- 第一阶段:控制台小游戏(贪吃蛇、五子棋)
- 第二阶段:SpringBoot基础项目(博客系统)
- 第三阶段:分布式系统实践
-
避坑指南:
- 不要过早陷入框架学习(如SpringCloud)
- 重视计算机基础(数据结构、网络、操作系统)
- 养成阅读JDK源码的习惯(从ArrayList开始)
学习Java就像建造大楼,Day5就是在打地基的阶段。很多同学急于求成,结果在后续学习中不断回头补基础。我在带团队时发现,那些在面向对象和内存模型上花了足够时间的开发者,后期学习框架和分布式往往事半功倍。建议每天学完理论知识后,至少用同等时间进行编码实践,把概念转化为肌肉记忆。
