如何解决即使我们不处理 Frame 构造函数抛出的已检查异常,程序也能遵守吗?
根据 Oracle 文档 https://docs.oracle.com/javase/7/docs/api/java/awt/Frame.html#Frame()
Frame 构造函数抛出 HeadlessException - 当 GraphicsEnvironment.isHeadless() 返回 true 时
import java.awt.*;
import java.awt.event.*;
public class MouseDemo extends Frame{
String msg="";
MouseDemo()
{
super();//not handling HeadlessException
addMouseListener(new MouseAdapter()
{
public void mouseClicked(MouseEvent me)
{
msg="Clicked";
repaint();
}
});
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent we)
{
System.exit(0);
}
} );
}
@Override
public void paint(Graphics g)
{
g.setColor(Color.black);
g.drawString(msg,50,50);
}
public static void main(String agrs[])
{
MouseDemo obj=new MouseDemo();
obj.setSize(new Dimension(300,300));
obj.setTitle("hello");
obj.setVisible(true);
}
}
MouseDemo() 既不处理 HeadlessException 也不将其抛出给调用方法,那么为什么我们没有收到编译错误
解决方法
正如 Java 语言规范的 §8.4.6 所说,
允许但不要求在 throws
子句中提及未经检查的异常类(第 11.1.1 节)。
因此,并非您在 throws
子句中看到的所有内容都是已检查异常。实际上,检查异常是在§11.1.1中定义的:
RuntimeException
及其所有子类统称为运行时异常类。
未经检查的异常类是运行时异常类和错误类。
受检异常类是非受检异常类以外的所有异常类。也就是说,被检查的异常类是 Throwable
及其除 RuntimeException
及其子类和 Error
及其子类之外的所有子类。
如果你查看HeadlessException
的继承树,你会发现它是RuntimeException
的一个子类:
java.lang.Object
java.lang.Throwable
java.lang.Exception
java.lang.RuntimeException
java.lang.UnsupportedOperationException
java.awt.HeadlessException
因此,这是一个未经检查的异常,您不需要使用 try...catch
或另一个 throws
子句来处理它。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。