Java 中的 Builder 模式和协变返回类型

阅读这篇文章大约需要十分钟时间。

Builder 模式是一种创建型的设计模式,即解决对象的创建问题。

在 Java、C++ 这类语言中,如果一个类在创建时存在可选参数,那么可以通过函数重载来实现,但是如果可选参数非常多的话,构造函数的数量也会变得非常多,并且可能因为不同可选参数类型相同而没法重载[......]

阅读全文

Java logging 模块的使用

从外部文件加载配置

在启动程序时指定配置文件

java -Djava.util.logging.config.file=configFile MainClass

日志管理器(LogManager)是在 VM 启动时,main 执行前初始化的,因此在 main 中重新设置系统属性之后,需要重新[......]

阅读全文

Java Swing 编写数据库增删改查 GUI 程序

此程序是我们数据库课程的一个作业,初衷是帮助大家理解数据库的增删改查操作,不过涉及的数据库操作非常基础,只要之前接触过数据库,对这些语法应该都基本掌握了。

在写这一程序的过程中,图形界面的编写倒是占了大部分时间。写下这篇文章,更多的是记录使用 Swing 来编写这一图形界面程序所遇到的问题和解决的[......]

阅读全文

Java 是如何利用接口避免函数回调的

一、引言

在许多编程语言中,都有函数回调这一概念。C 和 C++ 中有函数指针,因此可以将函数作为参数传给其它函数,以便过后调用。而在 JavaScript 中,更是将函数回调发挥到了极致,各种事件的处理,特别是异步事件,基本都靠函数回调来完成。

在 Java 中,同样可以实现函数回调。虽然没有[......]

阅读全文

Java 多线程的竞争条件、互斥和同步

竞争条件

在《操作系统精髓与设计原理》一书中,对竞争条件的定义如下:多个进程或线程同时读写某些数据项,导致最后的结果取决于这些进程中指令的执行顺序。

也就是说,竞争条件下,计算结果由单线程下的确定状态,变成了多线程下的不确定状态。这个不确定性产生的原因是什么?我们下面来讨论。

在只有单个线程的[......]

阅读全文