Questions tagged «java»

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

3
依赖默认字段初始化-编程风格不好吗?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过事实和引用回答编辑此帖子。 7个月前关闭。 我获得了指向官方Oracle文档的链接:https : //docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html 据说: 默认值 声明字段时,不一定总是需要分配值。编译器会将已声明但未初始化的字段设置为合理的默认值。通常,此默认值将为零或null,具体取决于数据类型。但是,通常认为依赖于此类默认值是不好的编程风格。 我想强调这一部分: 但是,通常认为依赖于此类默认值是不好的编程风格。 但是,天哪,我想这是语言规范的基本组成部分,因为它知道实例变量具有默认值。如果即使在Java SE库源代码中也广泛使用它,那么到底为什么这是一种不好的编程习惯呢?

10
带有maven的Java无法生成:无法运行程序“ cmd”“格式错误的参数已嵌入引号”
我重新安装了netbean 11.1。现在,我正在尝试构建一个项目,但是出现以下错误输出: 无法运行程序“ cmd”(在目录“ C:\ projects \ open”中):格式错误的参数已嵌入引号:“ C:\ Program Files \ NetBeans-11.1 \ netbeans \ java \ maven \ bin \ mvn.cmd” cd C:\projects\open; "JAVA_HOME=C:\\Program Files\\Java\\jdk-11.0.5" cmd /c "\"\"C:\\Program Files\\NetBeans-11.1\\netbeans\\java\\maven\\bin\\mvn.cmd\" -DskipTests=true -Dmaven.ext.class.path=\"C:\\Program Files\\NetBeans-11.1\\netbeans\\java\\maven-nblib\\netbeans-eventspy.jar\" -Dfile.encoding=UTF-8 clean install\"" Cannot run program "cmd" (in directory "C:\projects\open"): Malformed argument has embedded quote: "C:\Program …

