一、Java语言概述

Java作为一门面向对象的编程语言,自1995年诞生以来,凭借其"一次编写,到处运行"的特性,已成为企业级应用开发的主流选择。Java的三个核心优势:

1. 平台无关性:通过JVM实现跨平台运行

2. 丰富的生态系统:Spring、Hibernate等成熟框架

3. 稳健的内存管理:自动垃圾回收机制

二、Java基础语法精要

1. 数据类型与变量

Java是强类型语言,数据类型分为两大类:

// 基本数据类型

int num = 10;          // 32位整数

double price = 19.99;  // 双精度浮点

char grade = 'A';      // 单个字符

boolean isJavaFun = true; // 布尔值

// 引用类型

String message = "Hello Java";  // 字符串

int[] numbers = {1, 2, 3};      // 数组

Object obj = new Object();      // 对象

2. 控制结构

// if-else条件判断

int score = 85;

if (score >= 90) {

    System.out.println("优秀");

} else if (score >= 60) {

    System.out.println("及格");

} else {

    System.out.println("不及格");

}

// for循环

for (int i = 0; i < 5; i++) {

    System.out.println("迭代次数: " + i);

}

// 增强for循环

int[] nums = {1, 2, 3};

for (int n : nums) {

    System.out.println(n);

}

三、面向对象编程核心

1. 类与对象

public class Person {

    // 字段

    private String name;

    private int age;

    

    // 构造方法

    public Person(String name, int age) {

        this.name = name;

        this.age = age;

    }

    

    // 方法

    public void introduce() {

        System.out.println("我叫" + name + ",今年" + age + "岁");

    }

    

    // Getter/Setter

    public String getName() { return name; }

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

}

// 使用示例

Person p = new Person("张三", 25);

p.introduce();

2. 继承与多态

class Animal {

    void makeSound() {

        System.out.println("动物发出声音");

    }

}

class Dog extends Animal {

    @Override

    void makeSound() {

        System.out.println("汪汪汪");

    }

}

// 多态示例

Animal myAnimal = new Dog();

myAnimal.makeSound();  // 输出"汪汪汪"

四、Java集合框架

Java集合框架主要接口:

![Java集合框架层次结构](https://example.com/collection-hierarchy.png)

常用集合类示例

// List - 有序可重复

List<String> list = new ArrayList<>();

list.add("Java");

list.add("Python");

System.out.println(list.get(0));  // 输出"Java"

// Set - 无序不重复

Set<Integer> set = new HashSet<>();

set.add(1);

set.add(1);  // 重复元素不会被添加

System.out.println(set.size());  // 输出1

// Map - 键值对

Map<String, Integer> map = new HashMap<>();

map.put("Apple", 10);

map.put("Banana", 5);

System.out.println(map.get("Apple"));  // 输出10

五、异常处理机制

Java异常分类:

Throwable

├── Error (系统错误,如OutOfMemoryError)

└── Exception

    ├── RuntimeException (未检查异常)

    └── 其他检查异常(IOException等)

### 异常处理示例

try {

    FileInputStream fis = new FileInputStream("test.txt");

    // 文件操作...

} catch (FileNotFoundException e) {

    System.err.println("文件未找到: " + e.getMessage());

} catch (IOException e) {

    System.err.println("IO异常: " + e);

} finally {

    System.out.println("无论是否异常都会执行");

}

六、Java 8+新特性

1. Lambda表达式

List<String> languages = Arrays.asList("Java", "Python", "C++");

// 传统方式

Collections.sort(languages, new Comparator<String>() {

    @Override

    public int compare(String a, String b) {

        return a.compareTo(b);

    }

});

// Lambda方式

Collections.sort(languages, (a, b) -> a.compareTo(b));

2. Stream API

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);

// 计算平方和

int sum = numbers.stream()

                .map(n -> n * n)

                .reduce(0, Integer::sum);

System.out.println("平方和: " + sum);  // 输出55

七、并发编程基础

1. 线程创建方式

// 方式1:继承Thread类

class MyThread extends Thread {

    public void run() {

        System.out.println("线程运行中");

    }

}

// 方式2:实现Runnable接口

class MyRunnable implements Runnable {

    public void run() {

        System.out.println("Runnable运行中");

    }

}

// 使用示例

new MyThread().start();

new Thread(new MyRunnable()).start();

2. 线程池使用

ExecutorService executor = Executors.newFixedThreadPool(5);

for (int i = 0; i < 10; i++) {

    executor.execute(() -> {

        System.out.println(Thread.currentThread().getName() + " 执行任务");

    });

}

executor.shutdown();

八、Java内存模型与GC

JVM内存结构

方法区(Method Area)

堆(Heap)

虚拟机栈(VM Stack)

本地方法栈(Native Method Stack)

程序计数器(PC Register)

垃圾回收算法

1. 标记-清除:简单但会产生内存碎片

2. 复制算法:高效但浪费空间

3. 标记-整理:解决碎片问题但耗时

4. 分代收集:现代JVM主流算法

九、实战:构建简单REST API

使用Spring Boot创建RESTful服务:

@RestController

@RequestMapping("/api")

public class BookController {

    private List<Book> books = new ArrayList<>();

    

    @PostMapping("/books")

    public Book addBook(@RequestBody Book book) {

        books.add(book);

        return book;

    }

    

    @GetMapping("/books")

    public List<Book> getBooks() {

        return books;

    }

}

// Book类

class Book {

    private String title;

    private String author;

    // 省略getter/setter

}