尝试将stacktrace打印到控制台时,我得到了以下stacktrace:
java.lang.StackOverflowError
at java.io.FileOutputStream.writeBytes(Native Method)
at java.io.FileOutputStream.write(Unknown Source)
at java.io.BufferedOutputStream.flushBuffer(Unknown Source)
at java.io.BufferedOutputStream.write(Unknown Source)
at java.io.PrintStream.write(Unknown Source)
at sun.nio.cs.StreamEncoder.writeBytes(Unknown Source)
at sun.nio.cs.StreamEncoder.implFlushBuffer(Unknown Source)
at sun.nio.cs.StreamEncoder.flushBuffer(Unknown Source)
at java.io.OutputStreamWriter.flushBuffer(Unknown Source)
at java.io.PrintStream.write(Unknown Source)
at java.io.PrintStream.print(Unknown Source)
at java.io.PrintStream.println(Unknown Source)
at java.lang.Throwable.printStackTrace(Throwable.java:461)
at java.lang.Throwable.printStackTrace(Throwable.java:451)
...
Run Code Online (Sandbox Code Playgroud)
以前有人见过这样的东西吗?可能是什么导致了这个?(不幸的是我收到了用户的堆栈跟踪,所以我不能说JVM配置是否以任何方式被更改.)
导致这种情况的方法调用是一个简单的catch-and-print,如下所示:
try {
...
File canFile = new File(path).getCanonicalFile();
...
} catch (IOException e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
虽然我不能再发布任何代码,但我可以保证getCanonicalFile调用抛出了IOException,因为这是try-clause中唯一可以抛出IOException的调用.
我从未真正理解的一件事是为什么在许多库中,常量定义如下:
public static final int DM_FILL_BACKGROUND = 0x2;
public static final int DM_FILL_PREVIOUS = 0x3;
public static final int TRANSPARENCY_MASK = 1 << 1;
public static final int TRANSPARENCY_PIXEL = 1 << 2;
Run Code Online (Sandbox Code Playgroud)
怎么了0x和<<东西?为什么人们不只是使用普通的整数值?
我刚刚意识到,在我4年多的Java编程(主要是桌面应用程序)中,我从未在Arrays类中使用二进制搜索方法来实现任何实际操作.从来没有.我能想到的一些原因:
所以我想知道这只是我,还是很多人从不使用二分搜索?什么是二进制搜索的一些好的,实用的例子?
在Scala项目中,我需要一个简单的,可变的队列数据结构,我可以在一端附加项目并在另一端取出项目(即FIFO).现在,我不确定是否应该使用LinkedListJava中的普通旧版本或Scala版本DoubleLinkedList.这两者的相对优势是什么?我应该总是喜欢DoubleLinkedList,还是有充分的理由使用LinkedList?此外,还有其他值得考虑的选择吗?