致远任重
type: channel
link: https://xcclab.com/
description: 川川代码实验记录簿
items: JavaWeb开发环境的搭建
items: Java流程控制
items: Java数据类型
items: Java操作符
items: 配置Java开发环境
items: Java简介
items: 欢迎使用 Typecho

JavaWeb开发环境的搭建
type: item
date: 2025-08-24T17:26:00+00:00
description: 一、课程概述 JavaWeb课程核心内容：Servlet、JSP和数据库连接。 课程定位： 本课程聚焦JavaWeb开发的底层技术，围绕“请求-响应”、“页面渲染”、“数据持久化”三大核心场景，系统讲解Servlet（服务端逻辑处理）、JSP（动态页面渲染）和数据库连接（数据持久化）三大技术模块。通过“理论+实验+项目实战”的模式，建立JavaWeb开发的底层认知，掌握从用户请求到数据存储的完整链路开发能力，为后续学习Spring Boot、SSM等框架奠定坚实基础。 核心内容： 课程围绕“用户发起请求 → 服务端处理（Servlet）→ 数据存储（数据库）→ 服务端处理（Servlet）→ 页面响应（JSP）”的完整Web网站开发流程展开，具体内容包括： 1.Servlet：Web应用的“控制者” Servlet核心概念：什么是Servlet？它在JavaWeb中的角色（请求处理器）；Servlet的生命周期（初始化、服务、销毁）。 请求与响应机制：HTTP请求/响应格式（GET/POST区别、请求头/参数/体解析、响应状态码）；HttpServletRequest与HttpServletResponse对象的使用。 Servlet配置与映射：传统web.xml配置与注解（@WebServlet）；多Servlet协作与请求转发（RequestDispatcher）、重定向（sendRedirect()）。 会话管理：Cookie与Session的区别与应用（用户登录状态保持、购物车功能）；Session失效机制与优化。 2.JSP：动态页面的“展示者” JSP基础语法：JSP页面结构（HTML + JSP标签 + Java代码）；脚本片段（<% %>）、表达式（<%= %>）、声明（<%! %>）的使用场景与注意事项。 JSP指令与动作：<%@ page %>（编码、导入类）、<%@ include %>（静态包含）、<jsp:include>（动态包含）；<jsp:forward> 与Servlet转发的协同。 JSTL与EL表达式：为什么需要JSTL（替代复杂Java代码）？核心标签库（c:forEach、c:if）的使用；EL表达式（${}）快速获取请求/会话/应用作用域数据。 MVC模式实践：如何在JSP中分离“视图”与“逻辑”（避免页面嵌入大量Java代码）；Servlet作为控制器、JSP作为视图的分工设计。 3.数据库连接：数据持久化的“沟通者” 数据库基础：关系型数据库（MySQL）与SQL基础（增删改查、联表查询）；JDBC核心组件（DriverManager、Connection、PreparedStatement、ResultSet）。 JDBC连接流程：加载数据库驱动 → 建立连接（DriverManager.getConnection()）→ 执行 SQL（PreparedStatement 防 SQL 注入）→ 处理结果集 → 关闭资源。 数据库连接池：为什么需要连接池（提升性能、复用连接）？常见的连接池的配置与使用。 分层设计实践：DAO（Data Access Object）模式封装数据库操作；Service层调用DAO完成业务逻辑（如用户注册时校验用户名唯一性）。 学习目标： 独立开发Web应用核心功能：能编写Servlet处理用户请求，用JSP渲染动态页面，并通过JDBC实现数据存储与查询。 理解Web开发生命周期：从HTTP请求到页面响应的完整链路（请求解析 → 业务逻辑 → 数据操作 → 视图渲染）。 解决常见开发问题：如Session失效、SQL注入防护、连接池配置异常、JSP页面数据不更新等。 完成综合项目：通过实战项目，整合Servlet、JSP、数据库技术，完成可运行的Web应用。 二、准备工作 1. 硬件与系统要求 操作系统：Windows 11+/macOS 10.15+/CentOS 7+。 硬件建议：内存 ≥8GB（Tomcat、IDE和MySQL运行需资源）、磁盘空间 ≥20GB（JDK、IDE、数据库等）。 2. 软件下载 JDK：官网链接 Java Development Kit(JDK)是 Java 编程的核心工具包，不同版本的 JDK 引入了各种新特性、性能优化和安全性增强。 以下是 JDK LTS（长期支持版本）对比： JDK 8 JDK 11 JDK 17 JDK 21 发布时间 2014-03 2018-09 2021-09 2023-09 LTS 支持截止 2030-12 2026-09 2029-09 2031-09 核心特性 - Lambda 表达式- Stream API- 新日期时间 API（java.time） - HTTP Client …

