Questions tagged «java»

Java是一种流行的高级编程语言。如果您在使用或理解语言本身时遇到问题,请使用此标签。这个标签很少单独使用,最常与[spring],[spring-boot],[jakarta-ee],[android],[javafx],[gradle]和[maven]结合使用。

10
为什么必须wait()始终处于同步块中
我们都知道,为了调用Object.wait(),必须将此调用放置在同步块中,否则将IllegalMonitorStateException引发。但是,进行此限制的原因是什么?我知道这wait()会释放监视器,但是为什么我们需要通过使特定块同步来显式获取监视器,然后通过调用来释放监视器wait()? 如果可以wait()在同步块之外调用并保留其语义-挂起调用者线程,可能造成什么损害?

15
ArrayList的初始大小
您可以通过执行以下操作来设置ArrayList的初始大小: ArrayList<Integer> arr=new ArrayList<Integer>(10); 但是,你做不到 arr.add(5, 10); 因为它会导致超出范围的异常。 如果您无法访问分配的空间,设置初始大小有什么用? add函数的定义是,add(int index, Object element)所以我不添加索引10。

7
使用流生成地图时忽略重复项
Map<String, String> phoneBook = people.stream() .collect(toMap(Person::getName, Person::getAddress)); java.lang.IllegalStateException: Duplicate key当发现重复元素时,我得到提示。 在向地图添加值时是否可以忽略此类异常? 当有重复项时,只需忽略该重复项即可继续。
257 java  java-8  java-stream 

12
尽管随后关闭了连接,是否必须分别关闭JDBC结果集和语句?
据说在使用后关闭所有JDBC资源是一个好习惯。但是,如果我有以下代码,是否有必要关闭结果集和语句? Connection conn = null; PreparedStatement stmt = null; ResultSet rs = null; try { conn = // Retrieve connection stmt = conn.prepareStatement(// Some SQL); rs = stmt.executeQuery(); } catch(Exception e) { // Error Handling } finally { try { if (rs != null) rs.close(); } catch (Exception e) {}; …
256 java  jdbc 

6
抛出异常的哪一部分是昂贵的?
在Java中,当实际上没有错误时使用throw / catch作为逻辑的一部分通常是一个坏主意(部分),因为抛出和捕获异常的代价很高,而且在循环中多次执行通常比其他方法慢得多不涉及引发异常的控制结构。 我的问题是,是在throw / catch本身中还是在创建Exception对象时(因为它获得了大量的运行时信息,包括执行堆栈)而产生的成本? 换句话说,如果我这样做 Exception e = new Exception(); 但是不要扔,是扔的大部分费用,还是扔+渔获物处理的成本很高? 我不是在问是否将代码放在try / catch块中会增加执行该代码的成本,我是在问捕获Exception是昂贵的部分,还是创建(调用构造函数)Exception是昂贵的部分。 提出此问题的另一种方法是,如果我创建了一个Exception实例并一遍又一遍地抛出并捕获,那么这将比每次抛出新的Exception都快得多吗?


17
如何使线程超时
我想在一个固定的时间内运行一个线程。如果未在该时间内完成,我想杀死它,抛出一些异常或以某种方式处理它。如何做呢? 我从该线程 了解到的一种方法是在该线程的run()方法内使用TimerTask。 有没有更好的解决方案呢? 编辑:添加赏金,因为我需要一个更明确的答案。下面给出的ExecutorService代码无法解决我的问题。为什么在执行完某些代码后就进入sleep()-我无法处理这段代码?如果代码已完成并且sleep()被中断,那怎么可能是超时呢? 需要执行的任务不在我的控制范围内。它可以是任何代码。问题是这段代码可能会陷入无限循环。我不希望那样发生。因此,我只想在单独的线程中运行该任务。父线程必须等到该线程完成并且需要知道任务的状态(即它是否超时还是发生某些异常,或者它是否成功)。如果任务进入无限循环,则我的父线程将无限期地等待,这不是理想的情况。


4
Instant和LocalDateTime有什么区别?
我知道: 即时是用于计算的“技术”时间戳表示(纳秒)。 LocalDateTime是日期/时钟表示形式,包括人类的时区。 最终,对于大多数应用程序用例,IMO都可以视为两种类型。例如:当前我正在运行一个批处理作业,我需要根据日期计算下一次运行,并且我正在努力寻找这两种类型之间的优缺点(除了Instant和时区部分的纳秒级精度优势)的LocalDateTime)。 您可以列举一些应用示例,仅应使用Instant或LocalDateTime吗? 编辑:提防有关精度和时区的LocalDateTime的误读文档
255 java  datetime  java-8 

