java电子书

用户投稿头像

用户投稿

管理员

发布于:2026年06月06日

1 阅读 · 0 评论

9个神级电子书下载网站!全世界99%的电子书都能找到!

下面是一份以具体时间段组织的 Java 系统学习电子手册,以网页形式呈现,可直接在浏览器中阅读或打印。 html <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Java 系统学习手册</title> <link rel="preconnect" href="https://fonts.googleapis.com"> <link href="https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@400;700&family=JetBrains+Mono:wght@400;600&family=Noto+Sans+SC:wght@300;400;600&display=swap" rel="stylesheet"> <style> :root { --bg: #0c0f14; --surface: #151921; --surface-alt: #1b2030; --accent: #f7c948; --accent-dim: #b8941e; --text-primary: #e8e4dc; --text-muted: #6b6d76; --text-body: #b0a99a; --green: #4ade80; --blue: #60a5fa; --red: #f87171; --purple: #c084fc; --orange: #fb923c; --border: rgba(255,255,255,0.06); --code-bg: #0f1219; } * { margin: 0; padding: 0; box-sizing: border-box; } html { scroll-behavior: smooth; scrollbar-width: thin; scrollbar-color: var(--accent-dim) var(--bg); } body { font-family: 'Noto Sans SC', sans-serif; background: var(--bg); color: var(--text-body); line-height: 1.8; font-size: 15px; overflow-x: hidden; } body::before { content: ''; position: fixed; inset: 0; background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='1'/%3E%3C/svg%3E"); opacity: 0.025; pointer-events: none; z-index: 9999; } /* ===== NAV ===== */ nav { position: fixed; top: 0; left: 0; right: 0; z-index: 100; background: rgba(12,15,20,0.85); backdrop-filter: blur(20px); border-bottom: 1px solid var(--border); padding: 0 2rem; display: flex; align-items: center; gap: 1.5rem; height: 56px; font-size: 13px; } nav .logo { font-family: 'JetBrains Mono', monospace; font-weight: 600; color: var(--accent); font-size: 16px; letter-spacing: -0.5px; white-space: nowrap; } nav .logo span { color: var(--text-muted); font-weight: 400; } nav a { color: var(--text-muted); text-decoration: none; transition: color 0.2s; white-space: nowrap; } nav a:hover { color: var(--accent); } .nav-scroll { overflow-x: auto; display: flex; gap: 1.2rem; flex: 1; } .nav-scroll::-webkit-scrollbar { display: none; } /* ===== HERO ===== */ .hero { padding: 140px 2rem 80px; max-width: 900px; margin: 0 auto; position: relative; } .hero::before { content: ''; position: absolute; top: 80px; right: -200px; width: 500px; height: 500px; background: radial-gradient(circle, rgba(247,201,72,0.06) 0%, transparent 70%); pointer-events: none; } .hero-badge { display: inline-flex; align-items: center; gap: 6px; background: rgba(247,201,72,0.08); border: 1px solid rgba(247,201,72,0.15); color: var(--accent); font-size: 12px; font-family: 'JetBrains Mono', monospace; padding: 4px 12px; border-radius: 100px; margin-bottom: 24px; animation: fadeUp 0.6s ease both; } .hero h1 { font-family: 'Noto Serif SC', serif; font-size: clamp(36px, 6vw, 56px); font-weight: 700; color: var(--text-primary); line-height: 1.2; letter-spacing: -1px; margin-bottom: 20px; animation: fadeUp 0.6s ease 0.1s both; } .hero h1 em { font-style: normal; color: var(--accent); } .hero p { font-size: 17px; color: var(--text-muted); max-width: 560px; animation: fadeUp 0.6s ease 0.2s both; } .hero-stats { display: flex; gap: 40px; margin-top: 40px; padding-top: 32px; border-top: 1px solid var(--border); animation: fadeUp 0.6s ease 0.3s both; } .hero-stats div span { display: block; font-family: 'JetBrains Mono', monospace; font-size: 28px; font-weight: 600; color: var(--text-primary); } .hero-stats div small { font-size: 12px; color: var(--text-muted); text-transform: uppercase; letter-spacing: 1px; } /* ===== LAYOUT ===== */ .container { max-width: 900px; margin: 0 auto; padding: 0 2rem; } /* ===== SECTION ===== */ .day-section { margin-bottom: 80px; opacity: 0; animation: fadeUp 0.7s ease both; } .day-header { display: flex; align-items: baseline; gap: 16px; margin-bottom: 32px; padding-bottom: 16px; border-bottom: 1px solid var(--border); } .day-num { font-family: 'JetBrains Mono', monospace; font-size: 48px; font-weight: 600; color: var(--accent); line-height: 1; letter-spacing: -3px; } .day-info h2 { font-family: 'Noto Serif SC', serif; font-size: 22px; font-weight: 700; color: var(--text-primary); margin-bottom: 2px; } .day-info small { font-size: 13px; color: var(--text-muted); } /* ===== TIME BLOCK ===== */ .time-block { display: grid; grid-template-columns: 140px 1fr; gap: 24px; margin-bottom: 28px; position: relative; } .time-block::before { content: ''; position: absolute; left: 140px; top: 0; bottom: -28px; width: 1px; background: var(--border); } .time-block:last-child::before { display: none; } .time-label { text-align: right; padding-top: 4px; position: relative; } .time-label::after { content: ''; position: absolute; right: -29px; top: 10px; width: 8px; height: 8px; border-radius: 50%; background: var(--surface); border: 2px solid var(--accent-dim); } .time-label .time { font-family: 'JetBrains Mono', monospace; font-size: 13px; font-weight: 600; color: var(--accent); display: block; line-height: 1.4; } .time-label .duration { font-size: 11px; color: var(--text-muted); } .time-content { background: var(--surface); border: 1px solid var(--border); border-radius: 10px; padding: 20px 24px; transition: border-color 0.3s, transform 0.2s; } .time-content:hover { border-color: rgba(247,201,72,0.2); transform: translateX(4px); } .time-content h3 { font-size: 16px; font-weight: 600; color: var(--text-primary); margin-bottom: 8px; display: flex; align-items: center; gap: 8px; } .tag { font-size: 10px; font-family: 'JetBrains Mono', monospace; padding: 2px 8px; border-radius: 4px; text-transform: uppercase; letter-spacing: 0.5px; font-weight: 600; } .tag-theory { background: rgba(96,165,250,0.12); color: var(--blue); } .tag-practice { background: rgba(74,222,128,0.12); color: var(--green); } .tag-review { background: rgba(192,132,252,0.12); color: var(--purple); } .tag-project { background: rgba(251,146,60,0.12); color: var(--orange); } .tag-break { background: rgba(255,255,255,0.05); color: var(--text-muted); } .time-content p { color: var(--text-body); font-size: 14px; margin-bottom: 10px; } .time-content ul { list-style: none; padding: 0; } .time-content ul li { font-size: 13.5px; color: var(--text-body); padding: 3px 0; padding-left: 18px; position: relative; } .time-content ul li::before { content: '›'; position: absolute; left: 0; color: var(--accent-dim); font-weight: 600; } /* ===== CODE BLOCK ===== */ .code-block { background: var(--code-bg); border: 1px solid var(--border); border-radius: 8px; padding: 16px 20px; margin-top: 12px; font-family: 'JetBrains Mono', monospace; font-size: 12.5px; line-height: 1.7; color: var(--text-body); overflow-x: auto; position: relative; } .code-block .kw { color: var(--purple); } .code-block .str { color: var(--green); } .code-block .type { color: var(--blue); } .code-block .cm { color: var(--text-muted); } .code-block .num { color: var(--orange); } .code-block .fn { color: var(--accent); } /* ===== TIP BOX ===== */ .tip-box { background: rgba(247,201,72,0.04); border-left: 3px solid var(--accent-dim); padding: 14px 18px; margin-top: 12px; border-radius: 0 8px 8px 0; font-size: 13px; color: var(--text-body); } .tip-box strong { color: var(--accent); } /* ===== TOC ===== */ .toc { background: var(--surface); border: 1px solid var(--border); border-radius: 12px; padding: 28px 32px; margin-bottom: 64px; } .toc h3 { font-family: 'Noto Serif SC', serif; font-size: 18px; color: var(--text-primary); margin-bottom: 16px; } .toc-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: 8px; } .toc-grid a { display: flex; align-items: center; gap: 10px; text-decoration: none; color: var(--text-body); font-size: 14px; padding: 8px 12px; border-radius: 6px; transition: background 0.2s, color 0.2s; } .toc-grid a:hover { background: rgba(247,201,72,0.06); color: var(--accent); } .toc-grid a .toc-day { font-family: 'JetBrains Mono', monospace; font-size: 11px; color: var(--text-muted); background: rgba(255,255,255,0.04); padding: 2px 6px; border-radius: 4px; } /* ===== FOOTER ===== */ footer { text-align: center; padding: 60px 2rem 40px; border-top: 1px solid var(--border); margin-top: 40px; } footer p { font-size: 13px; color: var(--text-muted); } footer .heart { color: var(--red); } /* ===== ANIMATIONS ===== */ @keyframes fadeUp { from { opacity: 0; transform: translateY(24px); } to { opacity: 1; transform: translateY(0); } } .day-section:nth-child(1) { animation-delay: 0.1s; } .day-section:nth-child(2) { animation-delay: 0.15s; } .day-section:nth-child(3) { animation-delay: 0.2s; } .day-section:nth-child(4) { animation-delay: 0.25s; } .day-section:nth-child(5) { animation-delay: 0.3s; } .day-section:nth-child(6) { animation-delay: 0.35s; } .day-section:nth-child(7) { animation-delay: 0.4s; } /* ===== RESPONSIVE ===== */ @media (max-width: 640px) { .time-block { grid-template-columns: 1fr; gap: 8px; } .time-label { text-align: left; } .time-label::after { display: none; } .time-block::before { display: none; } .hero-stats { flex-wrap: wrap; gap: 24px; } nav { padding: 0 1rem; gap: 0.8rem; font-size: 12px; } } </style> </head> <body> <!-- NAV --> <nav> <div class="logo">Java<span>::手册</span></div> <div class="nav-scroll"> <a href="#day1">Day 1</a> <a href="#day2">Day 2</a> <a href="#day3">Day 3</a> <a href="#day4">Day 4</a> <a href="#day5">Day 5</a> <a href="#day6">Day 6</a> <a href="#day7">Day 7</a> </div> </nav> <!-- HERO --> <div class="hero"> <div class="hero-badge">JAVA LEARNING BLUEPRINT v2.0</div> <h1>Java 系统学习<br><em>七日精读手册</em></h1> <p>以精确时间块编排,每天 4 小时深度学习,从基础语法到面向对象,从集合框架到实战项目,步步为营。</p> <div class="hero-stats"> <div><span>7</span><small>天计划</small></div> <div><span>28h</span><small>总学时</small></div> <div><span>42</span><small>知识节点</small></div> <div><span>5</span><small>实战项目</small></div> </div> </div> <!-- TOC --> <div class="container"> <div class="toc"> <h3>目录导航</h3> <div class="toc-grid"> <a href="#day1"><span class="toc-day">D1</span> 环境搭建 · 基础语法 · 数据类型</a> <a href="#day2"><span class="toc-day">D2</span> 流程控制 · 数组 · 方法</a> <a href="#day3"><span class="toc-day">D3</span> 面向对象(上)· 类与对象</a> <a href="#day4"><span class="toc-day">D4</span> 面向对象(下)· 继承多态</a> <a href="#day5"><span class="toc-day">D5</span> 异常处理 · 常用 API</a> <a href="#day6"><span class="toc-day">D6</span> 集合框架 · 泛型 · IO</a> <a href="#day7"><span class="toc-day">D7</span> 综合实战 · 项目串联</a> </div> </div> </div> <!-- ==================== DAY 1 ==================== --> <div class="container"> <div class="day-section" id="day1"> <div class="day-header"> <div class="day-num">01</div> <div class="day-info"> <h2>环境搭建与 Java 基础</h2> <small>JDK 安装 · Hello World · 变量 · 数据类型 · 运算符</small> </div> </div> <div class="time-block"> <div class="time-label"> <span class="time">09:00 - 09:45</span> <span class="duration">45 分钟</span> </div> <div class="time-content"> <h3>Java 概述与环境搭建 <span class="tag tag-theory">理论</span></h3> <p>理解 Java 语言的诞生背景、核心特性和三大技术平台。</p> <ul> <li>Java SE / EE / ME 的定位与区别</li> <li>JDK、JRE、JVM 三者关系</li> <li>下载并安装 JDK 17+,配置 JAVA_HOME 与 PATH</li> <li>验证安装:<code>java -version</code> 和 <code>javac -version</code></li> </ul> <div class="tip-box"> <strong>要点:</strong>JVM 是跨平台的核心。"Write Once, Run Anywhere" 的实现依赖于字节码 + JVM 的组合。 </div> </div> </div> <div class="time-block"> <div class="time-label"> <span class="time">10:00 - 10:45</span> <span class="duration">45 分钟</span> </div> <div class="time-content"> <h3>第一个 Java 程序 <span class="tag tag-practice">实践</span></h3> <p>从零编写并运行 Hello World,理解程序的基本结构。</p> <div class="code-block"> <span class="kw">public class</span> <span class="type">HelloWorld</span> { <span class="kw">public static void</span> <span class="fn">main</span>(<span class="type">String</span>[] args) { <span class="type">System</span>.out.<span class="fn">println</span>(<span class="str">"Hello, Java!"</span>); } } </div> <ul> <li>类名与文件名必须一致(public 类)</li> <li>main 方法是程序入口:固定签名</li> <li>编译 <code>javac HelloWorld.java</code> → 运行 <code>java HelloWorld</code></li> <li>尝试修改输出内容、添加多条 println</li> </ul> </div> </div> <div class="time-block"> <div class="time-label"> <span class="time">11:00 - 11:45</span> <span class="duration">45 分钟</span> </div> <div class="time-content"> <h3>变量与数据类型 <span class="tag tag-theory">理论</span></h3> <p>掌握 Java 的 8 种基本数据类型和引用类型。</p> <ul> <li>整型:byte(1B) / short(2B) / int(4B) / long(8B)</li> <li>浮点:float(4B) / double(8B)</li> <li>字符:char(2B, Unicode)</li> <li>布尔:boolean(true/false)</li> <li>变量声明、初始化、命名规范(驼峰命名)</li> <li>类型转换:自动提升 vs 强制转换(cast)</li> </ul> <div class="code-block"> <span class="type">int</span> age = <span class="num">25</span>; <span class="type">double</span> price = <span class="num">99.9</span>; <span class="type">char</span> grade = <span class="str">'A'</span>; <span class="type">boolean</span> isJavaFun = <span class="kw">true</span>; <span class="type">long</span> population = <span class="num">7_800_000_000L</span>; <span class="cm">// 下划线增强可读性</span> </div> </div> </div> <div class="time-block"> <div class="time-label"> <span class="time">14:00 - 14:45</span> <span class="duration">45 分钟</span> </div> <div class="time-content"> <h3>运算符与表达式 <span class="tag tag-theory">理论</span></h3> <ul> <li>算术运算符:+ - * / %(注意整数除法)</li> <li>关系运算符:== != > < >= <=</li> <li>逻辑运算符:&& || !(短路求值)</li> <li>赋值运算符:= += -= *= /=</li> <li>三元运算符:条件 ? 值1 : 值2</li> <li>运算符优先级(括号优先)</li> </ul> </div> </div> <div class="time-block"> <div class="time-label"> <span class="time">15:00 - 15:45</span> <span class="duration">45 分钟</span> </div> <div class="time-content"> <h3>类型转换与 Scanner 输入 <span class="tag tag-practice">实践</span></h3> <ul> <li>自动类型提升规则:byte→short→int→long→float→double</li> <li>强制转换风险:<code>(int) 3.9 → 3</code> 截断而非四舍五入</li> <li>使用 Scanner 读取用户输入</li> <li>练习:编写温度转换器(华氏 ↔ 摄氏)</li> </ul> <div class="code-block"> <span class="kw">import</span> java.util.<span class="type">Scanner</span>; <span class="type">Scanner</span> sc = <span class="kw">new</span> <span class="type">Scanner</span>(<span class="type">System</span>.in); <span class="type">System</span>.out.<span class="fn">print</span>(<span class="str">"请输入温度: "</span>); <span class="type">double</span> celsius = sc.<span class="fn">nextDouble</span>(); <span class="type">double</span> fahrenheit = celsius * <span class="num">9.0</span> / <span class="num">5</span> + <span class="num">32</span>; <span class="type">System</span>.out.<span class="fn">println</span>(<span class="str">"华氏温度: "</span> + fahrenheit); </div> </div> </div> <div class="time-block"> <div class="time-label"> <span class="time">16:00 - 16:30</span> <span class="duration">30 分钟</span> </div> <div class="time-content"> <h3>当日复习与笔记整理 <span class="tag tag-review">复习</span></h3> <ul> <li>手写整理 JDK/JRE/JVM 关系图</li> <li>默写 8 种基本数据类型及其大小</li> <li>回顾编译运行流程,确保能独立完成</li> <li>完成 3 道数据类型转换练习题</li> </ul> </div> </div> </div> <!-- ==================== DAY 2 ==================== --> <div class="day-section" id="day2"> <div class="day-header"> <div class="day-num">02</div> <div class="day-info"> <h2>流程控制与数组</h2> <small>条件分支 · 循环 · 数组操作 · 方法定义</small> </div> </div> <div class="time-block"> <div class="time-label"> <span class="time">09:00 - 09:45</span> <span class="duration">45 分钟</span> </div> <div class="time-content"> <h3>条件分支语句 <span class="tag tag-theory">理论</span></h3> <ul> <li>if / else if / else 结构与嵌套</li> <li>switch 语句(Java 14+ 增强版 switch 表达式)</li> <li>case 穿透与 break 的重要性</li> <li>字符串比较用 equals(),不用 ==</li> </ul> <div class="code-block"> <span class="cm">// 增强 switch (Java 14+)</span> <span class="type">String</span> day = <span class="str">"MON"</span>; <span class="type">String</span> type = <span class="kw">switch</span> (day) { <span class="kw">case</span> <span class="str">"MON"</span>, <span class="str">"TUE"</span>, <span class="str">"WED"</span>, <span class="str">"THU"</span>, <span class="str">"FRI"</span> -> <span class="str">"工作日"</span>; <span class="kw">case</span> <span class="str">"SAT"</span>, <span class="str">"SUN"</span> -> <span class="str">"周末"</span>; <span class="kw">default</span> -> <span class="str">"未知"</span>; }; </div> </div> </div> <div class="time-block"> <div class="time-label"> <span class="time">10:00 - 10:45</span> <span class="duration">45 分钟</span> </div> <div class="time-content"> <h3>循环结构 <span class="tag tag-theory">理论</span></h3> <ul> <li>for 循环:初始化; 条件; 更新</li> <li>while 与 do-while 的区别</li> <li>break(跳出循环)与 continue(跳过本次)</li> <li>嵌套循环与九九乘法表</li> </ul> <div class="code-block"> <span class="cm">// 九九乘法表</span> <span class="kw">for</span> (<span class="type">int</span> i = <span class="num">1</span>; i <= <span class="num">9</span>; i++) { <span class="kw">for</span> (<span class="type">int</span> j = <span class="num">1</span>; j <= i; j++) { <span class="type">System</span>.out.<span class="fn">printf</span>(<span class="str">"%d×%d=%-4d"</span>, j, i, i * j); } <span class="type">System</span>.out.<span class="fn">println</span>(); } </div> </div> </div> <div class="time-block"> <div class="time-label"> <span class="time">11:00 - 11:45</span> <span class="duration">45 分钟</span> </div> <div class="time-content"> <h3>一维数组 <span class="tag tag-practice">实践</span></h3> <ul> <li>声明与初始化:<code>int[] arr = new int</code> vs <code>int[] arr = {1,2,3}</code></li> <li>数组长度:<code>arr.length</code>(属性,不是方法)</li> <li>遍历:for 循环 + for-each</li> <li>练习:求最大值、最小值、平均值</li> <li>练习:数组反转</li> </ul> </div> </div> <div class="time-block"> <div class="time-label"> <span class="time">14:00 - 14:45</span> <span class="duration">45 分钟</span> </div> <div class="time-content"> <h3>二维数组与排序 <span class="tag tag-practice">实践</span></h3> <ul> <li>二维数组声明:<code>int[][] matrix = new int</code></li> <li>不规则数组(锯齿数组)</li> <li>冒泡排序算法实现</li> <li>Arrays 工具类:<code>sort()</code> <code>toString()</code> <code>fill()</code></li> </ul> <div class="code-block"> <span class="cm">// 冒泡排序</span> <span class="kw">for</span> (<span class="type">int</span> i = <span class="num">0</span>; i < arr.length - <span class="num">1</span>; i++) { <span class="kw">for</span> (<span class="type">int</span> j = <span class="num">0</span>; j < arr.length - <span class="num">1</span> - i; j++) { <span class="kw">if</span> (arr[j] > arr[j + <span class="num">1</span>]) { <span class="type">int</span> temp = arr[j]; arr[j] = arr[j + <span class="num">1</span>]; arr[j + <span class="num">1</span>] = temp; } } } </div> </div> </div> <div class="time-block"> <div class="time-label"> <span class="time">15:00 - 15:45</span> <span class="duration">45 分钟</span> </div> <div class="time-content"> <h3>方法定义与调用 <span class="tag tag-theory">理论</span></h3> <ul> <li>方法签名:访问修饰符 返回值 方法名(参数列表)</li> <li>参数传递:Java 只有值传递(基本类型 vs 引用类型)</li> <li>方法重载(Overload):同名不同参数</li> <li>可变参数:<code>int... nums</code></li> </ul> <div class="code-block"> <span class="kw">public static int</span> <span class="fn">max</span>(<span class="type">int</span> a, <span class="type">int</span> b) { <span class="kw">return</span> a > b ? a : b; } <span class="cm">// 可变参数</span> <span class="kw">public static int</span> <span class="fn">sum</span>(<span class="type">int</span>... nums) { <span class="type">int</span> total = <span class="num">0</span>; <span class="kw">for</span> (<span class="type">int</span> n : nums) total += n; <span class="kw">return</span> total; } </div> </div> </div> <div class="time-block"> <div class="time-label"> <span class="time">16:00 - 16:30</span> <span class="duration">30 分钟</span> </div> <div class="time-content"> <h3>综合练习 <span class="tag tag-review">复习</span></h3> <ul> <li>编写猜数字游戏(随机数 + 循环 + 条件判断)</li> <li>编写学生成绩管理:输入 N 个成绩,排序并输出等级</li> <li>手写冒泡排序,确保理解每一趟的逻辑</li> </ul> </div> </div> </div> <!-- ==================== DAY 3 ==================== --> <div class="day-section" id="day3"> <div class="day-header"> <div class="day-num">03</div> <div class="day-info"> <h2>面向对象(上)</h2> <small>类与对象 · 构造器 · this · 封装 · static</small> </div> </div> <div class="time-block"> <div class="time-label"> <span class="time">09:00 - 09:45</span> <span class="duration">45 分钟</span> </div> <div class="time-content"> <h3>面向对象思想概述 <span class="tag tag-theory">理论</span></h3> <ul> <li>面向过程 vs 面向对象的思维方式差异</li> <li>OOP 三大特征:封装、继承、多态</li> <li>类 = 模板(属性 + 方法),对象 = 实例</li> <li>从现实世界抽象出类:名词→属性,动词→方法</li> </ul> <div class="tip-box"> <strong>类比:</strong>类是"饼干模具",对象是"用模具做出来的饼干",模具定义形状,饼干是具体的实体。 </div> </div> </div> <div class="time-block"> <div class="time-label"> <span class="time">10:00 - 10:45</span> <span class="duration">45 分钟</span> </div> <div class="time-content"> <h3>类的定义与对象创建 <span class="tag tag-practice">实践</span></h3> <div class="code-block"> <span class="kw">public class</span> <span class="type">Student</span> { <span class="cm">// 属性(成员变量)</span> <span class="type">String</span> name; <span class="type">int</span> age; <span class="type">double</span> score; <span class="cm">// 方法</span> <span class="kw">public void</span> <span class="fn">introduce</span>() { <span class="type">System</span>.out.<span class="fn">println</span>(<span class="str">"我叫"</span> + name + <span class="str">",今年"</span> + age + <span class="str">"岁"</span>); } } <span class="cm">// 创建对象</span> <span class="type">Student</span> stu = <span class="kw">new</span> <span class="type">Student</span>(); stu.name = <span class="str">"张三"</span>; stu.age = <span class="num">20</span>; stu.<span class="fn">introduce</span>(); </div> </div> </div> <div class="time-block"> <div class="time-label"> <span class="time">11:00 - 11:45</span> <span class="duration">45 分钟</span> </div> <div class="time-content"> <h3>构造器与 this 关键字 <span class="tag tag-theory">理论</span></h3> <ul> <li>构造器(Constructor):创建对象时自动调用</li> <li>无参构造 vs 有参构造</li> <li>如果写了有参构造,编译器不再提供默认无参构造</li> <li>this 指向当前对象,用于区分同名的成员变量和局部变量</li> <li>this() 调用其他构造器(必须在第一行)</li> </ul> </div> </div> <div class="time-block"> <div class="time-label"> <span class="time">14:00 - 14:45</span> <span class="duration">45 分钟</span> </div> <div class="time-content"> <h3>封装与访问控制 <span class="tag tag-theory">理论</span></h3> <ul> <li>封装的意义:隐藏实现细节,暴露安全接口</li> <li>private → getter/setter</li> <li>四种访问修饰符:private / (default) / protected / public</li> <li>JavaBean 规范:私有属性 + 公共 getter/setter + 无参构造</li> </ul> <div class="code-block"> <span class="kw">public class</span> <span class="type">Account</span> { <span class="kw">private double</span> balance; <span class="kw">public double</span> <span class="fn">getBalance</span>() { <span class="kw">return</span> balance; } <span class="kw">public void</span> <span class="fn">deposit</span>(<span class="type">double</span> amount) { <span class="kw">if</span> (amount > <span class="num">0</span>) balance += amount; } } </div> </div> </div> <div class="time-block"> <div class="time-label"> <span class="time">15:00 - 15:45</span> <span class="duration">45 分钟</span> </div> <div class="time-content"> <h3>static 关键字 <span class="tag tag-theory">理论</span></h3> <ul> <li>静态变量:属于类,所有对象共享</li> <li>静态方法:不能访问非静态成员</li> <li>静态代码块:类加载时执行一次</li> <li>典型应用:工具类(如 Math.random())</li> </ul> </div> </div> <div class="time-block"> <div class="time-label"> <span class="time">16:00 - 16:30</span> <span class="duration">30 分钟</span> </div> <div class="time-content"> <h3>实战:银行账户模拟 <span class="tag tag-project">项目</span></h3> <ul> <li>设计 BankAccount 类:余额、存款、取款、查询</li> <li>用 private 保护余额,取款时校验余额是否充足</li> <li>用 static 统计账户总数</li> <li>创建多个账户对象测试</li> </ul> </div> </div> </div> <!-- ==================== DAY 4 ==================== --> <div class="day-section" id="day4"> <div class="day-header"> <div class="day-num">04</div> <div class="day-info"> <h2>面向对象(下)</h2> <small>继承 · 多态 · 抽象类 · 接口 · 内部类</small> </div> </div> <div class="time-block"> <div class="time-label"> <span class="time">09:00 - 09:45</span> <span class="duration">45 分钟</span> </div> <div class="time-content"> <h3>继承 <span class="tag tag-theory">理论</span></h3> <ul> <li>extends 关键字:子类继承父类的属性和方法</li> <li>Java 单继承:一个类只能有一个直接父类</li> <li>所有类默认继承 Object 类</li> <li>方法重写(Override):@Override 注解</li> <li>super 关键字:访问父类构造器和方法</li> <li>子类构造器第一行必须调用父类构造器(super())</li> </ul> <div class="code-block"> <span class="kw">public class</span> <span class="type">Animal</span> { <span class="type">String</span> name; <span class="kw">public void</span> <span class="fn">speak</span>() { <span class="type">System</span>.out.<span class="fn">println</span>(<span class="str">"..."</span>); } } <span class="kw">public class</span> <span class="type">Dog</span> <span class="kw">extends</span> <span class="type">Animal</span> { <span class="kw">@Override</span> <span class="kw">public void</span> <span class="fn">speak</span>() { <span class="type">System</span>.out.<span class="fn">println</span>(name + <span class="str">":汪汪!"</span>); } } </div> </div> </div> <div class="time-block"> <div class="time-label"> <span class="time">10:00 - 10:45</span> <span class="duration">45 分钟</span> </div> <div class="time-content"> <h3>多态 <span class="tag tag-theory">理论</span></h3> <ul> <li>父类引用指向子类对象:<code>Animal a = new Dog()</code></li> <li>编译看左边,运行看右边</li> <li>向上转型(自动)vs 向下转型(强制,需 instanceof 判断)</li> <li>多态是面向对象最强大的特性之一</li> </ul> <div class="code-block"> <span class="type">Animal</span> a = <span class="kw">new</span> <span class="type">Dog</span>(<span class="str">"旺财"</span>); a.<span class="fn">speak</span>(); <span class="cm">// 运行时调用 Dog 的 speak → "旺财:汪汪!"</span> <span class="kw">if</span> (a <span class="kw">instanceof</span> <span class="type">Dog</span> d) { <span class="cm">// Java 16+ 模式匹配</span> d.<span class="fn">fetch</span>(); <span class="cm">// 安全向下转型</span> } </div> </div> </div> <div class="time-block"> <div class="time-label"> <span class="time">11:00 - 11:45</span> <span class="duration">45 分钟</span> </div> <div class="time-content"> <h3>抽象类与接口 <span class="tag tag-theory">理论</span></h3> <ul> <li>abstract class:可以有抽象方法和具体方法</li> <li>abstract 方法:只有声明,没有实现,子类必须重写</li> <li>接口(interface):纯行为契约,Java 8+ 可有 default 方法</li> <li>类可以实现多个接口:<code>implements A, B</code></li> <li>什么时候用抽象类 vs 接口?(is-a vs has-a/can-do)</li> </ul> <div class="code-block"> <span class="kw">public interface</span> <span class="type">Flyable</span> { <span class="kw">void</span> <span class="fn">fly</span>(); <span class="kw">default void</span> <span class="fn">land</span>() { <span class="type">System</span>.out.<span class="fn">println</span>(<span class="str">"着陆"</span>); } } <span class="kw">public class</span> <span class="type">Bird</span> <span class="kw">extends</span> <span class="type">Animal</span> <span class="kw">implements</span> <span class="type">Flyable</span> { <span class="kw">@Override public void</span> <span class="fn">fly</span>() { <span class="type">System</span>.out.<span class="fn">println</span>(name + <span class="str">"展翅高飞"</span>); } } </div> </div> </div> <div class="time-block"> <div class="time-label"> <span class="time">14:00 - 14:45</span> <span class="duration">45 分钟</span> </div> <div class="time-content"> <h3>常用方法重写 <span class="tag tag-practice">实践</span></h3> <ul> <li>toString():自定义对象的字符串表示</li> <li>equals() 与 hashCode():自定义相等逻辑</li> <li>规则:重写 equals 必须同时重写 hashCode</li> </ul> <div class="code-block"> <span class="kw">@Override</span> <span class="kw">public boolean</span> <span class="fn">equals</span>(<span class="type">Object</span> o) { <span class="kw">if</span> (<span class="kw">this</span> == o) <span class="kw">return true</span>; <span class="kw">if</span> (o == <span class="kw">null</span> || getClass() != o.getClass()) <span class="kw">return false</span>; <span class="type">Student</span> s = (<span class="type">Student</span>) o; <span class="kw">return</span> age == s.age && <span class="type">Objects</span>.<span class="fn">equals</span>(name, s.name); } </div> </div> </div> <div class="time-block"> <div class="time-label"> <span class="time">15:00 - 15:45</span> <span class="duration">45 分钟</span> </div> <div class="time-content"> <h3>对象数组与综合练习 <span class="tag tag-practice">实践</span></h3> <ul> <li>对象数组:<code>Student[] students = new Student</code></li> <li>遍历对象数组,调用每个对象的方法</li> <li>练习:设计"图形计算器"</li> </ul> </div> </div> <div class="time-block"> <div class="time-label"> <span class="time">16:00 - 16:30</span> <span class="duration">30 分钟</span> </div> <div class="time-content"> <h3>实战:图形面积计算器 <span class="tag tag-project">项目</span></h3> <ul> <li>抽象类 Shape,定义抽象方法 area()</li> <li>Circle / Rectangle / Triangle 各自实现</li> <li>用 Shape[] 存放不同图形,多态调用 area()</li> <li>遍历输出所有图形的面积</li> </ul> </div> </div> </div> <!-- ==================== DAY 5 ==================== --> <div class="day-section" id="day5"> <div class="day-header"> <div class="day-num">05</div> <div class="day-info"> <h2>异常处理与常用 API</h2> <small>异常体系 · try-catch · 常用工具类</small> </div> </div> <div class="time-block"> <div class="time-label"> <span class="time">09:00 - 09:45</span> <span class="duration">45 分钟</span> </div> <div class="time-content"> <h3>异常处理机制 <span class="tag tag-theory">理论</span></h3> <ul> <li>异常体系:Throwable → Error(不可恢复)/ Exception</li> <li>Checked Exception vs RuntimeException(Unchecked)</li> <li>try-catch-finally 执行流程</li> <li>throws 声明异常 vs throw 抛出异常</li> <li>自定义异常类</li> </ul> <div class="code-block"> <span class="kw">try</span> { <span class="type">int</span> result = <span class="num">10</span> / <span class="num">0</span>; } <span class="kw">catch</span> (<span class="type">ArithmeticException</span> e) { <span class="type">System</span>.out.<span class="fn">println</span>(<span class="str">"算术错误: "</span> + e.<span class="fn">getMessage</span>()); } <span class="kw">finally</span> { <span class="type">System</span>.out.<span class="fn">println</span>(<span class="str">"无论是否异常都会执行"</span>); } </div> </div> </div> <div class="time-block"> <div class="time-label"> <span class="time">10:00 - 10:45</span> <span class="duration">45 分钟</span> </div> <div class="time-content"> <h3>String 与 StringBuilder <span class="tag tag-theory">理论</span></h3> <ul> <li>String 不可变性(immutable):每次修改创建新对象</li> <li>字符串常量池与 == vs equals()</li> <li>常用方法:length() / charAt() / substring() / indexOf() / replace() / trim() / split()</li> <li>StringBuilder:可变字符序列,高效拼接</li> <li>StringJoiner:优雅拼接带分隔符的字符串</li> </ul> <div class="code-block"> <span class="type">StringBuilder</span> sb = <span class="kw">new</span> <span class="type">StringBuilder</span>(); <span class="kw">for</span> (<span class="type">int</span> i = <span class="num">0</span>; i < <span class="num">5</span>; i++) { sb.<span class="fn">append</span>(i).<span class="fn">append</span>(<span class="str">", "</span>); } <span class="type">System</span>.out.<span class="fn">println</span>(sb); <span class="cm">// 0, 1, 2, 3, 4,</span> </div> </div> </div> <div class="time-block"> <div class="time-label"> <span class="time">11:00 - 11:45</span> <span class="duration">45 分钟</span> </div> <div class="time-content"> <h3>包装类与常用工具 <span class="tag tag-theory">理论</span></h3> <ul> <li>自动装箱 / 拆箱:<code>Integer x = 100</code> ↔ <code>int n = x</code></li> <li>Integer 缓存池(-128 ~ 127)</li> <li>Math 类:random() / max() / abs() / round()</li> <li>日期 API:LocalDate / LocalTime / LocalDateTime(Java 8+)</li> <li>随机数:Random 类与 ThreadLocalRandom</li> </ul> </div> </div> <div class="time-block"> <div class="time-label"> <span class="time">14:00 - 14:45</span> <span class="duration">45 分钟</span> </div> <div class="time-content"> <h3>正则表达式入门 <span class="tag tag-theory">理论</span></h3> <ul> <li>基础语法:. * + ? \d \w \s [] ^ $</li> <li>Pattern 与 Matcher 类</li> <li>String 的 matches() / replaceAll() / split()</li> <li>练习:验证邮箱、手机号格式</li> </ul> </div> </div> <div class="time-block"> <div class="time-label"> <span class="time">15:00 - 15:45</span> <span class="duration">45 分钟</span> </div> <div class="time-content"> <h3>综合练习 <span class="tag tag-practice">实践</span></h3> <ul> <li>编写一个密码强度检测器(正则 + 异常处理)</li> <li>编写一个简单的计算器(处理除零异常、输入格式异常)</li> <li>使用 LocalDateTime 实现倒计时工具</li> </ul> </div> </div> <div class="time-block"> <div class="time-label"> <span class="time">16:00 - 16:30</span> <span class="duration">30 分钟</span> </div> <div class="time-content"> <h3>复习与查漏补缺 <span class="tag tag-review">复习</span></h3> <ul> <li>整理异常类继承体系图</li> <li>对比 String vs StringBuilder vs StringBuffer</li> <li>默写 10 个常用 String 方法</li> </ul> </div> </div> </div> <!-- ==================== DAY 6 ==================== --> <div class="day-section" id="day6"> <div class="day-header"> <div class="day-num">06</div> <div class="day-info"> <h2>集合框架与 IO</h2> <small>List · Set · Map · 泛型 · 文件读写</small> </div> </div> <div class="time-block"> <div class="time-label"> <span class="time">09:00 - 09:45</span> <span class="duration">45 分钟</span> </div> <div class="time-content"> <h3>泛型基础 <span class="tag tag-theory">理论</span></h3> <ul> <li>为什么需要泛型:类型安全,避免强制转换</li> <li>泛型类:<code>class Box&lt;T&gt;</code></li> <li>泛型方法:<code>&lt;T&gt; T getFirst(List&lt;T&gt; list)</code></li> <li>泛型通配符:? extends T(上界)/ ? super T(下界)</li> <li>PECS 原则:Producer Extends, Consumer Super</li> </ul> </div> </div> <div class="time-block"> <div class="time-label"> <span class="time">10:00 - 10:45</span> <span class="duration">45 分钟</span> </div> <div class="time-content"> <h3>List 与 ArrayList <span class="tag tag-practice">实践</span></h3> <ul> <li>ArrayList 底层:动态数组,默认容量 10,1.5 倍扩容</li> <li>常用方法:add() / get() / remove() / size() / contains()</li> <li>LinkedList:双向链表,频繁增删场景</li> <li>遍历:for 循环 / for-each / Iterator / forEach()</li> </ul> <div class="code-block"> <span class="type">List</span>&lt;<span class="type">String</span>&gt; names = <span class="kw">new</span> <span class="type">ArrayList</span>&lt;&gt;(); names.<span class="fn">add</span>(<span class="str">"Alice"</span>); names.<span class="fn">add</span>(<span class="str">"Bob"</span>); names.<span class="fn">add</span>(<span class="str">"Charlie"</span>); <span class="kw">for</span> (<span class="type">String</span> name : names) { <span class="type">System</span>.out.<span class="fn">println</span>(name); } </div> </div> </div> <div class="time-block"> <div class="time-label"> <span class="time">11:00 - 11:45</span> <span class="duration">45 分钟</span> </div> <div class="time-content"> <h3>Set 与 HashSet <span class="tag tag-theory">理论</span></h3> <ul> <li>Set 特点:无序、不重复</li> <li>HashSet 底层:HashMap,依赖 hashCode() 和 equals()</li> <li>LinkedHashSet:保持插入顺序</li> <li>TreeSet:自然排序 / 自定义 Comparator</li> <li>去重原理:先比 hashCode,再比 equals</li> </ul> </div> </div> <div class="time-block"> <div class="time-label"> <span class="time">14:00 - 14:45</span> <span class="duration">45 分钟</span> </div> <div class="time-content"> <h3>Map 与 HashMap <span class="tag tag-practice">实践</span></h3> <ul> <li>键值对结构:Key 唯一,Value 可重复</li> <li>常用方法:put() / get() / remove() / containsKey() / keySet()</li> <li>遍历方式:keySet() / entrySet() / forEach()</li> <li>HashMap 底层:数组+链表+红黑树(JDK8+)</li> <li>LinkedHashMap / TreeMap / ConcurrentHashMap</li> </ul> <div class="code-block"> <span class="type">Map</span>&lt;<span class="type">String</span>, <span class="type">Integer</span>&gt; scores = <span class="kw">new</span> <span class="type">HashMap</span>&lt;&gt;(); scores.<span class="fn">put</span>(<span class="str">"数学"</span>, <span class="num">95</span>); scores.<span class="fn">put</span>(<span class="str">"英语"</span>, <span class="num">88</span>); scores.<span class="fn">forEach</span>((subject, score) -> <span class="type">System</span>.out.<span class="fn">println</span>(subject + <span class="str">": "</span> + score)); </div> </div> </div> <div class="time-block"> <div class="time-label"> <span class="time">15:00 - 15:45</span> <span class="duration">45 分钟</span> </div> <div class="time-content"> <h3>IO 流基础 <span class="tag tag-theory">理论</span></h3> <ul> <li>IO 分类:字节流(InputStream/OutputStream)vs 字符流(Reader/Writer)</li> <li>File 类:文件/目录操作</li> <li>缓冲流:BufferedReader / BufferedWriter(提高效率)</li> <li>try-with-resources 自动关闭资源(Java 7+)</li> </ul> <div class="code-block"> <span class="kw">try</span> (<span class="type">BufferedReader</span> br = <span class="kw">new</span> <span class="type">BufferedReader</span>( <span class="kw">new</span> <span class="type">FileReader</span>(<span class="str">"data.txt"</span>))) { <span class="type">String</span> line; <span class="kw">while</span> ((line = br.<span class="fn">readLine</span>()) != <span class="kw">null</span>) { <span class="type">System</span>.out.<span class="fn">println</span>(line); } } </div> </div> </div> <div class="time-block"> <div class="time-label"> <span class="time">16:00 - 16:30</span> <span class="duration">30 分钟</span> </div> <div class="time-content"> <h3>实战:词频统计器 <span class="tag tag-project">项目</span></h3> <ul> <li>读取一个文本文件</li> <li>用 Map&lt;String, Integer&gt; 统计每个单词出现次数</li> <li>按出现频率降序排列输出</li> <li>综合运用:IO + Map + List + 排序</li> </ul> </div> </div> </div> <!-- ==================== DAY 7 ==================== --> <div class="day-section" id="day7"> <div class="day-header"> <div class="day-num">07</div> <div class="day-info"> <h2>综合实战日</h2> <small>Lambda · Stream · 项目串联 · 总结回顾</small> </div> </div> <div class="time-block"> <div class="time-label"> <span class="time">09:00 - 09:45</span> <span class="duration">45 分钟</span> </div> <div class="time-content"> <h3>Lambda 表达式 <span class="tag tag-theory">理论</span></h3> <ul> <li>函数式接口:只有一个抽象方法的接口(@FunctionalInterface)</li> <li>Lambda 语法:<code>(参数) -> 表达式</code></li> <li>常见函数式接口:Predicate / Function / Consumer / Supplier</li> <li>方法引用:<code>String::length</code> <code>System.out::println</code></li> </ul> <div class="code-block"> <span class="cm">// Lambda 排序</span> names.<span class="fn">sort</span>((a, b) -> a.<span class="fn">length</span>() - b.<span class="fn">length</span>()); <span class="cm">// 方法引用</span> names.<span class="fn">forEach</span>(<span class="type">System</span>.out::<span class="fn">println</span>); </div> </div> </div> <div class="time-block"> <div class="time-label"> <span class="time">10:00 - 10:45</span> <span class="duration">45 分钟</span> </div> <div class="time-content"> <h3>Stream API <span class="tag tag-practice">实践</span></h3> <ul> <li>创建 Stream:stream() / of() / range()</li> <li>中间操作:filter() / map() / sorted() / distinct() / limit()</li> <li>终端操作:collect() / forEach() / count() / reduce()</li> <li>Collectors 工具类:toList() / groupingBy() / joining()</li> </ul> <div class="code-block"> <span class="cm">// 找出成绩前 3 名的学生姓名</span> <span class="type">List</span>&lt;<span class="type">String</span>&gt; top3 = students.<span class="fn">stream</span>() .<span class="fn">sorted</span>(<span class="type">Comparator</span>.<span class="fn">comparingDouble</span>(<span class="type">Student</span>::getScore).<span class="fn">reversed</span>()) .<span class="fn">limit</span>(<span class="num">3</span>) .<span class="fn">map</span>(<span class="type">Student</span>::getName) .<span class="fn">collect</span>(<span class="type">Collectors</span>.<span class="fn">toList</span>()); </div> </div> </div> <div class="time-block"> <div class="time-label"> <span class="time">11:00 - 11:45</span> <span class="duration">45 分钟</span> </div> <div class="time-content"> <h3>项目设计与架构 <span class="tag tag-theory">理论</span></h3> <ul> <li>分析需求:学生管理系统功能清单</li> <li>设计类结构:Student / StudentManager / DataStore</li> <li>模块划分:增删改查 + 文件持久化 + 控制台交互</li> <li>代码规范:包结构、命名规范、注释习惯</li> </ul> </div> </div> <div class="time-block"> <div class="time-label"> <span class="time">14:00 - 15:30</span> <span class="duration">90 分钟</span> </div> <div class="time-content"> <h3>学生管理系统——完整实现 <span class="tag tag-project">项目</span></h3> <p>贯穿所有知识点的综合性实战项目。</p> <ul> <li>定义 Student 类(封装、构造器、toString、equals)</li> <li>StudentManager:使用 ArrayList 管理学生数据</li> <li>菜单驱动:Scanner 读取用户选择,switch 分发功能</li> <li>添加 / 删除 / 修改 / 查询 / 按成绩排序</li> <li>文件读写:程序启动时加载、退出时保存(IO 流)</li> <li>异常处理:输入校验、文件不存在处理</li> <li>使用 Stream API 实现高级查询(如按分数段筛选)</li> </ul> <div class="code-block"> <span class="cm">// 核心架构示意</span> <span class="kw">public class</span> <span class="type">StudentManager</span> { <span class="kw">private</span> <span class="type">List</span>&lt;<span class="type">Student</span>&gt; students = <span class="kw">new</span> <span class="type">ArrayList</span>&lt;&gt;(); <span class="kw">public void</span> <span class="fn">add</span>(<span class="type">Student</span> s) { students.<span class="fn">add</span>(s); } <span class="kw">public void</span> <span class="fn">removeById</span>(<span class="type">int</span> id) { students.<span class="fn">removeIf</span>(s -> s.<span class="fn">getId</span>() == id); } <span class="kw">public</span> <span class="type">List</span>&lt;<span class="type">Student</span>&gt; <span class="fn">topN</span>(<span class="type">int</span> n) { <span class="kw">return</span> students.<span class="fn">stream</span>() .<span class="fn">sorted</span>(<span class="type">Comparator</span>.<span class="fn">comparingDouble</span>( <span class="type">Student</span>::getScore).<span class="fn">reversed</span>()) .<span class="fn">limit</span>(n) .<span class="fn">collect</span>(<span class="type">Collectors</span>.<span class="fn">toList</span>()); } <span class="kw">public void</span> <span class="fn">saveToFile</span>(<span class="type">String</span> path) { <span class="cm">/* IO写入 */</span> } <span class="kw">public void</span> <span class="fn">loadFromFile</span>(<span class="type">String</span> path) { <span class="cm">/* IO读取 */</span> } } </div> <div class="tip-box"> <strong>核心目标:</strong>这个项目覆盖了 7 天所学的全部核心知识点,完成它意味着你已经具备 Java 基础编程能力。 </div> </div> </div> <div class="time-block"> <div class="time-label"> <span class="time">15:45 - 16:30</span> <span class="duration">45 分钟</span> </div> <div class="time-content"> <h3>知识体系总结与进阶路线 <span class="tag tag-review">复习</span></h3> <ul> <li>回顾七日知识脉络,手绘思维导图</li> <li>整理常见面试题:== vs equals、String 不可变性、多态原理</li> <li><strong>进阶方向建议:</strong></li> <li>→ 多线程与并发编程(Thread、ExecutorService、锁机制)</li> <li>→ 网络编程(Socket、HTTP 客户端)</li> <li>→ 数据库操作(JDBC → MyBatis)</li> <li>→ Spring / Spring Boot 框架</li> <li>→ 设计模式(单例、工厂、策略、观察者)</li> </ul> <div class="tip-box"> <strong>寄语:</strong>编程是一门手艺,唯手熟尔,每天保持编码习惯,比任何速成教程都有效,祝你 Java 之旅顺利! </div> </div> </div> </div> </div> <!-- FOOTER --> <footer> <p>Java 系统学习手册 · 七日精读计划 · 用 <span class="heart">♥</span> 编写</p> </footer> </body> </html>

标签:

相关阅读