Java流程控制
type: item
date: 2025-06-09T03:26:55+00:00
description: 一、引言 Java程序流程控制是构建程序逻辑的核心机制，包含顺序、分支、循环三大基础结构。 顺序结构是默认执行方式，代码按书写顺序逐行运行，为复杂逻辑提供基础框架。 分支结构通过条件判断实现路径选择，包括单分支（if）、双分支（if-else）及多分支（if else if ...或switch-case）。其中，switch-case语句支持等值匹配。 循环结构则通过for、while、do-while实现重复操作：for适用于已知次数的遍历，while先判断后执行，而do-while确保至少执行一次循环体。 Java 14引入的箭头语法（case A ->），既优化了代码可读性，也避免了传统case穿透问题。 此外，流程控制中还可以配合跳转语句（如break跳出循环、continue跳过当前迭代、return终止方法）增强灵活性。 使用Java程序流程控制构建高效、易维护的逻辑，以满足从简单数据判断到复杂算法实现的多样化需求。 二、流程控制的基础结构 1. 顺序结构 Java程序中的顺序结构是流程控制中最基础且不可或缺的逻辑框架，其核心特征在于代码按照书写顺序逐行执行，形成线性且不可逆的执行路径。顺序结构具有以下特征： ​线性执行逻辑​ 程序从入口点（如main方法）开始，逐行向下执行每一条语句，直到所有代码执行完毕或遇到程序终止指令。 ​无条件执行​ 顺序结构中的所有语句均会被执行，不受任何条件限制。即使后续代码中存在分支或循环，整体流程仍以顺序结构为框架。 ​代码可预测性​ 由于执行路径固定，顺序结构的程序行为预测，便于调试和维护。 下面的示例展示了Java程序中的顺序结构。 public class SequentialStructure { public static void main(String[] args) { int a = 10; // 声明变量a并赋值 int b = 20; // 声明变量b并赋值 int sum = a + b; // 计算a+b的和，并存储结果 System.out.println(sum); // 输出结果 } } 程序执行后的结果如下： 30 上面的程序严格按照声明并赋值→计算→输出的顺序执行，直到程序运行结束，体现了典型的顺序结构。 对于无需条件判断或循环的算法（如数学公式计算），顺序结构可直接实现。在用户交互场景中，顺序结构也常用于依次接收输入、处理数据并返回结果。即使程序中包含分支结构或循环结构，程序的整体流程仍以顺序结构为主体。 2. 分支结构 在Java编程中，选择结构是控制程序执行流程的重要手段，它允许程序根据条件选择不同的执行路径。Java提供了几种主要的选择结构：包括单分支（if）、双分支（if-else）及多分支（if else if ...或switch-case）。 2.1 if选择语句 if选择语句是最基本的程序流程控制语句，用于根据条件表达式的结果来决定是否执行特定的代码块。语法如下所示： if(条件表达式){ statement } 其中条件表达式必须返回一个具体的布尔值，如果返回true值，则执行{statement}中的代码；如果返回false，则结束if语句，执行{statement}之后的代码。 虽然Java语法允许在{statement}中的代码仅有一行时，可以省略大括号{}，但通常建议不要省略，以避免逻辑错误。 下面的示例展示了if语句的用法。 public class IfStatement { public static void main(String[] args) { int a = 0, b = 0; if (a == b) { System.out.println("a和b的值相等。"); } System.out.println("if语句执行完毕。"); } } 程序执行后的结果如下： a和b的值相等。 if语句执行完毕。 上面的程序首先声明a、b两个变量并赋值0，然后通过if语句判断a == b的返回值，当返回值为true时，执行if之后{}内的语句。最后执行if语句之后的语句。 2.2 if…else…选择语句 if…else…选择语句在if选择语句的基础上增加了else子句，用于根据条件表达式的结果来决定是否执行特定的代码块。语法如下所示： if(条件表达式){ statement-1 } else{ statement-2 } 其中条件表达式必须返回一个具体的布尔值，如果返回true值，则执行{statement-1}中的代码；如果返回false，则执行{statement-2}中的代码。 下面的示例展示了if…else…语句的用法。 public class IfElseStatement { public…

Java数据类型
type: item
date: 2025-05-01T08:09:15+00:00
description: 一、引言 Java是一种强类型的编程语言，Java中可以使用的数据类型分为基本数据类型（Primitive Types）和引用数据类型（Reference Types）两大类。这两类数据在内存管理、默认值、使用场景等方面存在显著差异。 在Java中，所有变量在使用前必须明确声明类型，声明类型后不可隐式转换变量的类型。这种严格性要求程序员在编写代码时明确数据类型，避免意外错误。Java编译器在编译阶段会进行类型匹配验证，可在代码运行前捕捉类型不匹配问题，显著减少运行时错误。不同基本类型之间的转换需显式强制转换。 Java正是通过编译时检查、显式类型声明和严格转换规则，构建了高可靠性的编程环境。这种设计不仅减少了运行时错误，还提升了代码安全性与可维护性，是Java成为企业级应用首选语言的核心原因之一。 二、基本数据类型 Java中定义了8种基本数据类型：byte、short、int、long、float、double、char、boolean。基本数据类型也被称为简单类型，它们可以分为4种： 整型：包括byte、short、int和long，主要用于表示有符号的整数。 浮点型：包括float和double，主要用于表示带小数位的浮点数。 字符型：char，主要用于表示字符集中的符号，比如字母、数字、标点符号等。 布尔型：boolean，主要用于表示true/false值，常用于逻辑判断。 Java虽然是面向对象的编程语言，但Java的基本数据类型并不是面向对象的，主要因为出于效率原因考虑，因为将基本数据类型设计成对象会降低性能，毕竟对象的结构更加复杂。 Java的基本数据类型具有明确的内存占用空间，也就使其具有明确的范围。这使得Java可以在不同的系统和设备上保持可移植性。比如，不管在哪种操作系统的特定平台上，int类型永远都是使用32个二进制位表示具体的整数。 1.整型（存储整数） 在Java中能够使用的整型类型有4种：byte、short、int和long。它们都能够存储一个有符号的（正号或负号）整数，不同的整型类型在内存中占用不同的二进制位数，使得它们能够表示的整数的范围不同，具体见下表： 类型 位数 取值范围 默认值 典型应用场景 byte 8 -128 ~ 127 0 文件处理、节省内存 short 16 -32768 ~ 32767 0 兼容旧代码、小范围整数 int 32 -2^31 ~ 2^31-1（约±21亿） 0 日常整数运算 long 64 -2^63 ~ 2^63-1 0L 时间戳、大数据量 byte类型是取值范围最小的整型，它使用8位（1字节）表示有符号的整数，只能在-128~127范围内的取整数值。byte特别适合处理来自网络和文件的数据流和其他基本类型不直接兼容的原始二进制数据。 byte类型变量的声明如下所示： byte b;// 将变量b的数据类型声明为byte byte c = 127;// 将变量c的数据类型声明为byte，并同时赋值127 short类型使用16位（2字节）表示有符号的整数，可以在-32768~32767范围内取整数值。相比其他整型类型，short类型的使用率较低。 short类型变量的声明如下所示： short s;// 将变量s的数据类型声明为short short t = 2025;// 将变量t的数据类型声明为short，并同时赋值2025 int类型是最常用的整型类型，它使用32位（4字节）表示有符号的整数，取值范围-2^31~2^31-1（约±21亿），基本可以涵盖日常整数运算的范围。在Java程序中，int类型常用于控制循环次数，或者做数组的索引。另外，由于byte类型和short类型会在表达式计算中自动被提升为int类型，所以当需要使用整型类型时，int类型通常是最佳选项。 int类型变量的声明如下所示： int i;// 将变量i的数据类型声明为int int j = 1745545182;// 将变量i的数据类型声明为int，并同时赋值1745545182 long类型是最大的整型类型，它使用64位（8字节）表示有符号的整数，取值范围-2^63~2^63-1。当需要处理的整数类型过大无法用int类型保存时，就可以使用long类型。long类型的中保存的数值如果超出int类型的范围，就需要在数值末尾增加大写“L”或小写“l”，由于小写“l”在部分字体显示时与数字1过于接近，所以通常建议使用大写“L”作为后缀。 long类型变量的声明如下所示： long l;// 将变量l的数据类型声明为long long m = 1745545182550L;// 将变量m的数据类型声明为long，并同时赋值1745545182550 2.浮点型（存储浮点数） 在Java中…

Java操作符
type: item
date: 2025-04-22T15:30:00+00:00
description: 一、引言 操作符在编程中的核心地位 操作符是程序中对数据进行计算、判断和转换的核心工具。操作符定义数据被处理方式，将原始输入的数据（操作数）转化为有意义的中间结果，为程序逻辑提供计算能力。在Java编程中，操作符是实现数据运算和赋值的关键。对于初学者来说，理解和掌握各种操作符的用法和特性是非常重要的。 Java操作符的设计哲学与特性 Java操作符的设计哲学以简约性、强类型安全和封装性为核心，通过严格规范操作符行为与优先级，确保代码的可预测性和可维护性。理解Java操作符的特性，有助于开发者规避常见陷阱（如整数除法截断、别名问题），并充分利用位运算等特性优化性能关键代码。 二、Java操作符分类与详解 Java中的操作符，按照操作数被处理的方式，可以分为算术操作符、赋值操作符、位操作符、关系操作符、逻辑操作符以及三元操作符。不管哪种操作符，都可以通过一个或多个操作数来生成新的值，有的操作符还可以修改其操作数的值。另外，几乎所有的操作符（除开=、==、!=）都只能操作基本数据类型的操作数。 1.算术操作符 Java的算数操作符与其他大部分编程语言相同，包括加法（+）、减法（-）、乘法（*）、除法（/）、求模（%）和自增（++）、自减（--），具体见下表： 操作符 名称 示例 功能描述 + 加法操作符 a + b 加法 - 计算操作符两侧的值的和 - 减法操作符 a - b 减法 - 计算操作符左侧的值减去右侧的值的差 * 乘法操作符 a * b 乘法 - 计算操作符两侧的值的积 / 除法操作符 a / b 除法 - 计算操作符左侧的值除以右侧的值的商 % 求模操作符 a % b 求模 - 计算操作符左侧的值除以右侧的值的余数 ++ 自增操作符 a++或++a 操作数的值增加1 -- 自减操作符 a--或--a 操作数的值增减1 下面的示例展示了在四则运算中，部分算数操作符（+、-、*、/、%）的用法。 import java.util.Random; public class MathOps { public static void main(String[] args) { // 创建Random对象，为后续四则运算生成随机数: Random rand = new Random(27); int i, a, b; // 生成随机整数a和b并进行四则运算: a = rand.nextInt(100) + 1; System.out.println("a : " + a); b = rand.nextInt(100) + 1; System.out.println("b : " + b); i = a + b; System.out.println("a + b : " + i); i = a - b; System.out.println("a - b : " + i); i = a / b; System.out.println("a / b : " + i); i = a * b; System.out.println("a * b : " + i); i = a % b; System.out.println("a % b : " + i); a %= b; System.out.println("a %= b : " + a); // 生成随机浮点数s和n并进行四则运算: double u, s, n; s = rand.nextDouble(); System.out.println("s : " + s); n = rand.nextDouble(); System.out.println("n : " + n); u = s + n; System.out.println("s + n : " + u); u = s - n; System.out.println("s - n : " + u); u = s * n; System.out.println("s * n : " + u); u = s / n; System.out.println("s / n : " + u); s %= n; System.out.println("s % n : " + s); } } 程序执行后的结果如下： a : 31 b : 53 a + b : 84 a - b : -22 a / b : 0 a * b : 1643 a % b : 31 a %= b : 31 s : 0.7146368532850442 n : 0.5047406370101457 s + n : 1.21937749029519 s - n : 0.20989621627489852 s * n : 0.36070626055801924 s…

配置Java开发环境
type: item
date: 2025-04-05T11:07:00+00:00
description: 一、安装Java开发工具包（JDK） 1.Java与JDK的关系 要学习Java编程语言，需要在操作系统中安装JDK。可以降Java语言和JDK之间的关系理解为： Java语言定义了语法规则和功能特性，而JDK提供将这些规则转化为实际程序的工具集合。 JDK中主要包含： 编译器（javac）：将Java源代码（.java文件）编译为字节码（.class文件），这是Java跨平台的基础。 运行时环境（JRE）：包含JVM（Java虚拟机）和核心类库，负责执行编译后的字节码。 调试工具（jdb） 和文档生成器（javadoc） 等：支持开发全流程。 所以没有JDK，Java语言编写代码就无法编译和执行；没有Java语言的规范，JDK就失去存在意义。 以下是Java历代主要版本与JDK版本的对应关系： Java版本 发布时间 对应JDK版本 备注 Java1.0 1995.05.23 JDK1.0 首个正式版，提出“一次编写，到处运行”理念 Java1.1 1997.02.18 JDK1.1 引入内部类、JDBC等特性，JavaOne会议规模创纪录 Java1.2 1998.12.04 JDK1.2 划分为J2SE、J2EE、J2ME三大平台，奠定企业级应用基础(2005年6月正式取消，统一更名为Java SE、Java EE、Java ME) Java1.3 2000.05.08 JDK1.3 新增JNDI和动态代理，提升企业集成能力 Java1.4 2002.02.13 JDK1.4 引入断言（Assertions）、正则表达式和NIO Java5.0 2004.09.30 JDK1.8 更名为Java SE 5.0，支持泛型、枚举、自动装箱等 Java6 2006.12.11 JDK1.6 改进JVM性能，支持脚本语言 Java7 2011.07.28 JDK1.7 新增字符串Switch、二进制字面量等语法糖 Java8 2014.03.18 JDK8 里程碑版本，引入Lambda表达式、Stream API（长期支持版LTS） Java9 2017.09.21 JDK9 模块化系统（JPMS），每半年发布一次版本 Java10 2018.03.20 JDK10 Java11 2018.09.25 JDK11 移除Java EE模块，支持HTTP Client（LTS） Java12 2019.03.19 JDK12 Java13 2019.09.17 JDK13 Java14 2020.03.17 JDK14 Java15 2020.09.16 JDK15 Java16 2021.03.16 JDK16 Java17 2021.09.14 JDK17 密封类（Sealed Classes）、模式匹配等（LTS） Java18 2022.03.22 JDK18 Java19 2022.09.20 JDK19 Java20 2023.03.21 JDK20 Java21 2023.09.19 JDK21 虚拟线程（Loom）、分代ZGC（LTS） Java22 2024.03.19 JDK22 Java23 2024.09.17 JDK23 Java24 2025.03.18 JDK24 Java 24 是自 Java 21 后的第三个非长期支持版本 2.选择并安装JDK 在Oracle官网下载JDK，有很多版本可供选择，建议选择Oracle官方的长期支持版，如：JDK8、JDK11、JDK17、JDK21，这里选用JDK21作为示例，因为Spring官方推荐的安装环境需要JDK17或JDK21。 另外如果是下载JDK8及其以前的版本，还需要注意对应操作系统是32位或者64位，如下： 自2023年9月通过JEP 449提案，JDK21正式废弃Windows 32位x86平台的构建支持，但仍允许通过特定配置编译32位版本。本文以 Window11 64位系统为例，如下： 下载完成jdk-21_windows-x64_bin.exe或者jdk-21_windows-x64_bin.msi文件，双击运行进行安装，中间无需调整安装选项。安装完成后可以在命令行输入命令 java -version 查看系统中安装的JDK版本，如下： 二、配置环境变量（JAVA_HOME） 从JDK11开始，安装后默认无需手动配置 Path 变量即可使用基础命令，但 JAVA_HOME 仍需按需设置。对于开发场景，建议始终补充 JAVA_HOME 以规避兼容性问题。 1.JDK安装完成后，从Windows开始菜单打开 设置 ，进入 系统 中的 系统信息 ，点击 高级系统设置 ； 2.选择 高级 选项卡，点击 环境变量 ； 然后就会出现 环境变量 设置界面，…

Java简介
type: item
date: 2025-04-03T01:42:00+00:00
description: 一、Java语言的起源与设计理念 Java由詹姆斯·高斯林（James Gosling）领导的团队于1991年在Sun Microsystems启动开发，最初用于嵌入式家电设备（如电视机顶盒）的编程。1995年正式发布后，凭借“一次编写，到处运行”（WORA）的跨平台特性迅速成为互联网时代的核心语言。其设计初衷是简化C++的复杂性，摒弃多继承、指针等易错概念，同时强化面向对象特性和安全性。Oracle于2010年收购Sun后，持续推动Java的技术迭代与生态扩展。 二、Java的核心特性 跨平台性与JVM机制 Java程序通过编译器生成字节码（.class文件），由Java虚拟机（JVM）解释执行。JVM为不同操作系统提供统一运行环境，实现“代码一次编写，多平台运行”。例如，Windows编译的字节码可直接在Linux或MacOS的JVM上运行，极大降低开发成本。 纯粹的面向对象设计 Java强制使用类与对象结构，支持封装、继承、多态三大特性： 封装：通过私有变量（private）与公共方法（getter/setter）保护数据完整性。 继承：子类复用父类代码（如Animal类派生出Dog/Cat类）。 多态：接口（如Shape）允许多种实现（Circle/Rectangle），增强代码灵活性。 内存管理与安全性 垃圾回收（GC）：自动回收无用对象内存，避免内存泄漏。 安全机制：字节码验证、安全管理器（Security Manager）及沙箱模型限制恶意代码权限，防止系统攻击。 高性能与并发支持 即时编译（JIT）：将高频代码编译为机器码，提升执行效率。 多线程：内置Thread类与synchronized关键字简化并发编程，适用于服务器端高并发场景。 丰富的API与生态系统 提供超过4500个核心类库，涵盖网络（java.net）、IO流（java.io）、集合框架（java.util）等模块。Spring、Hibernate等开源框架进一步扩展了企业级开发能力。 三、Java的发展历程与版本迭代 1995-2000年：Java 1.0发布，引入Applet（网页小程序）；Java 2平台划分为J2SE（标准版）、J2EE（企业版）和J2ME（微型版）。 2004年：Java 5引入泛型、自动装箱/拆箱、注解（Annotation）等，提升代码简洁性。 2014年：Java 8推出Lambda表达式与Stream API，支持函数式编程，简化集合操作。 2021年：Java 17成为长期支持（LTS）版本，新增密封类（sealed class）、模式匹配等特性，强化代码可维护性。 四、Java的应用场景 企业级应用开发 占全球企业级市场60%以上份额，Spring框架与J2EE规范支撑银行系统（如支付清算）、ERP等复杂业务。 移动开发 Android平台以Java为核心开发语言，支付宝、微信等应用均依赖Java处理后台逻辑。 大数据与云计算 Hadoop、Spark等大数据框架基于Java构建；云原生技术（如Kubernetes）依赖Java的高可扩展性。 Web开发 通过Servlet、JSP和Spring Boot构建动态网站，典型案例包括LinkedIn、eBay等。 嵌入式与物联网（IoT） 早期Oak语言设计为智能家电赋能，如今在车载系统、智能家居中仍有应用。 五、未来趋势与挑战 云原生与微服务：Quarkus、Micronaut等轻量级框架优化Java在容器化环境中的启动速度与内存占用。 新语言特性：Project Loom引入虚拟线程（Virtual Threads），提升高并发性能；Project Valhalla探索值类型（Value Types）以优化内存使用。 竞争与替代：Kotlin（Android官方推荐语言）、Go等新兴语言对Java构成挑战，但其庞大的开发者社区与成熟生态仍具不可替代性。 结语 Java凭借跨平台、高性能、强生态等优势，历经30年发展仍稳居TIOBE指数前三。从嵌入式系统到云计算，其“一次编写，到处运行”的理念持续推动技术创新。未来，Java将继续通过版本迭代拥抱现代化编程范式，巩固其作为“编程界常青树”的地位。

欢迎使用 Typecho
type: item
date: 2025-04-02T15:47:00+00:00
description: 如果您看到这篇文章,表示您的 blog 已经安装成功.