Java 学习路线:适合小白的超细学习路线及实例代码

一、入门基础

1.1、Java基础语法

安装 Java 开发工具

编写第一个 Java 程序:Hello World
创建一个名为 HelloWorld.java 的文件,内容如下:

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, World!");
    }
}

解释:

  • public class HelloWorld:定义一个公共类,类名为 HelloWorld。
  • public static void main(String[] args):主方法,是 Java 程序的入口点。
  • System.out.println("Hello, World!");:输出一行文本到控制台。

编译和运行程序

  • 编译:在终端中运行 javac HelloWorld.java。
  • 运行:运行 java HelloWorld。

1.2、面向对象编程 (OOP)

类和对象
创建一个名为 Person.java 的文件,内容如下:

public class Person {
    // 属性
    String name;
    int age;

    // 方法
    void greet() {
        System.out.println("Hello, my name is " + name + " and I am " + age + " years old.");
    }

    public static void main(String[] args) {
        // 创建对象
        Person person = new Person();
        person.name = "Alice";
        person.age = 30;
        person.greet(); // 调用方法
    }
}

解释:

  • String name;int age;:类的属性。
  • void greet():类的方法,输出对象的属性值。
  • main 方法中创建 Person 类的对象,设置属性并调用方法。

封装
修改 Person 类,使用 gettersetter 方法:

public class Person {
    private String name;
    private int age;

    // Getter 方法
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    // Setter 方法
    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    void greet() {
        System.out.println("Hello, my name is " + name + " and I am " + age + " years old.");
    }

    public static void main(String[] args) {
        Person person = new Person();
        person.setName("Bob");
        person.setAge(25);
        person.greet();
    }
}

解释:

  • private 关键字修饰属性,使其只能在类内部访问。
  • 使用 gettersetter 方法访问和修改属性值。

继承和多态
创建一个名为 Employee.java 的文件,继承 Person 类:

public class Employee extends Person {
    private String jobTitle;

    public String getJobTitle() {
        return jobTitle;
    }

    public void setJobTitle(String jobTitle) {
        this.jobTitle = jobTitle;
    }

    @Override
    void greet() {
        System.out.println("Hello, I am " + getName() + ", I am " + getAge() + " years old and my job title is " + jobTitle + ".");
    }

    public static void main(String[] args) {
        Employee employee = new Employee();
        employee.setName("Charlie");
        employee.setAge(40);
        employee.setJobTitle("Developer");
        employee.greet(); // 调用重写的方法
    }
}

解释:

  • extends 关键字用于继承 Person 类。
  • 使用 @Override 注解重写父类的方法。

二、核心 Java 编程

2.1、数据结构和算法基础

数组和字符串
数组操作:

public class ArrayExample {
    public static void main(String[] args) {
        int[] numbers = {1, 2, 3, 4, 5};

        // 遍历数组
        for (int number : numbers) {
            System.out.println(number);
        }
    }
}

字符串操作:

public class StringExample {
    public static void main(String[] args) {
        String str = "Hello, Java!";
        System.out.println("Length: " + str.length());
        System.out.println("Substring: " + str.substring(7));
        System.out.println("Replace 'Java' with 'World': " + str.replace("Java", "World"));
    }
}

集合框架
ArrayList 示例:

import java.util.ArrayList;

public class ArrayListExample {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("Apple");
        list.add("Banana");
        list.add("Cherry");

        for (String item : list) {
            System.out.println(item);
        }
    }
}

HashMap 示例:

import java.util.HashMap;

public class HashMapExample {
    public static void main(String[] args) {
        HashMap<String, Integer> map = new HashMap<>();
        map.put("Alice", 30);
        map.put("Bob", 25);
        map.put("Charlie", 35);

        for (String key : map.keySet()) {
            System.out.println(key + ": " + map.get(key));
        }
    }
}

异常处理
异常处理示例:

public class ExceptionExample {
    public static void main(String[] args) {
        try {
            int result = 10 / 0; // 可能会抛出异常
        } catch (ArithmeticException e) {
            System.out.println("Cannot divide by zero.");
        } finally {
            System.out.println("This block is always executed.");
        }
    }
}

2.2、输入输出 (I/O)

文件操作示例:

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

