- 博客(116)
- 资源 (4)
- 收藏
- 关注
原创 Java多线程编程【概述】【线程的创建】
本文介绍了Java多线程编程的基本概念和线程创建方法。介绍了程序、进程和线程的概念区别,三种创建线程的方案:1,继承Thread类(有单继承局限)2,实现Runnable接口(避免单继承局限)3,使用Callable和Future接口组合(支持返回值和异常)。最后提供了多个例程演示线程创建
2025-09-18 16:22:09
817
原创 Java多线程编程【线程的状态与调度】
本文介绍了Java多线程编程中线程的状态与调度机制,以及结束线程的方法。主要内容包括:线程的五种生命周期状态(新建、就绪、运行、阻塞、死亡)及其转换条件;线程调度策略(抢占式和协作式)以及优先级设置方法;重点分析了线程阻塞的多种原因(sleep、wait、join等)和状态转换关系。通过ThreadJoin和ThreadStopDemo两个示例程序,分别演示了线程合并操作和使用标志变量安全终止线程的方法。
2025-09-18 15:44:21
913
原创 Java多线程编程【线程的同步】【上】
本文介绍了多线程编程中线程同步的五种同步方案(对象锁、同步锁、信号量等)方式。当多个线程访问共享数据时会出现内存一致性异常,导致数据访问冲突。通过银行存款模拟程序BankFrame演示了未同步情况下两个线程同时操作账户余额时出现的数据遗漏问题。文章详细介绍和演示了五种同步方案(对象锁、同步锁、信号量等)来解决这类问题。
2025-09-18 13:39:26
564
原创 Java多线程编程【线程的同步】【下】
本文介绍了多线程编程中的信号量(Semaphore)机制和同步锁Lock在线程同步中的应用。Semaphore通过计数器控制对共享资源的访问,提供acquire()获取许可和release()释放许可等核心方法。文章详细讲解了Semaphore的两种构造模式(公平/非公平)、主要方法及三种典型应用场景:模拟互斥锁、控制资源并发访问和线程间通信。通过银行存款例程和有限散列集两个实例,展示了Semaphore的实际应用。Semaphore在效率上可能比synchronized同步方式更具优势。避免多线程死锁策略
2025-09-17 21:44:59
1030
原创 Java多线程编程【SwingUtilities类】与【UI多线程编程】
本文介绍了Java多线程编程中SwingUtilities类的使用与UI多线程编程规范。SwingUtilities是Swing工具包中的实用工具类,提供线程安全访问Swing组件的方法。重点讲解了事件派发线程(EDT)机制,它是Swing单线程模型的核心,负责事件处理和UI更新。文章详细说明了SwingUtilities的主要功能,包括线程相关方法(invokeLater/invokeAndWait)、组件操作和坐标转换等,并通过图像拖动示例演示了convertPoint()方法的应用。最后是GUI例程
2025-09-16 17:05:05
343
原创 Java多线程编程【线程的通信】
本文介绍了Java多线程编程中的线程通信机制,主要包括三种实现方式:监视器锁(wait/notify机制)、Lock锁配合Condition条件变量、以及信号量Semaphore。重点阐述了监视器锁的实现原理,通过银行存取款案例演示了如何使用wait()和notify()方法实现线程间同步。当账户余额为0时存款线程运行而取款线程等待,存款后存款线程等待并唤醒取款线程,通过这种协作机制确保线程安全。还介绍了Lock锁和Semaphore通信机制,并给出示例。
2025-09-16 17:04:38
406
原创 Java 函数编程之【过滤器filter()合并】【predicate(断言)】与【谓词逻辑】
Java函数式编程中合并多个filter操作可通过逻辑运算符或Predicate优化。文章以User对象筛选为例,对比了低效的多重filter操作与高效的单filter合并方案,强调利用逻辑运算的短路特性(如&&/||)提升性能。通过Predicate定义独立条件再组合(如and()方法),既保持性能又增强可读性。优化关键在于将高淘汰率或低成本条件前置,减少不必要的计算。最终推荐合并filter并调整条件顺序作为最佳实践。
2025-09-01 16:44:05
758
原创 Java函数式编程之【流(Stream)性能优化】
摘要:本文深入探讨了Java Stream API的性能优化策略,重点分析Stream操作分类(中间/终止操作、无状态/有状态操作)以及流管道的执行机制。核心优化建议包括:优先使用基本数据类型流避免装箱拆箱开销,合理选择顺序流/并行流,以及优化中间操作和终端操作。通过性能测试对比,验证了基本数据类型流相比包装类型流可显著提升处理效率。合理使用这些策略可显著提升Stream处理性能。文章为开发高性能Stream程序提供了实用指导。
2025-08-30 23:22:51
1016
原创 Java数据库编程之【JDBC数据库应用】【打气球游戏】【十】
本文介绍了一个基于Java开发的射击气球休闲游戏,用数据库保存游戏数据。游戏主要功能包括:6种随机下落的气球、跟随鼠标移动的枪械、射击得分机制、1分钟倒计时等。程序采用模块化设计,包含游戏主控、移动对象、图片资源、辅助处理和数据库处理五个模块。其中移动对象模块通过抽象类实现气球、子弹和枪械的共性特征,辅助处理模块集中管理游戏参数和核心功能。游戏使用双缓冲技术优化画面,通过鼠标事件控制游戏状态切换。代码结构清晰,各模块分工明确,完整实现了射击气球的游戏功能,可作为Java图形界面和游戏开发的参考案例。
2025-08-30 10:44:34
881
原创 Java图形图像处理【基础篇】【一】
本文介绍了Java图形图像处理的基础知识,重点讲解了AWT框架中的Graphics和Graphics2D类及其绘图功能。文章详细阐述了Component类中repaint()、update()和paint()三个核心绘图方法的关系与调用流程,并通过示例程序演示了Canvas画布的实际应用。此外,还系统介绍了Graphics类的常用绘图方法,包括图形绘制、文本渲染、图像处理以及颜色设置等功能,为Java图形编程提供了基础指导。文中强调了正确使用重绘机制,应通过repaint()方法间接触发绘制操作。
2025-08-29 12:09:44
879
原创 Java图形图像处理【基础篇】【二】
本文介绍了Java 2D图形类库的基础知识,重点解析了Shape接口及其实现类(如Line2D、Ellipse2D等)的使用方法,并详细说明了Graphics2D类的绘图功能。文章通过GeneralPathTest示例程序演示了如何绘制复杂图形(如五角星)和设置笔画属性,同时讲解了Font类在文本绘制中的应用。Java 2D图形库相比早期版本提供了更精细的浮点坐标控制、几何变换和颜色管理功能,适用于开发更复杂的图形界面应用。
2025-08-29 11:41:10
733
原创 Java图形图像处理【电子画板】【十】
本文介绍了两个Java Swing实现的电子画板程序,重点分析了简易画板程序的架构与实现。该程序采用MVC设计模式,包含视图层(DrawBoardFrm主窗口和ShapePanel画板)、控制层(鼠标事件处理)和模型层(ShapeMaker图形模型)。核心功能包括图形绘制、选择和拖拽,通过ShapePanel实现图形控制点管理、鼠标交互和状态维护。程序演示了Java图形编程的自定义组件绘制、事件处理和几何图形操作等关键技术,支持椭圆、矩形、曲线和三角形等多种图形的创建与编辑。第二个画板程序更精彩。
2025-08-29 11:39:24
1005
原创 Java图形图像处理【基础篇】【图像缩放】【三】
Java图形图像处理基础介绍了Image和ImageIcon两个核心类。Image是AWT中的抽象类,用于图像操作但不直接显示;ImageIcon是Swing组件,便于在GUI中显示图像。文章通过两个示例程序演示了图像绘制:DrawImageC展示了图像加载、绘制和拷贝操作;WeiQiFrm实现了一个围棋棋盘绘制程序,综合运用了图形绘制、图像加载和组件布局等技术。关键点包括:Image与ImageIcon的相互转换、相对路径处理、图像缩放以及复杂图形界面的构建方法。这些是Java图形编程的基础技术。
2025-08-28 10:55:17
1033
原创 Java图形图像处理【剪贴板与图像拖拽】【四】
本文介绍了Java中剪贴板功能的实现,重点讲解文本型和图像型剪贴板的应用。主要内容包括: 剪贴板基础概念:是程序间数据交换的桥梁,支持文本、图像等多种数据类型传输。 文本剪贴板实现: 使用StringSelection类封装文本数据,通过系统剪贴板实现跨程序文本共享。例程ClipTxtFrm演示复制粘贴功能。图像剪贴板实现: 需要自定义实现Transferable接口的ImageSelection类。例程ClipImageFrm支持图像复制粘贴,可与画图程序、WPS等外部程序交互。DataFlavor类用法
2025-08-28 10:51:24
945
原创 Java图形图像处理【Swing图像拖拽】【五】
本文介绍了Java Swing框架中的图像拖拽功能实现方法。Swing的拖拽功能基于AWT拖拽API构建,通过TransferHandler类简化了文本、图像等数据的拖放操作。文章详细说明了支持拖拽的Swing组件分类、拖拽功能三要素(拖拽源、拖放目标和传输对象),并重点讲解了如何为不支持拖拽的组件(如JLabel、JButton)自定义实现拖拽功能。通过例程18-18"最简拖拽测试"展示了JLabel组件的拖拽实现,特别强调了布局管理器对拖拽功能的影响,并提供了完整的代码示例。例程多。
2025-08-27 11:01:41
1047
原创 Java图形图像处理【仿射变换】【六】
本文介绍了Java中的图形图像仿射变换技术。仿射变换是一种保持几何关系的线性变换,包括平移、缩放、旋转和剪切等基本操作。在Java中,AffineTransform类实现了2D仿射变换,通过矩阵运算改变图像位置和形状。文章详细讲解了仿射变换的数学原理、齐次坐标表示法以及AffineTransform类的构造方法和常用变换方法(如translate()、rotate()等)。通过例程展示了不同变换顺序的效果差异:以原点为轴心旋转与以图形中心为轴心自转的区别。仿射变换在计算机图形学、图像处理等领域有广泛应用。
2025-08-27 10:55:45
1170
原创 Java图形图像处理【仿射变换之图像旋转】【七】
本文介绍了Java中使用AffineTransform类实现图像旋转的两种方法。第一种方法通过设置旋转中心和角度实现图像自转,如例程18-27所示,通过定时器控制使地球图像在面板中心自转。第二种方法采用平移和旋转组合变换,如例程18-28扩展应用,模拟地球绕太阳公转同时太阳自转的天体运动效果。两个例程均展示了仿射变换在图像旋转处理中的核心应用,关键步骤包括:获取图形上下文、设置变换矩阵、计算旋转中心坐标以及定时重绘实现动画效果。代码示例清晰演示了如何通过Java 2D API实现复杂的图像旋转动画。
2025-08-25 15:06:29
1039
原创 Java图形图像处理【动画】【八】
本文介绍了Java实现动画的基本原理和方法,重点讲解了通过Swing组件和定时器实现动画效果。动画本质上是连续绘制一组差异较小的图像,利用视觉暂留产生连续运动的效果。文章提供了两个典型示例:动态正弦曲线波形图和蝴蝶动画。其中,正弦波示例详细展示了如何使用Timer定时器、paintComponent绘图方法以及坐标变换来实现平滑的波形动画效果。蝴蝶示例则演示了简单的图像移动动画。这些案例都体现了Java动画编程的核心要素:定时更新状态、重绘组件以及控制绘制时序。最后是几个动画例程集锦。
2025-08-25 14:22:27
1170
原创 Java图形图像处理【双缓冲技术与游戏】【九】
文章摘要 本文介绍了Java图形编程中的双缓冲技术及其在游戏开发中的应用。双缓冲技术通过创建虚拟屏缓冲区,先在内存中完成图像绘制再一次性显示到屏幕,有效解决了图形闪烁问题。Swing组件默认支持双缓冲,但在复杂绘制或高性能场景可能需要手动实现。文章以"射击气球"游戏为例,详细展示了游戏架构设计,包括主控模块、移动对象模块和辅助处理模块的实现。游戏功能包括气球下落、枪械射击、得分统计和状态管理,通过继承Movable抽象类实现子弹、气球等游戏元素的移动逻辑。并把游戏结果保存到数据库。
2025-08-25 14:15:42
1087
原创 Java数据库编程之【概述】【SQL语言】【一】
本文介绍了Java数据库编程基础,重点讲解了SQL语言和JDBC技术。主要内容包括: Java通过JDBC接口操作数据库的基本流程 关系数据库的基本概念和结构 SQL语言的分类(DDL/DQL/DML/DCL/TCL)及常用语法 数据定义语言(DDL)的详细使用方法 创建数据库表的完整语法和约束条件 通过银行账户系统的实际案例演示建表过程 文章以Derby数据库为例,展示了完整的SQL脚本实现,包括连接数据库、创建表结构、设置主外键约束等核心操作。这些知识是学习Java数据库编程的重要基础。
2025-08-13 11:48:51
287
原创 Java数据库编程之【JDBC】【ResultSet】【可滚动和可更新的结果集】【二】
摘要:JDBC是Java连接数据库的标准API,支持与多种关系型数据库交互。详细介绍了其核心组件包括DriverManager(驱动管理)、Connection(数据库连接)、Statement(SQL执行)、PreparedStatement(预编译SQL)、CallableStatement(存储过程调用)和ResultSet(结果集)。可滚动和可更新的ResultSet功能,使结果集操作更灵活。JDBC采用层次化设计,各组件间存在明确的包含关系,使用需注意数据库索引从1开始的特点。
2025-08-13 11:40:18
814
原创 Java数据库编程之【Derby数据库】【JDBC创建数据库例程】【三】
摘要 本文介绍了Java内置的Derby数据库及其编程基础。Derby是一个轻量级的关系型数据库,完全用Java编写,支持嵌入式与网络服务器两种部署模式。嵌入式模式适合单用户应用,数据库与程序运行在同一个JVM;网络服务器模式支持多用户并发访问。文章详细说明了Derby的开发环境配置、字段数据类型以及两种模式的比较。此外,还提供了一个JDBC数据库操作工具类DbUtil的例程,演示了如何创建数据库表、插入和查询数据。Derby基于Java和SQL标准,安装使用简单,是学习数据库程序设计的理想选择。
2025-08-13 11:32:15
474
原创 Java数据库编程之【JDBC】【动态SQL】【可滚动可更新ResultSet】【五】
摘要: JDBC中的ResultSetMetaData接口用于获取ResultSet的列元数据信息(如列名、类型、精度等),通过getMetaData()方法调用,支持动态解析查询结果。动态SQL通过PreparedStatement实现,利用占位符(?)防止SQL注入并提升性能,例程演示了元数据查询和成绩更新的应用场景。 关键词: ResultSetMetaData、动态SQL、PreparedStatement、JDBC、参数化查询。最后,重点介绍了可滚动可更新ResultSet。
2025-08-12 13:17:08
1214
原创 Java数据库编程之【JDBC数据库例程】【自动生成报表】【六】
摘要:本文介绍一个数据库的自动生成报表例程。它是以数据源为数组的自动生成报表例程AutoReport.java作为基础。现在我们用数据库表做为数据源来实现自动生成报表打印功能。
2025-08-12 13:08:30
878
原创 Java数据库编程之【JDBC数据库例程】【ResultSet作为表格的数据源】【七】
摘要:本文介绍了一个Java的表格组件JTable,用JDBC连接数据库,并以数据库的ResultSet作为数据源,把数据展现在JTable组件上,并在JTable组件进行数据更新操作的Java数据库程序。其数据库环境可以是Derby或MySQL。
2025-08-11 13:22:27
713
原创 Java数据库编程之【JDBC数据库例程】【模拟银行存取款例程】【八】
摘要:本文介绍了Java模拟银行存取款操作的数据库程序实现。程序包含两个核心类:DBConnectManager负责数据库连接管理,提供数据库创建、连接检测和错误处理功能;DbOperate类则封装了银行账户表结构的SQL脚本(包括账户余额表和交易明细表)以及基本的查询操作。示例演示了如何通过JDBC连接Derby嵌入式数据库,创建带有约束条件的银行账户表结构(如余额非负检查、外键约束等),并初始化测试账户数据。程序采用模块化设计,包含异常处理和SQL警告机制,为后续实现完整的存取款业务逻辑奠定了基础。
2025-08-11 13:08:54
967
原创 Java数据库编程之【JDBC数据库例程】【处理大对象LOB】【DAO模式】【九】
摘要:本文介绍了数据库对大对象(LOB)的处理,包括BLOB(二进制数据)和CLOB(字符数据),并以Derby数据库为例。通过Java示例程序DbBlobOperate,演示了如何将图像文件存储到数据库及从数据库读取并另存为文件。本文后面介绍了数据库DAO模式编程知识。
2025-08-11 13:00:50
603
原创 Java函数式编程之【流(Stream)与函数式编程概述】【导论】
Java函数式编程之【流(Stream)与函数式编程概述】【导论】,是Java函数式编程专栏博客索引页。
2025-08-04 15:24:39
691
原创 Java函数式编程基础之【方法引用】语法与示例
Lambda表达式是Java 8引入的函数式编程核心特性,它允许将函数作为方法参数传递,其实质是函数式接口的匿名内部类实例。方法引用是Lambda表达式的特殊用法,是Lambda的简化写法,通过直接引用现有方法来代替Lambda表达式。
2025-08-04 15:17:02
351
原创 Java函数式编程之【流(Stream)的创建】
Stream的创建是函数式编程的第一步,实际上是由数据源来创建Stream(流)的。数据源种类繁多,常见的数据源包括集合、数组、文件、正则表达式模式匹配器、随机数发生器和字符串,本文将详细介绍各种Stream的创建方法。
2025-08-04 14:08:50
670
原创 Java函数式编程之【流(Stream)的装饰】装饰器【map】和【flatMap】
函数式编程可分为三个步骤:Stream(流)的创建、Stream的中间操作和Stream的终止操作。其中Stream(流)的中间操作可以有n个,而流的终止操作只能有一个。本文详细介绍Stream(流)的中间操作。
2025-08-03 11:33:01
1283
原创 Java函数式编程之【Optional类】与空指针处理
Optional<T> 是 Java 8 引入的一个容器类,是一种新的数据类型,用于更优雅地处理可能为 null 的值,它可有效防止空指针异常问题。它是函数式编程风格的重要组成部分。Optional<T> 是 Java 函数式编程中处理空值的强大工具,合理使用可以使代码更简洁、更安全。
2025-08-03 11:21:23
722
原创 Java函数式编程之【Stream终止操作】【简单约简】
函数式编程可分为三个步骤:Stream(流)的创建、Stream的中间操作和Stream的终止操作。终止操作的方法繁多,终止操作都是主动求值操作。我们把Stream的终止操作大致分为三大类:简单约简操作、简单的终止操作和复杂终止操作。本文主要介绍终止操作:简单约简操作、简单的终止操作。
2025-08-03 11:08:07
874
原创 Java函数式编程之【Stream终止操作】【通用约简reduce】
Stream.reduce() 是 Java 8 Stream API 中的一个核心归约操作,用于将流中的元素约简为单个结果。它通过重复应用合并操作来实现元素的累积计算。Stream.reduce() 是一个非常强大的工具,特别适合在需要对元素序列进行累积计算的场景中使用。
2025-08-02 15:23:25
1030
原创 Java函数式编程之【Stream终止操作】【收集操作collect()与收集器】
collect() 方法是 Java Stream API 中最强大的终止操作之一,它能够将流中的元素收集到各种不同的收集器(集合容器)中,比如List、Set、Map等。收集操作collect()比归约操作reduce()更具通用性,其功能也更强大,本节将对收集操作collect()进行详细介绍。
2025-08-02 11:54:48
1004
原创 Java函数式编程之【Stream终止操作】【收集器toMap()】【叁参数收集操作collect()】
本文详细介绍Collectors.toMap收集器和 三参数 collect() 操作。Collectors.toMap() 是 一个非常实用的收集器,简洁高效地将流数据转换为各种形式的 Map 结构。它提供了多种重载形式,可以满足不同的映射需求。三参数 collect() 实际上相当于自己定制实现一个 Collector。三参数形式提供了更底层的控制,而 Collectors 提供了更高级的、预定义的常见操作。
2025-08-02 11:49:00
1144
原创 Java函数式编程之【Stream终止操作】【收集操作collect()与分组分区】【下游收集器】
分组收集器groupingBy()用于按条件对元素进行分组,并将结果存储在Map实例中。其作用与数据库的SQL语句的group by的用法有异曲同工之妙。分区收集器partitioningBy()是分组groupingBy()的特殊情形,实质是根据断言分成二个分组。下游收集器允许在分组分区操作后进行更复杂的收集操作。下游收集器大大增强了Java Stream API的数据处理能力,使得复杂的数据聚合操作变得简洁而高效。
2025-08-01 22:54:12
1328
原创 Java函数式编程之【基本数据类型流】
流(Stream)通常是对象流(Stream<T>),本文主要介绍基本数据类型流(IntStream, LongStream 和 DoubleStream)。这三种基本数据类型流,虽然流的名称上用的是Int、Long、Double,好像是包装对象,实际上它们处理的是基本数据类型int、long和double的数据。当把基本数据类型流转换为对象流(Stream<T>)我们常称这为流的装箱;反之则称为流的拆箱。基本数据类型流是Java函数式编程中兼顾简洁性与性能的关键工具,对于大规模数值计算可明显提高性能
2025-08-01 15:50:00
1036
原创 Java实现音频录音&播放机功能
Java实现一个简单的音频录音和播放功能,使用Swing创建图形用户界面,利用Java Sound API进行音频处理。二、程序主要功能2.1 录音功能 - 使用TargetDataLine从麦克风捕获音频数据 - 音频数据存储在ByteArrayOutputStream中 - 录音过程在单独线程中运行,避免阻塞UI2.2 播放功能可以选择并播放已保存的WAV文件;使用SourceDataLine进行音频播放。2.3 文件操作 - 可以将录音保存为WAV格式文件 - 可以打开已有的WAV
2025-04-11 17:37:37
741
原创 【数据库创建】用ij工具部署Derby数据库并验证
Java内置的Derby数据库,是个功能强大的微型数据库,其基础引擎和内嵌的JDBC驱动总共大约2MB大小。Derby可以紧密地嵌入到Java程序中。Derby数据库可以有两种部署方式:1,嵌入式:Derby数据库提供了嵌入式的JDBC驱动,因此可把Derby数据库嵌入到Java应用程序内。这种模式的Derby数据库适用于单个用户的Java应用程序,Derby和应用程序运行在同一个JVM中。2,服务器模式:网络数据库模式,这是标准的数据库服务器(服务器/客户端)模式,是所有的数据库产品都支持的模式。
2025-02-09 22:38:50
395
使用JDK中JavaSound音频API接口实现Java程序播放wav音频 包括例程和wav音频示例文件
2024-07-05
JSONParsingExample源码入所需JSON.simple.jar的JAR文件包
2024-06-25
Java图形图像编程例程
2022-04-24
mysql-installer-community-5.7.34.0ForWindows_x86_32-bit.msi
2021-04-22
db-derby-10.14.2.0-lib.zip
2021-04-22
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