6
远程调试Java应用程序
我有一个在Linux机器上运行的Java应用程序。我使用以下命令运行Java应用程序: java myapp -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=4000, suspend=n 我已经在此Linux机器上为TCP打开了端口4000。我从Windows XP计算机使用eclipse,并尝试连接到此应用程序。我也在Windows中打开了端口。 这两台机器都在LAN上,但是我似乎无法将调试器连接到Java应用程序。我究竟做错了什么?

14
IntelliJ组织进口
IntelliJ是否具有类似于Eclipse中的“组织导入”功能?我所拥有的是一个Java文件,其中多个类缺少其导入。例: package com.test; public class Foo { public Map map; public JTable table; } 在Eclipse中,我可以使用Organize Imports,它将自动导入java.util.Map和javax.swing.JTable。在IntelliJ中,我必须单独进入每个班级,选择它,然后按Alt-Enter。有一个“优化导入”功能,但似乎要做的就是对现有导入进行排序和扩展。 我正在使用IntelliJ 10.5。

13
在运行时扫描Java批注[关闭]
关闭。此问题不符合堆栈溢出准则。它当前不接受答案。 想改善这个问题吗?更新问题,使其成为Stack Overflow 的主题。 3个月前关闭。 改善这个问题 在整个类路径中搜索带注释的类的最佳方法是什么? 我正在做一个库,我想允许用户注释他们的类,所以当Web应用程序启动时,我需要扫描整个类路径以查找某些注释。 您知道执行此操作的库或Java工具吗? 编辑:我正在考虑类似Java EE 5 Web服务或EJB的新功能。您使用@WebService或注释类,@EJB系统在加载时会找到这些类,因此可以远程访问它们。

10
具有过期密钥的基于Java时间的地图/缓存[关闭]
关闭。此问题不符合堆栈溢出准则。它当前不接受答案。 想改善这个问题吗?更新问题,使其成为Stack Overflow 的主题。 2年前关闭。 改善这个问题 您是否知道在给定超时后会自动清除条目的Java Map或类似标准数据存储?这意味着老化,旧的过期条目会自动“老化”。 最好在可通过Maven访问的开源库中? 我知道自己实现该功能的方法,并且过去已经做过几次,所以我不是在这方面寻求建议,而是寻求指向良好参考实现的指针。 像WeakHashMap这样的基于WeakReference的解决方案不是一个选择,因为我的密钥很可能是非interintern字符串,并且我希望可配置的超时时间不依赖于垃圾回收器。 我也不想依靠Ehcache,因为它需要外部配置文件。我正在寻找仅代码解决方案。
253 java  caching  dictionary 

6
javac不被识别为内部或外部命令,可操作程序或批处理文件
关闭。这个问题不能重现或由错别字引起。它当前不接受答案。 想改善这个问题吗?更新问题,使其成为Stack Overflow 的主题。 6年前关闭。 改善这个问题 尝试编译Java程序时遇到错误。 我在Windows上(这是Windows特定的问题),并且我安装了最新的JDK。 我尝试了一个涉及PATH变量的解决方案,但错误仍然存​​在。 控制台输出: C:\>set path=C:Program Files (x86)\Java\jdk1.7.0\bin C:\>javac Hello.java 'javac' is not recognized as an internal or external command, operable program or batch file.

3
RxJava调度程序的用例
在RxJava中,有5种不同的调度程序可供选择: Immediate():创建并返回一个Scheduler,该Scheduler立即在当前线程上执行工作。 trampoline():创建并返回一个调度程序,该调度程序在当前工作完成后将要在当前线程上执行的工作排队。 newThread():创建并返回一个Scheduler,该Scheduler为每个工作单元创建一个新的Thread。 Calculation():创建并返回用于计算工作的Scheduler。这可以用于事件循环,处理回调和其他计算工作。不要在此调度程序上执行IO绑定工作。使用计划程序。io()代替。 io():创建并返回用于IO绑定工作的Scheduler。该实现由Executor线程池支持,该线程池将根据需要增长。这可用于异步执行阻塞IO。不要在此调度程序上执行计算工作。使用计划程序。Calculation()代替。 问题: 前三个调度程序很容易说明。但是,我对计算和io有点困惑。 什么是“ IO绑定工作”?它用于处理流(java.io)和文件(java.nio.files)吗?它用于数据库查询吗?它是否用于下载文件或访问REST API? 如何计算()从不同newThread() ?是否所有的Calculation()调用都在单个(后台)线程上,而不是每次都在一个新的(后台)线程上? 为什么在进行IO工作时调用calculation()很糟糕? 为什么在执行计算工作时调用io()不好?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.