🎯 今日学习目标
今天是系统复习Java的第一天,主要目标是重新梳理Java语言基础,巩固面向对象编程的核心概念。
📚 学习内容总结
1. Java程序结构重温
java
// 重新认识了Java程序的基本结构
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, Java复习之路!");
}
}
感悟:看似简单的结构,其实体现了Java的严谨性 - 每个文件一个public类,main方法作为程序入口。
2. 数据类型深度理解
今天重点复习了基本数据类型和引用类型的区别:
关键收获:
- 基本数据类型直接存储值,在栈内存中分配
- 引用类型存储的是对象的引用,实际对象在堆内存中
- String虽然是类,但有特殊性(字符串常量池)
java
// 实践练习
int a = 10; // 基本类型,直接存储值
String str = "Hello"; // 引用类型,存储的是地址引用
3. 面向对象编程核心概念
封装的重要性
java
// 重新理解了封装的真正意义
public class Student {
private String name; // 私有化,保护数据
private int age;
// 通过公共方法访问,可以添加控制逻辑
public void setAge(int age) {
if (age > 0 && age < 150) {
this.age = age;
} else {
throw new IllegalArgumentException("年龄不合法");
}
}
}
思考:封装不仅仅是把字段私有化,更重要的是通过方法暴露安全的数据访问方式。
继承的深入理解
今天重新认识到继承的几个要点:
- 子类拥有父类的非私有属性和方法
- 构造方法不会被继承
- Java是单继承,但可以通过接口实现多继承效果
多态的实际应用
java
// 多态的威力在于程序的可扩展性
Animal animal = new Dog(); // 编译时类型是Animal,运行时类型是Dog
animal.eat(); // 实际调用的是Dog的eat方法
心得:多态让程序更灵活,符合"开闭原则" - 对扩展开放,对修改关闭。
💡 重点难点解析
1. 值传递 vs 引用传递
今天终于彻底搞明白了Java的参数传递机制:
java
public class PassByValueDemo {
public static void main(String[] args) {
int num = 10;
changeValue(num); // 传递的是值的拷贝
System.out.println(num); // 输出10,原值不变
Student stu = new Student("Tom");
changeReference(stu); // 传递的是引用的拷贝
System.out.println(stu.getName()); // 输出Jerry
}
public static void changeValue(int x) {
x = 20;
}
public static void changeReference(Student student) {
student.setName("Jerry"); // 修改的是同一对象
}
}
关键理解:Java中都是值传递,对于引用类型,传递的是引用的副本,但指向的是同一个对象。
2. == 和 equals() 的区别
java
String str1 = "hello";
String str2 = "hello";
String str3 = new String("hello");
System.out.println(str1 == str2); // true,同一常量池对象
System.out.println(str1 == str3); // false,不同对象
System.out.println(str1.equals(str3)); // true,内容相同
总结:== 比较内存地址,equals() 比较对象内容。
🔄 学习中的困惑与解决
遇到的问题:
在复习抽象类和接口时,对两者的使用场景有些混淆。
解决方案:
通过对比表格理清了区别:
特性 | 抽象类 | 接口 |
---|---|---|
方法实现 | 可以有具体方法 | JDK8前只能有抽象方法 |
变量 | 可以有各种变量 | 默认public static final |
构造方法 | 有 | 无 |
继承 | 单继承 | 多实现 |
设计目的 | 代码复用 | 定义行为规范 |
应用场景:
- 抽象类:is-a关系,模板方法模式
- 接口:has-a关系,定义能力
📋 实践练习
今天完成的编码练习:
java
// 综合练习:员工管理系统基础类设计
public abstract class Employee {
private String name;
private int id;
public Employee(String name, int id) {
this.name = name;
this.id = id;
}
// 抽象方法,子类必须实现
public abstract double calculateSalary();
// 具体方法
public void displayInfo() {
System.out.println("员工ID: " + id + ", 姓名: " + name);
}
}
// 经理类
class Manager extends Employee {
private double bonus;
public Manager(String name, int id, double bonus) {
super(name, id);
this.bonus = bonus;
}
@Override
public double calculateSalary() {
return 8000 + bonus; // 基础工资+奖金
}
}
🌟 今日收获
- 巩固了基础:重新梳理了Java语法和OOP概念
- 解决了疑惑:彻底理解了参数传递机制
- 建立了知识联系:将离散的知识点串联成体系
- 实践验证理论:通过编码加深理解
📅 明日计划
- 复习集合框架(List、Set、Map)
- 学习异常处理机制
- 开始接触多线程基础概念
- 完成相关的编码练习
✨ 学习感悟
"温故而知新",今天重新学习Java基础,发现了很多之前忽略的细节。编程语言的学习就像建房子,基础不牢,地动山摇。每一个简单的概念背后,都蕴含着重要的编程思想。
明天继续加油!🚀
学习时间:3小时
代码行数:约200行
掌握程度:85%