杰瑞科技汇

Java从入门到精通源代码怎么学?

学习路线图与核心源代码

我们将学习路径分为四个阶段:

Java从入门到精通源代码怎么学?-图1
(图片来源网络,侵删)
  1. Java入门基础:语法、数据类型、流程控制、面向对象基础。
  2. Java进阶核心:集合、IO、多线程、网络编程。
  3. Java高级应用:反射、注解、Lambda表达式、新特性。
  4. 企业级开发:构建工具、框架入门、设计模式。

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-elsefor 循环。

Java从入门到精通源代码怎么学?-图2
(图片来源网络,侵删)
// 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进阶核心

这个阶段是区分普通程序员和高级开发者的关键。

集合框架 - ArrayListHashMap

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("主线程结束。");
    }
}

简单的文件读写

使用 FileReaderFileWriter 操作文本文件。

// 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();
    }
}

如何学习这些代码?

  1. 环境准备:确保你已经安装了 JDKIDE(推荐 IntelliJ IDEA 或 Eclipse)。
  2. 动手实践:不要只看!把每一行代码都敲一遍,然后运行它。
  3. 修改和实验:尝试修改代码中的值,看看会发生什么,在 for 循环里改变循环次数,在异常处理里制造不同的异常。
  4. 理解原理:对于每个例子,不仅要会写,还要理解它背后的原理。ArrayList 为什么能动态扩容?synchronized 关键字在单例模式里起到了什么作用?
  5. 逐步深入:按照这个路线图的顺序学习,不要跳级,基础不牢,地动山摇。

希望这份从入门到精通的源代码指南能帮助你更好地学习Java!祝你学习顺利!

分享:
扫描分享到社交APP
上一篇
下一篇