在 catch 子句中抛出异常

2023-11-26

我有两段代码:

class PreciseRethrow {
public static void main(String[] str) {
    try {
        foo();
    } catch (NumberFormatException ife) {
        System.out.println(ife);
    }
}

static private void foo() throws NumberFormatException {
    try {
        int i = Integer.parseInt("ten");
    } catch (Exception e) {
        throw e;
    }
}
}

and :

class PreciseRethrow {
public static void main(String[] str) {
    try {
        foo();
    } catch (NumberFormatException ife) {
        System.out.println(ife);
    }
}

static private void foo() throws NumberFormatException {
    try {
        int i = Integer.parseInt("ten");
    } catch (Exception e) {
        throw new Exception();
    }
}
}

在第二种情况下,当我在 catch 子句中抛出 new Exception () 时,出现编译错误“未处理的异常类型异常”。你能解释一下为什么在第一种情况下一切正常,但在第二种情况下我得到编译错误?在这两种情况下,我都会抛出异常,但在第二种情况下,我会创建新的异常实例(这只是这两个示例之间的区别)。感谢帮助。


首先:你的第一个例子也不能用 Java 6 编译. It will但是,由于异常处理方面的新功能,请使用 Java 7 进行编译。

See 这个链接了解更多信息。基本上,从 Java 7 开始,编译器可以分析从try更精确地阻止;即使您捕获一个或多个抛出异常的超类并“按原样”重新抛出它(即,不进行强制转换),编译器也不会抱怨。然而,Java 6 及更早版本will抱怨。

然而,在你的第二个例子中,你重新抛出了new的实例Exception。事实上,这与签名不匹配。

总而言之,这意味着使用 Java 7 可以做到这一点,但使用 Java 6 则不行:

public void someMethod()
    throws MyException
{
    try {
        throw new MyException();
    } catch (Exception e) { // Note: Exception, not MyException
        throw e;
    }
}

Java 6 只看到catch参数是类型Exception;对于 Java 6,这与方法签名不匹配 --> 编译错误。

Java 7看到try块只能抛出MyException。因此,方法签名匹配 --> 没有编译错误。

