Tag: throwable

如何在我的自定义exception中设置我自己的消息,可以检索我的getMessage()但是没有使用构造函数,有什么办法吗?

我刚学习Java中的exception处理。 我想知道的不是尝试说: throw new Exception(“My Message”); 和 String message=ex.getMessage(); System.out.println(message); 看看下面的代码, class ExceptionTest { public static void main(String[] args) { ExceptionTest t1=new ExceptionTest(); try { t1.riskyMethod();//call the risky or exception throwing method } catch(MyException myex) { System.out.println(“Exception has been thrown”); String message=myex.getMessage();//get the String passed during exception call System.out.println(“The message retrieved is “+message); myex.printStackTrace();//prints name […]

Java – 可以抛出exception

我目前正在使用play2框架。 我有几个类抛出exceptions但play2s全局onError处理程序使用throwable而不是exception。 例如,我的一个类是抛出NoSessionException 。 如果它是NoSessionException我可以检查throwable对象吗?

如何不抛出一般指定的exception?

我创建了一个“生成器”接口(与方法引用一起使用,分别用于unit testing的模拟): @FunctionalInterface public interface Factory { public R newInstanceFor(T t) throws X; } 我创建的那样,因为我的第一个用例实际上必须抛出一些已检查的WhateverException 。 但我的第二个用例没有投掷X. 我能想出的让编译器满意的最好方法是: Factory factory; 这编译,并做我需要的,但仍然是丑陋的。 有没有办法保留单个接口,但在声明特定实例时不提供X?

在Java中捕获Throwable的最佳实践

有时,您只需要捕获Throwable,例如在编写调度程序队列时调度通用项目并需要从任何错误中恢复(所述调度程序记录所有捕获的exception,但是静默,然后继续执行其他项目)。 我能想到的一个最佳实践是,如果它是InterruptedException,总是重新抛出exception,因为这意味着有人打断了我的线程并想要杀死它。 另一个建议(来自评论,而非答案)是始终重新抛出ThreadDeath 还有其他最佳做法吗?

应该抓住哪个Throwable的子类,哪个不应该?

API doc说从不捕获Throwable子类Error表示exception行为。 它是否意味着Error和Exception之间的隔离是告诉程序员应该捕获哪个子类,哪个不应该? 或者还有更多呢?

用Java扩展Throwable

Java允许您创建一个全新的Throwable子类型,例如: public class FlyingPig extends Throwable { … } 现在, 很少 ,我可能会这样做: throw new FlyingPig(“Oink!”); 当然还有其他地方: try { … } catch (FlyingPig porky) { … } 我的问题是: 这是一个坏主意吗? 如果是这样,为什么? 如果这是一个坏主意,可以做些什么来阻止这种子类型? 由于它不可预防(据我所知),可能导致什么灾难? 如果这不是一个坏主意,为什么不呢? 如果你可以extends Throwable ,你怎么能做出有用的东西呢? 拟议方案#1 我真的想做这样的事情的场景具有以下属性: “事件”最终会发生。 这是预料之中的 。 它绝对不是一个Error ,并且没有什么Exception它何时发生。 因为它是预期的 ,所以会有一个等待它的catch 。 它不会“滑倒”过去。 它不会“逃避”任何catch一般Exception和/或Error尝试。 “事件” 极少发生。 当它发生时,通常会有一个深层堆栈跟踪。 所以也许我现在很清楚我想说的是: FlyingPig是一个详尽的递归搜索的结果 。 要搜索的对象存在:只有在大海中找到它才是搜索空间。 搜索过程很长,因此相对昂贵的exception处理成本可以忽略不计。 […]

运行时使用Gradle的NoClassDefFoundError

我正在使用gradle作为JavaFX插件。 即使在构建和运行分发/的excecutable之后,一切都完美无缺,除了一个类: CloseableHttpClient 出于几个目的,我创建了以下对象: CloseableHttpClient client = HttpClients.createDefault(); 在IDE中运行程序没问题,一切正常。 但是如果我构建并尝试运行.exe-File,我会得到以下Throwable -StackTrace: java.lang.NoClassDefFoundError: Could not initialize class org.apache.http.conn.ssl.SSLConnectionSocketFactory at org.apache.http.impl.client.HttpClientBuilder.build(HttpClientBuilder.java:955) at org.apache.http.impl.client.HttpClients.createDefault(HttpClients.java:58) at ch.itcb.tools.lom.util.JsonSimpleUtil.http(JsonSimpleUtil.java:29)… 我真的不明白。 怎么可能只是这个class级找不到,但我所有的其他class级呢? 我的build.gradle文件: apply plugin: ‘java’ apply plugin: ‘eclipse’ apply from: ‘javafx.plugin’ sourceCompatibility = 1.8 version = ‘0.1’ jar { manifest { attributes ‘Implementation-Title’: ‘LogoffManager’, ‘Implementation-Version’: version } } repositories { mavenCentral() […]

为什么Java不支持通用Throwables?

class Bouncy extends Throwable { } // Error: the generic class Bouncy may not subclass java.lang.Throwable 为什么Java不支持通用的Throwable ? 我意识到类型擦除使某些事情变得复杂,但显然Java已经经历了很多,所以为什么不再推动它,并允许genericsThrowable s,通过全面的编译时检查潜在的问题? 我觉得类型擦除的论点相当薄弱。 目前,我们做不到: void process(List list) { } void process(List list) { } 当然,我们没有它。 我不是要求我们能够在同一个try块中catch Bouncy和Bouncy ,但是如果我们在具有严格编译时可执行规则的不相关上下文中使用它们(这几乎就是这样的话)仿制药现在正常工作),它不可行吗?

在私有实用程序类构造函数中使用的首选Throwable是什么?

Effective Java(第二版) ,第4项,讨论使用私有构造函数来强制执行非实例化。 这是本书的代码示例: public final class UtilityClass { private UtilityClass() { throw new AssertionError(); } } 但是, AssertionError似乎不适合抛出。 没有任何东西被“断言”,这就是API如何定义AssertionError的使用。 在这种情况下,通常会有不同的Throwable吗? 通常只会抛出一个带有消息的常规Exception吗? 或者为此编写自定义Exception是常见的吗? 这是非常微不足道的,但我认为从forms和标准的角度来看,我只是对它感到好奇。

与Java中的Exception vs Throwable相关联的开销

我知道 throw new Exception(); 有一个相当大的开销,因为它创建了一个完整的stackTrace等。 是否 throw new Throwable(); 出现同样的问题? 这种行为是inheritance的,还是抛出Throwable有一个较小的(o no)开销? 编辑 从分析师的角度来看,插入错误密码的用户是程序正常执行顺序的例外。 如果我有: public Session newSession() { validate_user_and_password(); } 从分析师的角度来看,抛出UserNotValidException听起来是正确的。 如果您的代码具有相当好的抽象,则返回null或0只是听起来不正确。 我只想知道我是否可以在代码中实现这一点,或者如果我不得不将其留给理论。 编程视点exception与分析师观点exception之间存在很大差异。 注意:我给出了一个非常简单而愚蠢的例子,这不是我的情况。 注2:我知道返回null将是普通的事情,但我需要有适当的抽象和OO代码,而且,就个人而言,我认为没有任何伤害。