Questions tagged «java»

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


17
什么是不变的?
这可能是有史以来最愚蠢的问题,但我认为对于Java新手来说这很令人困惑。 有人可以澄清什么是不变的吗? 为什么是String一成不变的? 不可变对象的优缺点是什么? 为什么诸如StringBuilderString之类的可变对象优先于String,反之亦然? 一个很好的例子(在Java中)将不胜感激。

2
Mockito测试void方法会引发异常
我有一个带有void返回类型的方法。它还可以引发许多异常,因此我想测试所引发的异常。所有尝试均以相同的原因失败: Stubber类型中的when(T)方法不适用于参数(void) 有什么想法可以获取引发指定异常的方法吗? doThrow(new Exception()).when(mockedObject.methodReturningVoid(...));

15
Java字符串真的不可变吗?
我们都知道这String在Java 中是不可变的,但是请检查以下代码: String s1 = "Hello World"; String s2 = "Hello World"; String s3 = s1.substring(6); System.out.println(s1); // Hello World System.out.println(s2); // Hello World System.out.println(s3); // World Field field = String.class.getDeclaredField("value"); field.setAccessible(true); char[] value = (char[])field.get(s1); value[6] = 'J'; value[7] = 'a'; value[8] = 'v'; value[9] = 'a'; value[10] = …


8
IntelliJ-将Java项目/模块转换为Maven项目/模块
我有一个关于Bitbucket的项目。仅提交源。为了将项目检索到新机器上,我在IntelliJ中使用了Version Control> Checkout from Version Control。 然后,它询问我是否要从此源创建一个新项目,对此我回答“是”。到目前为止,一切都很好。它为我创建了一个不错的Java小项目,由一个模块组成。 但是,将这个项目引入IntelliJ的目的是将其变成Maven项目。我找不到任何可以让我做到这一点的选择! 有没有办法让IntelliJ仅为我生成一个基本的空pom.xml,并为其提供名称,artifactId和存储库?或者,是否首先有办法将项目导入为Maven项目?(每当我尝试从现有资源创建项目时,它都只提供Java项目的选项。)

14
Java 8并行流中的自定义线程池
是否可以为Java 8 并行流指定自定义线程池?我在任何地方都找不到。 假设我有一个服务器应用程序,并且想使用并行流。但是该应用程序很大且是多线程的,因此我想将其划分。我不希望一个模块中的某个模块中的任务运行缓慢,而另一个模块中的任务却运行缓慢。 如果不能为不同的模块使用不同的线程池,则意味着在大多数实际情况下,我不能安全地使用并行流。 请尝试以下示例。在单独的线程中执行一些CPU密集型任务。任务利用并行流。第一个任务已中断,因此每个步骤需要1秒钟(由线程睡眠模拟)。问题是其他线程被卡住并等待中断的任务完成。这是一个人为的示例,但是假设有一个servlet应用程序,有人向共享的fork联接池提交了一个长时间运行的任务。 public class ParallelTest { public static void main(String[] args) throws InterruptedException { ExecutorService es = Executors.newCachedThreadPool(); es.execute(() -> runTask(1000)); //incorrect task es.execute(() -> runTask(0)); es.execute(() -> runTask(0)); es.execute(() -> runTask(0)); es.execute(() -> runTask(0)); es.execute(() -> runTask(0)); es.shutdown(); es.awaitTermination(60, TimeUnit.SECONDS); } private static void runTask(int …


11
四季豆到底是什么?
我还没有找到我能理解的高级Spring bean定义。我看到Grails文档和书籍中经常引用它们,但是我认为了解它们的好处将是有益的。那么什么是春豆呢?如何使用它们?他们和依赖注入有关系吗?
397 java  spring  grails 



21
通过HTTPS使用HttpClient信任所有证书
最近发布了有关HttpClientover Https 的问题(在此处找到)。我取得了一些进展,但遇到了新问题。与我的最后一个问题一样,我似乎找不到适合我的示例。基本上,我希望我的客户端接受任何证书(因为我只指向一台服务器),但是我不断获得javax.net.ssl.SSLException: Not trusted server certificate exception. 这就是我所拥有的: public void connect() throws A_WHOLE_BUNCH_OF_EXCEPTIONS { HttpPost post = new HttpPost(new URI(PROD_URL)); post.setEntity(new StringEntity(BODY)); KeyStore trusted = KeyStore.getInstance("BKS"); trusted.load(null, "".toCharArray()); SSLSocketFactory sslf = new SSLSocketFactory(trusted); sslf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); SchemeRegistry schemeRegistry = new SchemeRegistry(); schemeRegistry.register(new Scheme ("https", sslf, 443)); SingleClientConnManager cm = new SingleClientConnManager(post.getParams(), …


18
为什么在参数中不使用Java 8的Optional
我已经在许多网站上阅读了Optional应该仅用作返回类型,而不能在方法参数中使用。我正在努力找到一个合理的理由。例如,我有一段逻辑,其中包含2个可选参数。因此,我认为这样写我的方法签名是有意义的(解决方案1): public int calculateSomething(Optional<String> p1, Optional<BigDecimal> p2 { // my logic } 许多指定为Optional的网页不应用作方法参数。考虑到这一点,我可以使用以下方法签名并添加清晰的Javadoc注释以指定参数可以为null,希望以后的维护者将读取Javadoc,因此始终在使用参数之前进行null检查(解决方案2) : public int calculateSomething(String p1, BigDecimal p2) { // my logic } 另外,我可以用四个公共方法替换我的方法,以提供更好的接口,并使p1和p2更明显(解决方案3): public int calculateSomething() { calculateSomething(null, null); } public int calculateSomething(String p1) { calculateSomething(p1, null); } public int calculateSomething(BigDecimal p2) { calculateSomething(null, p2); } public …
392 java  java-8  optional 

27
在Mac OS X上安装了Java 7,但Terminal仍在使用版本6
我已经安装了从oracle网站下载的JDK 7u7。但是安装后,终端仍然显示Java版本6 $java -version java version "1.6.0_35" Java(TM) SE Runtime Environment (build 1.6.0_35-b10-428-11M3811) Java HotSpot(TM) 64-Bit Server VM (build 20.10-b01-428, mixed mode) 知道为什么Java 7没有显示吗? 回答:好的,问题已经解决。答案是:我发现我的终端机具有.bash_profile,并且java home变量设置为1.6 export JAVA_HOME="/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home" 因此,这是每当我打开新的终端窗口时导致问题的行。只需删除此行即可解决问题。您仍然需要遵循@aleroot所说的内容,但是如果这对您不起作用,请检查.bash_profile(或.bashrc)设置文件,以查看您以前是否导出了任何Java版本。
391 java  macos  java-7 

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.