public class FileWriteExample {
    public static void main(String[] args) {
        try (BufferedWriter writer = new BufferedWriter(new FileWriter("output.txt"))) {
            writer.write("Hello, File!");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

读取文件示例:

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class FileReadExample {
    public static void main(String[] args) {
        try (BufferedReader reader = new BufferedReader(new FileReader("output.txt"))) {
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

三、进阶Java编程

3.1、多线程编程

创建线程示例:

public class ThreadExample {
    public static void main(String[] args) {
        // 创建线程类的实例
        Thread thread = new Thread(() -> {
            for (int i = 0; i < 5; i++) {
                System.out.println("Running in thread: " + i);
                try {
                    Thread.sleep(500);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        });

        thread.start(); // 启动线程
    }
}

线程同步示例:

public class SynchronizedExample {
    private int counter = 0;

    public synchronized void increment() {
        counter++;
    }

    public static void main(String[] args) {
        SynchronizedExample example = new SynchronizedExample();

        Thread thread1 = new Thread(() -> {
            for (int i = 0; i < 1000; i++) {
                example.increment();
            }
        });

        Thread thread2 = new Thread(() -> {
            for (int i = 0; i < 1000; i++) {
                example.increment();
            }
        });

        thread1.start();
        thread2.start();

        try {
            thread1.join();
            thread2.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println("Final counter value: " + example.counter);
    }
}

3.2、网络编程

简单的客户端-服务器应用:

服务器端:

import java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class ServerExample {
    public static void main(String[] args) {
        try (ServerSocket serverSocket = new ServerSocket(12345)) {
            System.out.println("Server is listening on port 12345");
            Socket socket = serverSocket.accept();
            OutputStream output = socket.getOutputStream();
            output.write("Hello from server!".getBytes());
            socket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

客户端:

import java.io.IOException;
import java.io.InputStream;
import java.net.Socket;

public class ClientExample {
    public static void main(String[] args) {
        try (Socket socket = new Socket("localhost", 12345)) {
            InputStream input = socket.getInputStream();
            byte[] buffer = new byte[1024];
            int read = input.read(buffer);
            String response = new String(buffer, 0, read);
            System.out.println("Received from server: " + response);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

四、高级应用

4.1、数据库编程

使用 JDBC 操作数据库:

创建一个简单的数据库操作程序:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class DatabaseExample {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/testdb";
        String user = "root";
        String password = "password";

        try (Connection conn = DriverManager.getConnection(url, user, password);
             Statement stmt = conn.createStatement()) {

            // 创建表
            String createTableSQL = "CREATE TABLE IF NOT EXISTS users (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100))";
            stmt.execute(createTableSQL);

            // 插入数据
            String insertSQL = "INSERT INTO users (name) VALUES ('Alice')";
            stmt.executeUpdate(insertSQL);

            // 查询数据
            String querySQL = "SELECT * FROM users";
            ResultSet rs = stmt.executeQuery(querySQL);
            while (rs.next()) {
                System.out.println("ID: " + rs.getInt("id") + ", Name: " + rs.getString("name"));
            }

        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

4.2、Web 开发

使用 Java Servlet 创建简单的 Web 应用:

HelloServlet.java:

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html");
        resp.getWriter().write("<h1>Hello from Servlet!</h1>");
    }
}

部署和运行:

  • HelloServlet 部署到支持 Servlet 的服务器(如 Apache Tomcat)。
  • 在浏览器中访问 http://localhost:8080/your-app-context/hello

4.3、框架与库

使用 Spring Boot 创建简单的 Web 应用:

创建 Spring Boot 项目:

  • 使用 Spring Initializr 创建一个 Spring Boot 项目,选择 Spring Web 依赖项。

Main Application 类:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

创建一个简单的 Controller

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/api")
public class HelloController {
    @GetMapping("/hello")
    public String sayHello() {
        return "Hello from Spring Boot!";
    }
}

运行和测试:

  • 启动 Spring Boot 应用。
  • 在浏览器中访问 http://localhost:8080/api/hello

五、实践项目与进阶学习(留作业啦)

5.1、实践项目

创建一个图书管理系统

5.2、持续学习

1. 深入理解 Java 内存模型

  • Java 内存模型 (JMM): 理解 Java 内存模型如何影响多线程编程,尤其是内存一致性和可见性问题。
  • 堆和栈: 了解堆内存和栈内存的区别,以及如何使用它们来管理对象和方法调用。
  • 垃圾回收: 掌握不同的垃圾回收算法和策略,例如标记-清除、复制、标记-整理和分代垃圾回收。

2. 高级并发编程

  • 线程池: 使用 ExecutorService 和 ForkJoinPool 等工具来管理线程池。

  • 同步和锁: 掌握不同的锁机制,包括 synchronized、ReentrantLock、读写锁等。

  • 原子操作: 使用 Atomic 类库进行无锁编程,如 AtomicInteger 和 AtomicReference。

  • 并发数据结构: 了解 ConcurrentHashMap、CopyOnWriteArrayList 和其他并发数据结构的使用。

3. 设计模式和架构

  • 常见设计模式: 理解 Singleton、Factory、Observer、Decorator、Strategy
    等设计模式,并能够在实际项目中应用它们。

  • 架构模式: 掌握 MVC、MVVM、微服务架构等架构模式及其适用场景。

  • 依赖注入: 使用 Spring 框架的依赖注入功能来解耦代码和管理对象生命周期。

4. 性能优化

  • JVM 调优: 学习如何调整 JVM 参数以优化应用程序性能,例如内存分配、垃圾回收调优等。

  • 性能分析: 使用工具(如 JVisualVM、YourKit、JProfiler)来分析性能瓶颈,了解如何进行性能调优。

  • 代码优化: 识别和优化代码中的性能瓶颈,包括算法优化和数据结构选择。

5. Java 未来的特性

  • 记录类(Record Classes): 学习 Java 16 引入的记录类,它是一种简洁的类定义方式。

  • 模式匹配(Pattern Matching): 了解 Java 17 和未来版本中的模式匹配特性,以简化类型检查和条件逻辑。

  • 虚拟线程(Project Loom): 关注虚拟线程的引入,它可以使并发编程更为简便和高效。

6. 安全编程

  • 加密: 使用 Java 提供的加密库(如 javax.crypto)进行数据加密和解密。

  • 认证和授权: 实现用户认证和授权机制,例如使用 Spring Security 进行安全控制。

  • 输入验证: 进行输入验证以防止常见的安全漏洞,如 SQL 注入和 XSS(跨站脚本攻击)。

  • 24
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dreams°123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值