Java复习日记 - 第一天:重拾Java基础

🎯 今日学习目标

今天是系统复习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;  // 基础工资+奖金
    }
}

🌟 今日收获

  1. 巩固了基础:重新梳理了Java语法和OOP概念
  2. 解决了疑惑:彻底理解了参数传递机制
  3. 建立了知识联系:将离散的知识点串联成体系
  4. 实践验证理论:通过编码加深理解

📅 明日计划

  1. 复习集合框架(List、Set、Map)
  2. 学习异常处理机制
  3. 开始接触多线程基础概念
  4. 完成相关的编码练习

✨ 学习感悟

"温故而知新",今天重新学习Java基础,发现了很多之前忽略的细节。编程语言的学习就像建房子,基础不牢,地动山摇。每一个简单的概念背后,都蕴含着重要的编程思想。

明天继续加油!🚀


学习时间:3小时
代码行数:约200行
掌握程度:85%

相关推荐
oak隔壁找我5 小时前
SpringBoot 开发必备基础工具类实现(纯JWT认证,无SpringSecurity)
java·后端
张较瘦_5 小时前
Springboot | 初识Springboot 从“手动做饭”到“点外卖”的编程革命
java·spring boot·后端
间彧5 小时前
举例说明混合使用CAS和传统锁机制的成功案例
后端
间彧5 小时前
在高并发场景下,如何评估是使用CAS还是传统锁机制更合适?
后端
间彧5 小时前
在高并发场景下,如何量化评估何时应该从CAS切换到传统锁机制?
后端
oak隔壁找我5 小时前
SpringBoot 整合 Minio 和 FastDFS 实现分布式文件存储
java·后端
间彧5 小时前
CAS技术原理与应用详解
后端
华仔啊5 小时前
35岁程序员失业了,除了送外卖,还能做什么?
前端·后端·程序员
SimonKing6 小时前
【开发者必备】Spring Boot 2.7.x:WebMvcConfigurer配置手册来了(二)!
java·后端·程序员