Java 中少为人知的小点子

本文探讨了Java中被保留但禁用的goto语句,介绍了如何使用标签语句实现类似的功能,例如在嵌套循环中使用break和continue进行跳转,并展示了如何利用代码块简化对象管理。
    1. 废话

或许你已经听过goto语句之争,也知道在Javagoto仍然是一个保留的keyword,但不允许使用。先来看看goto的经典使用方法:

   1:statement1;
   2:statement_label_for_section2:
   3:statement2;
   4:goto statement_label_for_section2;



可以看出 2:statement_label_for_section2: 为一代码片段(Section)的开始标记。


Java语言中不允许使用goto,但可以使用像 2:statement_label_for_section2: 一样的代码片段标记作为 break/continue的跳转目标。


相关标准文件请参见:<<Java Language Spec. >>14.7 Labeled Statements


    1. 应用

嵌套循环中,我有时会需要从内循环中直接跳到外循环。用Labeled Statements就可以方便实现。

   1:                for(int I1 = 0; I1 < 10; I1++) {
   2:                        loop1:
   3: for(int I2 = 0; I2 < 20; I1++) {
   4: break loop1;
   5: }
   6: } 

continue的用法与break的用法是一样的。



Java语言中还有很多没有广泛应用的小点子。请参见:<<Java Language Spec. >>


    1. Blocks

<<Java Language Spec. >>14.2 Blocks

或许你跟我一样都是个懒鬼。特别在Test Case 代码当中,我经常需要在同一Method中定义一大堆的对象,这些对象的操作大者是大同小异的,你应该知道我在想什么了:Copy&Past。而为每个对象都起一个不同的名字是件痛苦的事。同时这些对象往往只是短命鬼。


   1:import java.util.ArrayList;
   2:import java.util.Collection;
   3:
   4:public class T2 {
   5:
   6: public static void main(String[] args) {
   7: {
   8: Collection c = new ArrayList();
   9: c.add( "1" );
  10: c.clear();
 11: }
 12: {
 13: Collection c = new ArrayList();
  14: c.add( "2" );
 15: c.clear();  16: }  17: }  18:  19:}



 
<think>嗯,用户想在Java中实现一个与点子表相关的倒计时功能。首先,我需要明确“点子表”具体指的是什么。根据常见的开发术语,可能是指一个子列表或者任务列表中的某个子项,例如在任务管理应用中,每个主任务可能有多个子任务,每个子任务需要独立的倒计时。因此,假设用户的需求是为每个子任务项添加倒计时功能。 接下来,考虑Java中实现倒计时的常用方法。通常,可以使用多线程或者定时器(Timer和TimerTask)来实现。但需要注意的是,在图形界面应用中,比如Android开发,更新UI必须在主线程中进行,因此可能需要使用Handler或者AsyncTask来处理后台计时和UI更新的交互。不过用户提到的是Java,可能指的是控制台应用或者Swing等桌面应用。假设用户指的是控制台应用,那么使用Timer和TimerTask是可行的。如果涉及到Swing,可能需要使用SwingWorker来避免阻塞事件调度线程。 然后,用户需要示例代码。所以需要构建一个简单的例子,包含子任务的结构,每个子任务有自己的倒计时时间。例如,可以定义一个SubTask类,包含名称和剩余时间。然后使用Timer来定期减剩余时间并更新显示。 同时,需要考虑多线程的安全问题,比如当多个子任务同时倒计时时,如何避免竞态条件。可能需要使用同步块或者线程安全的数据结构。不过,在简单的示例中,可能暂时不考虑这些复杂情况,先实现基本功能。 另外,倒计时的显示格式也需要考虑,比如将秒数转换为分钟和秒,或者小时、分钟、秒的格式。在示例中,可以简单地将剩余秒数显示出来,或者进行格式化处理。 最后,根据用户提供的引用内容,特别是引用[3]中提到的问题解决过程,可能需要提醒用户在实际开发中可能遇到的问题,比如线程管理、UI更新、资源释放等,并给出相应的建议。</think>### Java实现子列表倒计时功能示例 在Java中实现子列表倒计时功能,可使用$Timer$和$TimerTask$配合集合操作。以下是带有格式化输出的控制台实现示例: ```java import java.util.Timer; import java.util.TimerTask; import java.util.ArrayList; import java.util.List; class SubTask { String name; int remainingSeconds; public SubTask(String name, int seconds) { this.name = name; this.remainingSeconds = seconds; } // 格式化时间显示为 mm:ss String getFormattedTime() { return String.format("%02d:%02d", remainingSeconds/60, remainingSeconds%60); } } public class CountdownManager { private final List<SubTask> subTasks = new ArrayList<>(); private Timer timer = new Timer(); public void addSubTask(SubTask task) { subTasks.add(task); startCountdown(task); } private void startCountdown(SubTask task) { timer.scheduleAtFixedRate(new TimerTask() { @Override public void run() { synchronized (task) { if (task.remainingSeconds > 0) { task.remainingSeconds--; System.out.println(task.name + " 剩余时间:" + task.getFormattedTime()); } else { System.out.println(task.name + " 已完成!"); this.cancel(); } } } }, 0, 1000); // 每秒执行一次 } public static void main(String[] args) { CountdownManager manager = new CountdownManager(); manager.addSubTask(new SubTask("需求分析", 300)); // 5分钟 manager.addSubTask(new SubTask("代码开发", 600)); // 10分钟 } } ``` 关键实现要点: 1. 使用$Timer.scheduleAtFixedRate$确保定时任务周期性执行 2. 通过$synchronized$保证线程安全 3. 每个子任务独立计时器实例 4. 格式化输出增强可读性
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值