第一部分: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),会丢失精度(小数点后的数字会被直接砍掉)。
- 自动转换 :小范围转大范围(如
-
作用域 :变量在大括号
{}内定义,出了大括号就不能用了。 -
运算符 :注意
++i和i++的区别,以及%(取模/取余) 运算在判断奇偶数时的妙用。
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 二分查找(前提是有序)。
- 遍历 :普通 for 循环 vs 增强 for 循环 (
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); // 递归调用
}
}