但不要这样做;)这相当令人困惑......

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 catch 子句中抛出异常 的相关文章

  • Java JFileChooser 与过滤器据称仅显示目录无法仅显示目录

    预先感谢 如果您需要更多信息 请告诉我 示例代码位于底部 我试图解决的问题 我试图通过使用 javax swing filechooser FileFilter 对象来使此 JFileChooser 对象仅显示目录 而不是文件 该对象在ac
  • 如何使用 Windows 上运行的 Java 服务检测用户活动?

    我的目标是使用 Java 创建一个系统监控应用程序 我想知道用户何时在 Windows PC 上进行活动 结果会是这样的 8 00 8 15 活动 9 12 10 29 活动 12 24 15 34 活动 我对任何其他信息 按下了哪个键 使
  • 多线程以原子方式对大量值求和

    我正在开发一个应用程序 其中有大量线程 并且必须自动添加 100 个值 我在用AtomicLong效果很好 但仍需要提高性能 有没有比 AtomicLong 提供更好性能的东西 您可以使用长加法器 https docs oracle com
  • 我的应用程序中的 google+ 集成

    我是 Android 开发新手 正在创建一个带有 Google 集成的 Android 应用程序 我看到了一个教程并开始遵循它 但自教程以来 Google 已经更新了 Google 集成 例如 在本教程中您曾经单击 获取配置文件 按钮htt
  • 有没有办法获取 JList 中的所有元素?

    我想知道是否有一种方法可以检索已添加到 JList 的所有元素的列表 例如 我希望 JList 从自定义单元格渲染器返回字符串或 JLabels 的数组或列表 您可以使用getModel http docs oracle com javas
  • Spring批处理2.2 JavaConfig

    我正在尝试让 Spring Batch 2 2 与 JavaConfig 一起使用 如今他们有一个 EnableBatchProcessing设置很多东西的注释 默认情况下 该注释使用数据源作为其作业数据 但我们不想保存此数据 也不想为其创
  • 在Java中,为什么equals()和hashCode()必须一致?

    如果我重写类上的任一方法 它必须确保如果A equals B true then A hashCode B hashCode也一定是真的 有人可以给我看一个简单的例子 如果违反了这一点 就会导致问题吗 我认为这与您是否使用该类作为 Hash
  • JFreeChart 更改现有条形图中的数据

    我想循环更改条形图数据 但我不知道该怎么做 我的代码 DefaultCategoryDataset barChartData new DefaultCategoryDataset barChartData setValue 0 Values
  • Apache HttpClient 4.x 在上传较大文件时表现奇怪?

    我正在使用 java 和 scala 开发和测试一个简单的客户端 服务器应用程序 The server是基于com sun net httpserver HttpServer并允许使用 POST 和 PUT 操作通过基本的 RESTful
  • spring Kafka模型不在可信包中

    我正在研究微服务spring Kafka 2 1 5 and spring boot 2 0 5 第一个服务将向卡夫卡产生一些消息 第二个服务将消耗它们 在消耗时我遇到了问题 Caused by java lang IllegalArgum
  • 我应该在远程工作站的哪里放置 CSV 配置文件以进行分布式 JMeter 测试?

    我想做JMeter分布式测试 手册上说首先我应该开始jmeter server在远程节点上 然后我应该更新jmeter config并运行jmeter在主节点上 我做了所有这些步骤 我的测试计划包括使用 CSV 配置文件 如果我只从 1 个
  • Apache HTTPClient SSLPeerUnverifiedException

    使用 Apache HttpClient 4 2 1 使用从基于表单的登录示例复制的代码 http hc apache org httpcomponents client ga examples html http hc apache or
  • Selenium 和 xpath:查找带有类/id 的 div 并验证其中的文本

    我正在努力拥有xpath find a div并验证div有一个特定的string里面的文字 这是HTML div class Caption Model saved div and div class gwt HTML sfnStanda
  • 如何显示 javadoc 代码块中的泛型?

    我有一个 javadoc 代码块 我想在其中编写一个包含泛型的代码示例 如下所示 public interface SomeInterface
  • 将 Tango 3D 点投影到屏幕 Google Project Tango

    Project Tango 提供了点云 如何获取点云中 3D 点的像素位置 以米为单位 我尝试使用投影矩阵 但得到的值非常小 0 5 1 3 等 而不是 1234 324 以像素为单位 我包含我尝试过的代码 Get the current
  • 方法中缺少 return 语句错误

    我正在尝试编写一个返回计算机 MAC 地址字符串的静态方法 该函数本身可以在此处找到 http www mkyong com java how to get mac address in java http www mkyong com j
  • Java - 动态创建子类

    我想以编程方式创建一个子类 我想我的选择很少 Javassist CGLib BCEL 或 ASM 用例是一个应用程序的内部是面向类的 而扩展是基于类的 因此 我不能将单个类作为由外部化脚本驱动的多个扩展的基础 现在 我该怎么做呢 我找到了
  • 使用 ProGuard 混淆代码后如何保持 javadoc 可见?

    我使用 progured 4 7 混淆了我的代码 并保留了 A 类 其中包含描述该类功能的 javadoc keep public class com mysite ClassA public keepattributes InnerCla
  • JPA2+Hibernate 3.6.0 中的 JTA 还是 LOCAL 事务?

    我们正在重新思考我们的技术堆栈 以下是我们的选择 由于应用程序的复杂性等 我们不能没有 Spring 和 Hibernate 我们还从 J2EE 1 4 迁移到 Java EE 5 技术栈 Java EE 5 JPA 2 0 我知道Java
  • Java中ThreadFactory的使用

    有人可以简要解释一下如何以及何时使用 ThreadFactory 吗 使用和不使用 ThreadFactory 的示例可能确实有助于理解差异 Thanks 这是一种可能的用法 假设您有一个ExecutorService它执行你的Runnab

随机推荐