学习路线图与核心源代码
我们将学习路径分为四个阶段:

- Java入门基础:语法、数据类型、流程控制、面向对象基础。
- Java进阶核心:集合、IO、多线程、网络编程。
- Java高级应用:反射、注解、Lambda表达式、新特性。
- 企业级开发:构建工具、框架入门、设计模式。
Java入门基础
这个阶段的目标是掌握Java的基本语法和面向对象的思想。
"Hello, World!"
这是所有编程语言的第一个程序,用于验证环境。
// HelloWorld.java
public class HelloWorld {
public static void main(String[] args) {
// 向控制台打印字符串
System.out.println("Hello, World!");
}
}
基本数据类型与变量
展示Java的八种基本数据类型和变量的使用。
// DataTypes.java
public class DataTypes {
public static void main(String[] args) {
// 整数类型
int age = 30;
long population = 7800000000L; // L后缀表示long类型
// 浮点类型
double price = 19.99;
float pi = 3.14f; // f后缀表示float类型
// 字符类型
char grade = 'A';
// 布尔类型
boolean isStudent = true;
// 字符串类型 (引用类型)
String name = "张三";
// 打印变量值
System.out.println("姓名: " + name);
System.out.println("年龄: " + age);
System.out.println("人口: " + population);
System.out.println("价格: " + price);
System.out.println("PI: " + pi);
System.out.println("等级: " + grade);
System.out.println("是学生吗: " + isStudent);
}
}
流程控制
使用 if-else 和 for 循环。

