以下在我的Eclipse中编译得很好:
final int j = 1/0;
// compiles fine!!!
// throws ArithmeticException: / by zero at run-time
Run Code Online (Sandbox Code Playgroud)
Java的防止了许多"哑代码"从甚至在首位编译(如"Five" instanceof Number不编译),所以其实这甚至没有产生尽可能多的警告是非常令我感到诧异.当您考虑允许在编译时优化常量表达式这一事实时,阴谋会加深:
public class Div0 {
public static void main(String[] args) {
final int i = 2+3;
final int j = 1/0;
final int k = 9/2;
}
}
Run Code Online (Sandbox Code Playgroud)
在Eclipse中编译,上面的代码片段生成以下字节码(javap -c Div0)
Compiled from "Div0.java"
public class Div0 extends java.lang.Object{
public Div0();
Code:
0: aload_0
1: invokespecial #8; //Method java/lang/Object."<init>":()V
4: return
public static void main(java.lang.String[]);
Code:
0: …Run Code Online (Sandbox Code Playgroud) 在Java中,要创建和显示新的JFrame,我只需这样做:
public static void main(String[] args) {
new MyCustomFrameClass().setVisible(true);
}
Run Code Online (Sandbox Code Playgroud)
但是,我见过很多人这样做:
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
new MyCustomFrameClass().setVisible(true);
}
});
}
Run Code Online (Sandbox Code Playgroud)
为什么?有什么好处吗?
我正在开发一个Swing应用程序,其中包含执行自定义绘制的组件 当我在绘制代码中犯了一些错误并抛出异常时,情况很难调试.弹出窗口显示异常信息,而不是被调试器捕获.此外,线程似乎重新启动,并且由于编码错误的结果异常,它会一次又一次地显示.
当我很幸运地切换到调试器时(这很困难,因为越来越多的弹出窗口随着应用程序获取绘制请求而不断出现),调试控制台会向我显示异常信息,例如:
严重:线程中抛出未捕获的异常[AWT-EventQueue-0,6,main]
....堆栈如下
我的应用程序是用Scala编写的,我使用的是IntelliJ IDEA 14.我的未被捕获的主线程异常由调试器处理得很好(我已Uncaught exception启用Any exception断点启用Java Exception Breakpoints),但AWT线程中的异常不是.
我已经尝试过安装一个处理程序,如下所述我如何检测Java中全局抛出异常的时间?回答,但我的处理程序似乎没有被触发.
我想实现以下(按重要性顺序):
(注意:虽然这是Scala应用程序,但我认为Java的行为是相同的,因此Java标记).