Java 完整版基础教程(2026版)

📅 2026/7/22 13:32:00
Java 完整版基础教程(2026版)
〇、学习路线图环境搭建 → 语法基础 → OOP重中之重→ 核心API → 异常/泛型/集合 → IO流 → 多线程 → 网络编程 → 反射/注解 → 新特性 → 项目实战一、Java 概述与环境搭建1.1 Java 三大版本版本用途Java SE标准版桌面、基础库本教程重点Java EE企业版Web、分布式现Jakarta EEJava ME微型版嵌入式已很少用1.2 JDK 安装以JDK 17 LTS为例下载 Oracle JDK 或 OpenJDK配置环境变量JAVA_HOME C:\Program Files\Java\jdk-17PATH添加%JAVA_HOME%\bin验证java -version和javac -version1.3 第一个程序 HelloWorldpublic class HelloWorld {// main方法是程序入口固定写法public static void main(String[] args) {System.out.println(Hello, World!);}}编译运行javac HelloWorld.java # 编译成字节码 .classjava HelloWorld # 运行二、Java 语法基础变量、运算符、流程控制2.1 标识符、关键字、注释标识符字母、数字、_、$ 组成不能以数字开头不能是关键字关键字public、class、static、void、if等共50注释// 单行/* 多行 *//** 文档注释生成API文档 */2.2 数据类型8大基本类型 引用类型类型字节范围/说明byte1-128~127short2-32768~32767int4约±21亿默认整数long8后缀 Lfloat4后缀 Fdouble8默认浮点char2单引号Unicodeboolean1概念true/false引用类型类、接口、数组、枚举、String2.3 类型转换自动类型转换小→大int → long → float → double强制类型转换大→小(int)3.14→ 3精度丢失注意byte/short/char运算时自动转为int2.4 运算符// 算术 - * / % --// 赋值 - * / %// 比较 ! 结果boolean// 逻辑 || !短路// 位运算 | ^ ~ // 三元条件 ? 值1 : 值2int max (a b) ? a : b;2.5 流程控制// 1. if-else if-elseif (score 90) {grade A;} else if (score 60) {grade B;} else {grade C;}// 2. switch支持int, String, enumswitch (day) {case 1 - System.out.println(周一); // JDK12 箭头语法case 2 - System.out.println(周二);default - System.out.println(其他);}// 3. forfor (int i 0; i 10; i) { ... }// 增强for遍历数组/集合for (String s : arr) { ... }// 4. while / do-whilewhile (i 5) { i; }do { i--; } while (i 0);三、面向对象编程OOP—— 重中之重3.1 类与对象// 定义类class Student {// 属性成员变量String name;int age;// 构造方法与类同名无返回值public Student(String name, int age) {this.name name; // this指向当前对象this.age age;}// 方法public void study() {System.out.println(name 正在学习);}}// 使用Student s new Student(张三, 20);s.study();3.2 三大特性封装、继承、多态3.2.1 封装private getter/setterclass Person {private String name; // 私有外部不可直接访问public String getName() { return name; }public void setName(String name) { this.name name; }}3.2.2 继承extendsJava单继承一个类只能有一个父类super调用父类构造/方法所有类默认继承Objectclass Teacher extends Person {private String subject;public Teacher(String name, String subject) {super(name); // 调用父类构造器this.subject subject;}Override // 重写父类方法注解非必须但推荐public String toString() {return 教师 getName() 科目 subject;}}3.2.3 多态向上转型 动态绑定Person p new Teacher(李四, 数学);// 编译看左边Person运行看右边TeacherSystem.out.println(p.toString()); // 调用Teacher的toString3.3 抽象类与接口特性抽象类abstract接口interface关键字abstract classinterface多继承不支持支持implements多个构造方法有无成员变量可以是各种类型默认public static final常量方法可以有具体实现JDK8后可以有default/static方法// 接口interface Flyable {void fly(); // 抽象方法默认 public abstractdefault void land() { // JDK8默认方法System.out.println(降落);}}// 实现类class Bird implements Flyable {Overridepublic void fly() {System.out.println(鸟儿飞);}}3.4 内部类了解成员内部类、静态内部类、局部内部类、匿名内部类常用于事件监听四、核心 API4.1 String最常用String s Hello;s.length(); // 长度s.charAt(0); // Hs.substring(1, 3); // el左闭右开s.indexOf(l); // 2s.replace(l, w); // Hewwos.toLowerCase(); // 小写s.trim(); // 去首尾空格s.equals(Hello); // true比较内容比较地址String[] parts s.split(,);⚠️String 不可变每次修改都生成新对象大量拼接用StringBuilder。4.2 StringBuilder / StringBufferStringBuilder线程不安全效率高StringBuffer线程安全效率略低StringBuilder sb new StringBuilder();sb.append(a).append(b).append(123);sb.insert(1, X);sb.reverse();4.3 包装类Integer, Double, Boolean等// 装箱基本→包装Integer i Integer.valueOf(10); // 或自动装箱Integer i 10;// 拆箱包装→基本int n i.intValue(); // 或自动拆箱int n i;// 字符串转数字int num Integer.parseInt(123);4.4 日期时间JDK8import java.time.*;// 本地日期LocalDate date LocalDate.now();LocalDate future date.plusDays(7);// 本地时间LocalTime time LocalTime.now();// 日期时间LocalDateTime dt LocalDateTime.now();// 格式化DateTimeFormatter formatter DateTimeFormatter.ofPattern(yyyy-MM-dd HH:mm);String formatted dt.format(formatter);五、异常处理Exception5.1 异常体系Throwable├── Error严重错误如OutOfMemoryError程序无法处理└── Exception├── RuntimeException运行时异常非受检如NullPointerException└── 其他受检异常如IOException必须处理5.2 try-catch-finally / try-with-resources// 方式1try-catch-finallytry {int[] arr {1,2,3};System.out.println(arr[5]); // 数组越界} catch (ArrayIndexOutOfBoundsException e) {System.err.println(捕获异常 e.getMessage());} finally {System.out.println(无论是否异常都会执行);}// 方式2try-with-resources自动关闭资源JDK7try (FileInputStream fis new FileInputStream(test.txt)) {// 使用fis} catch (IOException e) {e.printStackTrace();}// 抛出异常public void div(int a, int b) throws ArithmeticException {if (b 0) throw new ArithmeticException(除数不能为0);}六、泛型Generics6.1 泛型类/方法// 泛型类class BoxT {private T value;public void set(T t) { this.value t; }public T get() { return value; }}// 泛型方法public static E void printArray(E[] array) {for (E e : array) System.out.print(e );}// 使用BoxString box new Box();box.set(Hello);String s box.get(); // 无需强制转换6.2 通配符?? extends T上界通配符T及子类? super T下界通配符T及父类七、集合框架Collection / Map—— 必会7.1 体系结构Collection接口├── List有序可重复│ ├── ArrayList数组查询快增删慢│ └── LinkedList双向链表增删快查询慢├── Set无序不可重复│ ├── HashSet哈希表无顺序│ └── TreeSet红黑树自动排序└── Queue队列Map接口键值对├── HashMap哈希表无序允许null├── TreeMap红黑树按键排序└── LinkedHashMap保持插入顺序7.2 核心代码示例import java.util.*;// ListListString list new ArrayList();list.add(Java);list.add(Python);list.get(0);list.remove(1);list.size();// SetSetInteger set new HashSet();set.add(10);set.add(10); // 不会重复set.contains(10);// MapMapString, Integer map new HashMap();map.put(张三, 90);map.put(李四, 85);int score map.get(张三); // 90for (String key : map.keySet()) {System.out.println(key map.get(key));}// 遍历Entryfor (Map.EntryString, Integer entry : map.entrySet()) {System.out.println(entry.getKey() : entry.getValue());}7.3 Collections 工具类Collections.sort(list); // 排序Collections.reverse(list); // 反转Collections.shuffle(list); // 打乱int max Collections.max(list); // 最大值八、IO 流文件读写8.1 字节流 vs 字符流分类字节流8位字符流16位输入InputStreamReader输出OutputStreamWriter适用图片、音频、视频文本文件8.2 文件读写示例import java.io.*;// 1. 字节流读写文件复制文件try (FileInputStream fis new FileInputStream(src.jpg);FileOutputStream fos new FileOutputStream(dst.jpg)) {byte[] buffer new byte[1024];int len;while ((len fis.read(buffer)) ! -1) {fos.write(buffer, 0, len);}} catch (IOException e) {e.printStackTrace();}// 2. 字符流读写文本try (BufferedReader br new BufferedReader(new FileReader(input.txt));BufferedWriter bw new BufferedWriter(new FileWriter(output.txt))) {String line;while ((line br.readLine()) ! null) {bw.write(line);bw.newLine();}} catch (IOException e) {e.printStackTrace();}8.3 NIO非阻塞IO面试常问核心ChannelBufferSelector了解即可九、多线程并发编程9.1 创建线程的3种方式// 方式1继承Threadclass MyThread extends Thread {Overridepublic void run() { System.out.println(继承Thread); }}new MyThread().start();// 方式2实现Runnable推荐因单继承限制class MyRunnable implements Runnable {Overridepublic void run() { System.out.println(实现Runnable); }}new Thread(new MyRunnable()).start();// 方式3Callable Future有返回值ExecutorService executor Executors.newSingleThreadExecutor();FutureInteger future executor.submit(() - {Thread.sleep(1000);return 123;});System.out.println(future.get()); // 阻塞获取结果executor.shutdown();9.2 线程生命周期新建 → 就绪 → 运行 → 阻塞/等待/超时等待 → 终止9.3 线程同步synchronized / Lock// 同步方法public synchronized void add() { count; }// 同步代码块synchronized (this) { count; }// ReentrantLock更灵活Lock lock new ReentrantLock();lock.lock();try {count;} finally {lock.unlock();}9.4 线程通信wait/notify/notifyAll// 生产者-消费者模式经典写法synchronized (queue) {while (queue.isEmpty()) {queue.wait(); // 释放锁等待}queue.notifyAll(); // 唤醒其他线程}9.5 线程池Executors// 不建议用Executors直接创建易OOM推荐ThreadPoolExecutorExecutorService pool new ThreadPoolExecutor(2, 5, 60L, TimeUnit.SECONDS,new LinkedBlockingQueue(10));pool.execute(() - System.out.println(任务执行));pool.shutdown();十、网络编程Socket// 服务端try (ServerSocket server new ServerSocket(8888)) {System.out.println(等待客户端连接...);Socket socket server.accept();BufferedReader in new BufferedReader(new InputStreamReader(socket.getInputStream()));PrintWriter out new PrintWriter(socket.getOutputStream(), true);String msg in.readLine();System.out.println(收到 msg);out.println(已收到 msg);} catch (IOException e) { e.printStackTrace(); }// 客户端try (Socket socket new Socket(localhost, 8888)) {PrintWriter out new PrintWriter(socket.getOutputStream(), true);BufferedReader in new BufferedReader(new InputStreamReader(socket.getInputStream()));out.println(Hello Server);System.out.println(服务端回复 in.readLine());} catch (IOException e) { e.printStackTrace(); }十一、反射Reflection与注解11.1 反射运行时获取类信息// 获取Class对象Class? clazz Class.forName(java.util.ArrayList);// 获取构造器、方法、字段Constructor?[] cons clazz.getConstructors();Method[] methods clazz.getDeclaredMethods();Field field clazz.getDeclaredField(size);field.setAccessible(true); // 突破private// 动态调用Object obj clazz.getDeclaredConstructor().newInstance();Method m clazz.getMethod(add, Object.class);m.invoke(obj, test);11.2 自定义注解interfaceRetention(RetentionPolicy.RUNTIME) // 保留到运行时Target(ElementType.METHOD) // 作用于方法interface MyAnnotation {String value() default ;}// 使用MyAnnotation(hello)public void test() { ... }十二、Java 8 新特性必问12.1 Lambda 表达式// 传统匿名内部类Runnable r1 new Runnable() { Override public void run() { System.out.println(old); } };// LambdaRunnable r2 () - System.out.println(lambda);// 集合遍历list.forEach(s - System.out.println(s));// 方法引用list.forEach(System.out::println);12.2 Stream API函数式编程ListInteger nums Arrays.asList(1, 2, 3, 4, 5);// 链式操作过滤 3乘以2求和int sum nums.stream().filter(n - n 3).mapToInt(n - n * 2).sum(); // 4*2 5*2 18// 收集到ListListString result list.stream().filter(s - s.startsWith(J)).collect(Collectors.toList());12.3 Optional避免空指针OptionalString opt Optional.ofNullable(getName());String name opt.orElse(默认名称);opt.ifPresent(System.out::println);2.4 新的日期API已在前文十三、实战项目学生成绩管理系统控制台版综合运用以上知识类设计、集合、IO、异常、泛型等。import java.io.*;import java.util.*;// 实体类class Student implements Serializable {private String id;private String name;private double score;public Student(String id, String name, double score) {this.id id;this.name name;this.score score;}// 省略getter/setter/toString}// 核心管理类class StudentManager {private ListStudent students new ArrayList();private static final String DATA_FILE students.dat;// 添加public void add(Student s) { students.add(s); }// 按成绩排序使用Comparable或Comparatorpublic void sortByScore() {students.sort(Comparator.comparingDouble(Student::getScore).reversed());}// 保存到文件public void save() throws IOException {try (ObjectOutputStream oos new ObjectOutputStream(new FileOutputStream(DATA_FILE))) {oos.writeObject(students);}}// 从文件加载SuppressWarnings(unchecked)public void load() throws IOException, ClassNotFoundException {try (ObjectInputStream ois new ObjectInputStream(new FileInputStream(DATA_FILE))) {students (ListStudent) ois.readObject();}}// 展示public void display() {students.forEach(System.out::println);}}// 主程序省略菜单交互public class Main {public static void main(String[] args) {StudentManager manager new StudentManager();// 添加测试数据、排序、保存、加载等}}十四、学习建议与进阶路线学习顺序建议先手敲每段示例代码都自己敲一遍不要复制粘贴做小项目购物车、图书管理系统、聊天室刷题LeetCode 简单中等Java实现看源码ArrayList、HashMap、Thread 源码后续进阶方向Java WebServlet/JSP → Spring Boot → MyBatis数据库MySQL JDBC中间件Redis、RabbitMQ框架源码Spring、Spring CloudJVM调优内存模型、GC算法温馨提示教程中的每个代码块都可以直接运行。建议你按序列顺序学习每学完一序列就动手练习。如果需要我针对某个具体序列比如集合、多线程做更深入的讲解随时告诉我。祝你Java学习顺利