3
参数中的Java类型提升
我偶然发现了以下片段: public class ParamTest { public static void printSum(int a, double b) { System.out.println("In intDBL " + (a + b)); } public static void printSum(long a, long b) { System.out.println("In long " + (a + b)); } public static void printSum(double a, long b) { System.out.println("In doubleLONG " + (a …

2
Android 11中弃用的Android AsyncTask API有哪些替代方案?
编辑:这个问题不是重复的 仅仅几天后,AOSP就完成了弃用承诺。 另一个问题是关于在AsyncTask上使用AsyncTaskLoader的问题。 Google在Android 11中弃用了Android AsyncTask API,并建议改为使用java.util.concurrent。你可以在这里查看提交 * * @deprecated Use the standard <code>java.util.concurrent</code> or * <a href="https://developer.android.com/topic/libraries/architecture/coroutines"> * Kotlin concurrency utilities</a> instead. */ @Deprecated public abstract class AsyncTask<Params, Progress, Result> { 如果您要使用Android中的异步任务维护较旧的代码库,则将来可能需要更改它。我的问题是,应该正确替换下面显示的代码片段java.util.concurrent。它是Activity的静态内部类。我正在寻找可以使用的东西minSdkVersion 16 private static class LongRunningTask extends AsyncTask<String, Void, MyPojo> { private static final String TAG = MyActivity.LongRunningTask.class.getSimpleName(); …
20 java  android 

1
这是在Java中将char转换为String的正确方法吗?
在编写单元测试以返回boolean一个需要2 Strings 的函数时,我需要依次测试作为参数之一的字母('a'- 'z')的每个字符,所以我这样做是为了做到这一点: for(char c = 'a'; c <= 'z'; c++) { assertTrue(MyClass.MyFunction(testSubject, new String(c)); } 我本以为这是允许的,但事实并非如此,所以我只是这样做了: for(char c = 'a'; c <= 'z'; c++) { assertTrue(MyClass.MyFunction(testSubject, ((Character) c).toString()); } 这是在Java中将chara 转换为a的可靠方法String吗?是首选方式吗?我对Java并不了解很多,所以想对此进行一些说明。
19 java  string  character 

2
当数字等于0时,如何跳过流的limit(number)调用?
我有一些Java代码可以提供来自的对象items。它基于maxNumber: items.stream() .map(this::myMapper) .filter(item -> item != null) .limit(maxNumber) .collect(Collectors.toList()); 它可以正常工作,但是问题是:当maxNumber == 0?时,是否有一种跳过限制的方法? 我知道我可以这样做: if (maxNumber == 0) { items.stream() .map(this::myMapper) .filter(item -> item != null) .collect(Collectors.toList()); } else { items.stream() .map(this::myMapper) .filter(item -> item != null) .limit(maxNumber) .collect(Collectors.toList()); } 但是,也许有更好的方法,您想到什么了吗?


6
为什么Java无法推断超类型?
大家都知道龙延伸Number。那么为什么不编译呢? 以及如何定义方法with,使程序无需任何手工转换就可以编译? import java.util.function.Function; public class Builder<T> { static public interface MyInterface { Number getNumber(); Long getLong(); } public <F extends Function<T, R>, R> Builder<T> with(F getter, R returnValue) { return null;//TODO } public static void main(String[] args) { // works: new Builder<MyInterface>().with(MyInterface::getLong, 4L); // works: new Builder<MyInterface>().with(MyInterface::getNumber, (Number) 4L); …

1
Java中的内存防护有什么用?
在尝试了解如何实现SubmissionPublisher(Java SE 10中的源代码,OpenJDK | docs),在版本9中添加到Java SE的新类的实现之后,我偶然发现了一些VarHandle以前没有意识到的API调用: fullFence,acquireFence,releaseFence,loadLoadFence和storeStoreFence。 在进行了一些研究之后,尤其是关于内存屏障/栅栏的概念(我以前听说过,是的;但是从未使用过它们,因此对它们的语义非常陌生),我认为我对它们的用途有基本的了解。 。但是,由于我的问题可能是由错误的观念引起的,因此我想确保我一开始就正确: 内存障碍是关于读写操作的重新排序约束。 内存屏障可以分为两大类:单向和双向内存屏障,取决于它们是对读取还是写入或对这两者设置约束。 C ++支持多种内存屏障,但是这些屏障与所提供的屏障不匹配VarHandle。然而,一些在可用内存壁垒VarHandle提供排序的影响是兼容其相应的C ++内存屏障。 #fullFence 与...兼容 atomic_thread_fence(memory_order_seq_cst) #acquireFence 与...兼容 atomic_thread_fence(memory_order_acquire) #releaseFence 与...兼容 atomic_thread_fence(memory_order_release) #loadLoadFence并且#storeStoreFence没有兼容的C ++计数器部分 “ 兼容 ”一词在这里似乎非常重要,因为在细节上语义明显不同。例如,所有C ++障碍都是双向的,而Java障碍不是必需的。 大多数内存屏障也具有同步效果。这些特别取决于其他线程中使用的屏障类型和先前执行的屏障指令。由于障碍指令的全部含义是特定于硬件的,因此我将坚持使用更高级别的(C ++)障碍。在C ++中,例如,改变由之前的释放屏障指令是执行一个线程可见获取屏障指令。 我的假设正确吗?如果是这样,我的问题是: 可用的内存屏障是否VarHandle会引起任何类型的内存同步? 无论它们是否引起内存同步,重新排序约束在Java中可能有什么用?Java内存模型已经就可变字段,锁或VarHandle类似操作的顺序提供了一些非常有力的保证#compareAndSet。 如果您正在寻找一个示例:前面提到BufferedSubscription的SubmissionPublisher(内部链接为的内部类)在第1079行中建立了完整的围栏(功能growAndAdd;由于链接的网站不支持片段标识符,因此仅需使用CTRL + F )。但是,我不清楚它的用途。

2
箭头(->)运算符的优先级/优先级最低,还是分配/组合分配的优先级最低?
JLS: 的最低优先级操作者是lambda表达式的箭头( - >) ,接着由赋值运算符。 遵循哪个方向(增加优先级,减少优先级)?-“跟随”是指分配的优先级较高还是较低(相对于箭头运算符)?我猜想,这是因为“最低”(箭头)表示绝对最低。 据我了解,箭头(->)应该在此普林斯顿的最底部运算符优先级表的(位于所有赋值运算符的下方),因此箭头(->)的优先级为0(零)(根据该表)。 我的理解正确吗? 考试托盘似乎说箭头优先级至少与分配相同。此外,还阐明了箭头的关联性是Left-> To-> Right(与分配不同)。我没有找到JLS的箭头关联性报价。 我一直认为分配优先级原则上最低。

4
Windows上的多线程Java应用程序的CPU使用率太低
我正在开发一个Java应用程序,用于解决一类数值优化问题-更确切地说是大规模线性编程问题。单个问题可以分解为多个较小的子问题,这些子问题可以并行解决。由于子问题多于CPU内核,因此我使用ExecutorService并将每个子问题定义为可提交给ExecutorService的Callable。解决子问题需要调用本机库-在这种情况下为线性编程求解器。 问题 我可以在Unix和具有多达44个物理核心和256g内存的Windows系统上运行该应用程序,但是在Windows上,大问题的计算时间比Linux上高一个数量级。Windows不仅需要大量内存,而且随着时间的推移,CPU利用率从开始时的25%下降到几个小时后的5%。这是Windows中任务管理器的屏幕截图: 观察结果 整个问题的大型实例的解决时间从数小时到数天不等,并且最多消耗32g的内存(在Unix上)。子问题的解决时间在ms范围内。 对于仅需几分钟即可解决的小问题,我不会遇到此问题。 Linux开箱即用地使用了两个套接字,而Windows要求我显式地激活BIOS中的内存交错,以便应用程序利用两个内核。但是,是否执行此操作不会对总体CPU利用率随时间的下降造成影响。 当我查看VisualVM中的线程时,所有池线程都在运行,没有一个正在等待。 根据VisualVM,90%的CPU时间花在了本机函数调用上(解决了一个小的线性程序) 垃圾回收不是问题,因为该应用程序不会创建和取消引用很多对象。而且,大多数内存似乎是堆外分配的。对于最大实例,Linux上4g的堆就足够了,而Windows上8g的堆就足够了。 我尝试过的 各种JVM arg,高XMS,高元空间,UseNUMA标志和其他GC。 不同的JVM(热点8、9、10、11)。 不同线性编程求解器(CLP,Xpress,Cplex,Gurobi)的不同本机库。 问题 是什么导致大量使用本地调用的大型多线程Java应用程序在Linux和Windows之间的性能差异? 在实现方面有什么可以改变的,例如Windows,我是否应该避免使用接收数千个Callable的ExecutorService来代替呢?



3
创建URI时为什么主机名无效
使用JDK 1.8运行以下代码: try { System.out.println( new URI(null, null, "5-12-145-35_s-81", 443, null, null, null)); } catch (URISyntaxException e) { e.printStackTrace(); } 导致此错误: java.net.URISyntaxException: Illegal character in hostname at index 13: //5-12-145-35_s-81:443 根据URI字符的类型,考虑到所有主机名字符似乎都是合法的,此错误从何而来? 如果我使用这些URL://5-12-145-35_s-81:443或/5-12-145-35_s-81:443错误消失了。 从注释中可以理解,根据RFC-2396,主机名不能包含任何下划线字符。 仍然存在的问题是,为什么允许以斜杠或双斜杠开头的主机名包含下划线?
17 java 


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.