Day01 | Java 基础(Java SE)

第一部分:Java 环境搭建与基本概念

1. 核心知识点

  • JDK, JRE, JVM 的关系

    • JVM (Java Virtual Machine) :虚拟机,负责把字节码翻译成机器能懂的指令,实现"一次编写,到处运行"。
    • JRE (Java Runtime Environment) :运行环境 = JVM + 核心类库。如果你只是想运行别人的 Java 程序,装这个就够了。
    • JDK (Java Development Kit) :开发工具包 = JRE + 开发工具(如 javac 编译器)。你要写代码,必须装这个。
  • 第一个 Java 程序 :理解 public static void main(String[] args) 的含义,这是程序的入口。

2. 实战练习

任务:配置环境变量并输出自我介绍

  • 目标 :在命令行(CMD/Terminal)中成功运行 java -version,并编写一个程序打印你的姓名和年龄。
  • 代码示例
csharp 复制代码
public class MyFirstProgram {
    public static void main(String[] args) {
        // 这是一个单行注释
        System.out.println("Hello, World!");
        System.out.println("我是未来的架构师,今年 25 岁");
    }
}

第二部分:变量、数据类型与运算符

1. 核心知识点

  • 基本数据类型 :重点掌握 int (整数), double (小数), char (字符), boolean (布尔)。了解内存占用大小。

  • 类型转换

    • 自动转换 :小范围转大范围(如 int -> long),安全。
    • 强制转换 :大范围转小范围(如 double -> int),会丢失精度(小数点后的数字会被直接砍掉)。
  • 作用域 :变量在大括号 {} 内定义,出了大括号就不能用了。

  • 运算符 :注意 ++ii++ 的区别,以及 % (取模/取余) 运算在判断奇偶数时的妙用。

2. 实战练习

任务:模拟 ATM 取款计算

  • 场景:账户里有 100.5 元,取款 50 元,计算余额。尝试将余额强制转换为整数查看损失。
  • 代码示例
csharp 复制代码
public class TypeConversionDemo {
    public static void main(String[] args) {
        double balance = 100.99;
        int withdraw = 50;

        double newBalance = balance - withdraw;
        System.out.println("当前余额:" + newBalance); // 输出 50.99

        // 强制类型转换演示
        int intBalance = (int) newBalance;
        System.out.println("强制转换后的余额(丢精度):" + intBalance); // 输出 50

        // 变量作用域演示
        {
            int tempVar = 10;
            System.out.println("内部变量:" + tempVar);
        }
        // System.out.println(tempVar); // 报错!这里访问不到 tempVar
    }
}

第三部分:流程控制(逻辑的核心)

1. 核心知识点

  • 选择结构

    • if...else if...else:处理区间判断(如成绩分级)。
    • switch:处理等值判断(如菜单选项),注意 JDK 7 以后支持 String,以及 break 防止穿透。
  • 循环结构

    • for:已知循环次数时使用。
    • while / do-while:未知次数,满足条件才停。
  • 跳转语句break (跳出循环),continue (跳过本次,继续下一次)。

2. 实战练习

任务:打印九九乘法表 & 猜数字游戏逻辑

  • 目标:熟练使用嵌套循环和条件判断。
  • 代码示例(九九乘法表)
csharp 复制代码
public class LoopPractice {
    public static void main(String[] args) {
        // 外层控制行,内层控制列
        for (int i = 1; i <= 9; i++) {
            for (int j = 1; j <= i; j++) {
                // \t 是制表符,用于对齐
                System.out.print(j + " * " + i + " = " + (i * j) + "\t");
            }
            System.out.println(); // 换行
        }
    }
}

第四部分:数组(数据的容器)

1. 核心知识点

  • 内存模型:数组在堆内存中是一块连续的空间。

  • 索引越界 :数组长度为 5,最大索引是 4。访问 arr[5] 会报 ArrayIndexOutOfBoundsException

  • 常见算法

    • 遍历 :普通 for 循环 vs 增强 for 循环 (for-each)。
    • 排序 :冒泡排序(虽然实际开发用 Arrays.sort(),但学习时必须手写理解原理)。
    • 查找:线性查找 vs 二分查找(前提是有序)。

2. 实战练习

任务:找出数组中的最大值并排序

  • 代码示例
arduino 复制代码
import java.util.Arrays;

public class ArrayPractice {
    public static void main(String[] args) {
        int[] scores = {88, 59, 92, 76, 45, 100};

        // 1. 找最大值
        int max = scores[0];
        for (int score : scores) {
            if (score > max) {
                max = score;
            }
        }
        System.out.println("最高分是:" + max);

        // 2. 排序(使用工具类,实际开发首选)
        Arrays.sort(scores);
        System.out.println("排序后:" + Arrays.toString(scores));
    }
}

第五部分:方法(代码复用的艺术)

1. 核心知识点

  • 定义三要素:返回值类型、方法名、参数列表。
  • 方法重载:同一个类中,方法名相同,但参数列表不同(个数、类型、顺序)。跟返回值类型无关!
  • 递归 :方法自己调用自己。必须有出口(结束条件),否则会导致栈溢出 (StackOverflowError)。
  • 值传递:Java 只有值传递。传递基本类型是复制数值;传递引用类型(对象/数组)是复制地址值。

2. 实战练习

任务:封装一个计算器方法与阶乘递归

  • 代码示例
csharp 复制代码
public class MethodDemo {
    public static void main(String[] args) {
        // 调用求和方法
        int sum = add(10, 20);
        System.out.println("两数之和:" + sum);

        // 调用重载方法(三个数相加)
        double sum2 = add(1.1, 2.2, 3.3);
        System.out.println("三数之和:" + sum2);

        // 递归求 5 的阶乘
        long result = factorial(5);
        System.out.println("5的阶乘:" + result);
    }

    // 方法1:两个整数相加
    public static int add(int a, int b) {
        return a + b;
    }

    // 方法2:重载,三个小数相加
    public static double add(double a, double b, double c) {
        return a + b + c;
    }

    // 递归方法:求 n 的阶乘
    public static long factorial(int n) {
        if (n == 1 || n == 0) { // 递归出口
            return 1;
        }
        return n * factorial(n - 1); // 递归调用
    }
}
相关推荐
行者全栈架构师3 小时前
Maven dependency:tree 的 8 个高级用法
java·后端
行者全栈架构师7 小时前
IDEA 中 Maven 项目的 15 个红色报错快速解决方法
java·后端
令人头秃的代码0_07 小时前
mac(m5)平台编译openjdk
java
唐青枫1 天前
Java JDBC 实战指南:从 Connection 到事务和连接池
java
一个做软件开发的牛马1 天前
MyBatis-Plus 从零实战:完整搭建可运行 Demo,BaseMapper 零 SQL、Wrapper 条件构造、分页插件与代码生成器详解
java·后端
用户3721574261351 天前
Java 处理 PDF 图片:提取 PDF 中的图片,并压缩 PDF 图片体积
java
用户3721574261351 天前
Java 打印 Word 文档:从基础打印到高级设置
java
用户3521802454752 天前
当 Prompt 学会"热更新":Spring Boot × Nacos3 AI 实战
java·spring boot·ai编程
东坡白菜2 天前
破局全栈:一个前端开发的Java入门实战记录(1)
java·全栈