// ControlFlow.java
public class ControlFlow {
public static void main(String[] args) {
int score = 85;
// if-else 条件判断
if (score >= 90) {
System.out.println("优秀");
} else if (score >= 60) {
System.out.println("及格");
} else {
System.out.println("不及格");
}
// for 循环
System.out.println("\n打印1到5的数字:");
for (int i = 1; i <= 5; i++) {
System.out.println("数字是: " + i);
}
}
}
面向对象基础 - 类与对象
这是Java的核心,定义一个 Person 类,并创建它的对象。
// Person.java (文件名必须和类名一致)
public class Person {
// 1. 成员变量 (属性)
String name;
int age;
// 2. 构造方法 (用于创建对象时初始化)
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// 3. 成员方法 (行为)
public void sayHello() {
System.out.println("你好,我叫 " + this.name + ",今年 " + this.age + " 岁。");
}
}
// TestPerson.java (另一个文件,用于测试Person类)
public class TestPerson {
public static void main(String[] args) {
// 使用new关键字创建Person类的对象 (实例)
Person person1 = new Person("李四", 25);
Person person2 = new Person("王五", 30);
// 调用对象的方法
person1.sayHello();
person2.sayHello();
// 访问对象的属性
System.out.println("第二个对象的名字是: " + person2.name);
}
}
Java进阶核心
这个阶段是区分普通程序员和高级开发者的关键。
集合框架 - ArrayList 和 HashMap
Java集合是存储和操作对象的核心工具。
// CollectionsDemo.java
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class CollectionsDemo {
public static void main(String[] args) {
// ArrayList: 动态数组,用于存储列表数据
List<String> fruits = new ArrayList<>();
fruits.add("苹果");
fruits.add("香蕉");
fruits.add("橙子");
System.out.println("水果列表:");
for (String fruit : fruits) {
System.out.println(fruit);
}
// HashMap: 键值对存储,用于快速查找
Map<String, Integer> studentScores = new HashMap<>();
studentScores.put("张三", 95);
studentScores.put("李四", 88);
studentScores.put("王五", 76);
System.out.println("\n学生成绩:");
// 遍历Map
for (Map.Entry<String, Integer> entry : studentScores.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue() + "分");
}
}
}
异常处理
使用 try-catch-finally 来处理程序中可能出现的错误。
// ExceptionHandling.java
public class ExceptionHandling {
public static void main(String[] args) {
int[] numbers = {1, 2, 3};
try {
// 这行代码会抛出 ArrayIndexOutOfBoundsException 异常
System.out.println("访问数组第4个元素: " + numbers[3]);
} catch (ArrayIndexOutOfBoundsException e) {
// 捕获并处理异常
System.out.println("错误: 数组索引越界!请检查数组长度。");
e.printStackTrace(); // 打印异常的堆栈跟踪信息
} finally {
// 无论是否发生异常,finally块中的代码都会执行
System.out.println("异常处理代码块执行完毕。");
}
System.out.println("程序继续运行...");
}
}
多线程
创建并运行两个线程,模拟同时执行任务。
// MultithreadingDemo.java
// 任务类
class MyTask implements Runnable {
private String taskName;
public MyTask(String taskName) {
this.taskName = taskName;
}
@Override
public void run() {
for (int i = 1; i <= 5; i++) {
System.out.println(taskName + " - 正在执行, 计数: " + i);
try {
// 模拟任务耗时
Thread.sleep(500); // 休眠500毫秒
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
// 主程序
public class MultithreadingDemo {
public static void main(String[] args) {
// 创建两个任务
MyTask task1 = new MyTask("任务A");
MyTask task2 = new MyTask("任务B");
// 创建两个线程,分别执行任务
Thread thread1 = new Thread(task1);
Thread thread2 = new Thread(task2);
// 启动线程
thread1.start();
thread2.start();
System.out.println("主线程结束。");
}
}
简单的文件读写
使用 FileReader 和 FileWriter 操作文本文件。
// FileIO.java
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class FileIO {
public static void main(String[] args) {
String fileName = "myFile.txt";
String content = "你好,Java IO世界!";
// 写入文件
try (FileWriter writer = new FileWriter(fileName)) {
writer.write(content);
System.out.println("文件写入成功!");
} catch (IOException e) {
System.out.println("写入文件时出错: " + e.getMessage());
}
// 读取文件
try (FileReader reader = new FileReader(fileName)) {
int character;
System.out.println("\n读取文件内容:");
while ((character = reader.read()) != -1) {
System.out.print((char) character);
}
System.out.println("\n文件读取成功!");
} catch (IOException e) {
System.out.println("读取文件时出错: " + e.getMessage());
}
}
}
Java高级应用
这个阶段让你写出更优雅、更强大的代码。
Lambda 表达式
简化匿名内部类的写法,让代码更简洁。
// LambdaDemo.java
interface MyInterface {
void myMethod(String message);
}
public class LambdaDemo {
public static void main(String[] args) {
// 使用匿名内部类 (传统方式)
MyInterface obj1 = new MyInterface() {
@Override
public void myMethod(String message) {
System.out.println("传统方式: " + message);
}
};
obj1.myMethod("Hello");
// 使用 Lambda 表达式 (现代方式)
MyInterface obj2 = message -> System.out.println("Lambda方式: " + message);
obj2.myMethod("World");
// 带有多行代码的 Lambda
MyInterface obj3 = message -> {
System.out.println("开始处理...");
System.out.println("Lambda多行方式: " + message);
System.out.println("处理结束。");
};
obj3.myMethod("Java 8+");
}
}
反射
在运行时动态地获取类的信息并操作对象。
// ReflectionDemo.java
import java.lang.reflect.Method;
// 一个普通的类
class MyClass {
public void publicMethod() {
System.out.println("这是一个公共方法。");
}
private void privateMethod() {
System.out.println("这是一个私有方法。");
}
}
public class ReflectionDemo {
public static void main(String[] args) throws Exception {
MyClass myClass = new MyClass();
// 1. 获取类的Class对象
Class<?> clazz = myClass.getClass();
// 2. 获取所有公共方法
System.out.println("--- 公共方法 ---");
Method[] publicMethods = clazz.getMethods();
for (Method method : publicMethods) {
System.out.println(method.getName());
}
// 3. 获取声明的所有方法(包括私有)
System.out.println("\n--- 所有声明的方法 ---");
Method[] declaredMethods = clazz.getDeclaredMethods();
for (Method method : declaredMethods) {
System.out.println(method.getName());
}
// 4. 调用私有方法
System.out.println("\n--- 调用私有方法 ---");
Method privateMethod = clazz.getDeclaredMethod("privateMethod");
// 设置可访问,即使它是私有的
privateMethod.setAccessible(true);
privateMethod.invoke(myClass);
}
}
企业级开发
这个阶段是走向实际工作的桥梁。
构建工具 - Maven (示例 pom.xml)
现代Java项目几乎都使用Maven或Gradle来管理依赖和构建。
<!-- pom.xml (Maven项目核心配置文件) -->
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>my-java-app</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- 添加依赖 -->
<dependencies>
<!-- JUnit 5 用于单元测试 -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.8.2</version>
<scope>test</scope>
</dependency>
</dependencies>
<!-- 指定编译Java的版本 -->
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
</project>
Spring Boot 框架入门 (一个简单的REST API)
Spring Boot极大地简化了Java Web开发。
// HelloController.java
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
// 处理 GET /hello 请求
@GetMapping("/hello")
public String hello() {
return "Hello from Spring Boot!";
}
// 处理 GET /hello?name=xxx 请求
@GetMapping("/hello-with-param")
public String helloWithParam(@RequestParam(value = "name", defaultValue = "World") String name) {
return "Hello, " + name + "!";
}
}
要运行这个,你需要一个Spring Boot项目(可以通过 start.spring.io 快速创建),并添加 spring-boot-starter-web 依赖。
设计模式 - 单例模式
确保一个类只有一个实例,并提供全局访问点。
// Singleton.java
public class Singleton {
// 1. 私有静态实例,防止被引用,此处赋值为null,目的是延迟加载
private static Singleton instance;
// 2. 私有构造方法,防止被实例化
private Singleton() {
// 防止反射攻击
if (instance != null) {
throw new IllegalStateException("Singleton instance already exists!");
}
}
// 3. 静态工程方法,创建实例
public static synchronized Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
public void doSomething() {
System.out.println("Singleton is doing something.");
}
}
// TestSingleton.java
public class TestSingleton {
public static void main(String[] args) {
// 获取单例实例
Singleton singleton1 = Singleton.getInstance();
Singleton singleton2 = Singleton.getInstance();
// 比较两个实例是否是同一个
if (singleton1 == singleton2) {
System.out.println("singleton1 和 singleton2 是同一个实例。");
}
singleton1.doSomething();
}
}
如何学习这些代码?
- 环境准备:确保你已经安装了 JDK 和 IDE(推荐 IntelliJ IDEA 或 Eclipse)。
- 动手实践:不要只看!把每一行代码都敲一遍,然后运行它。
- 修改和实验:尝试修改代码中的值,看看会发生什么,在
for循环里改变循环次数,在异常处理里制造不同的异常。 - 理解原理:对于每个例子,不仅要会写,还要理解它背后的原理。
ArrayList为什么能动态扩容?synchronized关键字在单例模式里起到了什么作用? - 逐步深入:按照这个路线图的顺序学习,不要跳级,基础不牢,地动山摇。
希望这份从入门到精通的源代码指南能帮助你更好地学习Java!祝你学习顺利!
