我有时会看到
try {
} catch(Throwable e) {
}
Run Code Online (Sandbox Code Playgroud)
而有时
try {
} catch(Exception e) {
}
Run Code Online (Sandbox Code Playgroud)
有什么不同
我正在尝试更多地了解基本Java和不同类型的Throwables,有人能告诉我异常和错误之间的区别吗?
赶上是不好的做法Throwable
?
例如这样的事情:
try {
// Some code
} catch(Throwable e) {
// handle the exception
}
Run Code Online (Sandbox Code Playgroud)
这是一种不好的做法还是我们应该尽可能具体?
可以任你解释的区别是什么之间throw
,throws
以及Throwable
和什么时候使用?
鉴于:Throwable
是Exception
超级.
当我编写自己的"例外"读课文,我看到的例子Throwable
中所使用catch
的块和其他经文显示new Exception()
在正在使用catch
块.我还没有看到何时应该使用每个的解释.
我的问题是,什么时候应该Throwable
使用,什么时候应该new Exception()
使用?
使用以下任一内部catch
或else
块内:
throw throwable;
Run Code Online (Sandbox Code Playgroud)
要么
throw new Exception();
Run Code Online (Sandbox Code Playgroud) 我有以下测试:
@Test(expected = IllegalStateException.class)
public void testKey() {
int key = 1;
this.finder(key);
}
Run Code Online (Sandbox Code Playgroud)
但是JUnit报告说,测试失败了,尽管它正如预期的那样抛出了IllegalStateException
.
我是否必须配置其他内容才能运行?
我现在正在进行测试
@RunWith(Suite.class)
@SuiteClasses(Test.class)
public class TestSuite {
}
Run Code Online (Sandbox Code Playgroud)
就像在这个问题中,但仍然没有得到理想的结果.
当我删除test
前缀时,我仍然收到错误.
我得说我用Eclipse运行这些测试,但它配置为使用JUnit 4 Runner.
如何使用 java.util.Logger 打印整个堆栈跟踪?(没有恼人的Netbeans).
该问题应该最初指定保留在 Java SE中.省略这个要求对我来说是一个错误.
-do-compile:
[mkdir] Created dir: /home/thufir/NetBeansProjects/rainmaker/build/empty
[mkdir] Created dir: /home/thufir/NetBeansProjects/rainmaker/build/generated-sources/ap-source-output
[javac] Compiling 13 source files to /home/thufir/NetBeansProjects/rainmaker/build/classes
[javac] /home/thufir/NetBeansProjects/rainmaker/src/model/TelnetEventProcessor.java:44: error: 'void' type not allowed here
[javac] log.severe(npe.printStackTrace(System.out));
[javac] ^
[javac] 1 error
BUILD FAILED
Run Code Online (Sandbox Code Playgroud)
代码有错误:
package model;
import java.util.Observable;
import java.util.logging.Logger;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class TelnetEventProcessor extends Observable {
private static Logger log = Logger.getLogger(TelnetEventProcessor.class.getName());
private String string = null;
public TelnetEventProcessor() {
}
private void stripAnsiColors() {
Pattern regex = …
Run Code Online (Sandbox Code Playgroud) java nullpointerexception throwable java.util.logging printstacktrace
Java允许您创建一个全新的子类型Throwable
,例如:
public class FlyingPig extends Throwable { ... }
Run Code Online (Sandbox Code Playgroud)
现在,很少,我可以这样做:
throw new FlyingPig("Oink!");
Run Code Online (Sandbox Code Playgroud)
当然还有其他地方:
try { ... } catch (FlyingPig porky) { ... }
Run Code Online (Sandbox Code Playgroud)
我的问题是:
extends Throwable
?我真的想做这样的事情的场景具有以下属性:
Error
,而且它什么也没Exception
发生.
catch
等待它.它不会"滑倒"过去.它不会"逃避"任何catch
一般Exception
和/或任何尝试Error
.所以也许我现在很清楚我想说的FlyingPig
是:这是一个详尽的递归搜索的结果.
要搜索的对象存在:它只是在大海中找到它的问题,即搜索空间.搜索过程很长,因此相对昂贵的异常处理成本可以忽略不计.事实上,传统的控制流构造使用boolean isFound
标志的替代方案可能更昂贵,因为必须在整个搜索过程中连续检查,最有可能在递归的每个级别.此检查将在99.99%的时间内失败,但绝对有必要传播终止条件.在某种程度上,虽然有效,但检查效率低下!
通过简单的 …
Effective Java(第二版),第4项,讨论使用私有构造函数来强制执行非实例化.这是本书中的代码示例:
public final class UtilityClass {
private UtilityClass() {
throw new AssertionError();
}
}
Run Code Online (Sandbox Code Playgroud)
然而,AssertionError
似乎不是正确的抛出.没有任何东西被"断言",这就是API如何定义AssertionError的使用.
Throwable
在这种情况下,通常会有不同的情况吗?通常只会抛出一个Exception
带有消息的将军吗?或者为此编写自定义是否常见Exception
?
这是非常微不足道的,但我认为从形式和标准的角度来看,我只是对它感到好奇.
我知道
throw new Exception();
Run Code Online (Sandbox Code Playgroud)
有一个相当大的开销,因为它创建了一个完整的堆栈跟踪等
是否
throw new Throwable();
Run Code Online (Sandbox Code Playgroud)
出现同样的问题?这种行为是继承的,还是抛出Throwable有一个较小的(o no)开销?
编辑
从分析师的角度来看,插入错误密码的用户是程序正常执行顺序的例外.所以,如果我有:
public Session newSession() {
validate_user_and_password();
}
Run Code Online (Sandbox Code Playgroud)
从分析师的角度来看,抛出UserNotValidException听起来是正确的.如果您的代码具有相当好的抽象,则
返回null
或者0
听起来不正确.我只是想知道我是否可以在代码中实现这一点,或者如果我不得不将它留给理论.
编程视点异常与分析师视点异常之间存在很大差异.
注意:我给出了一个非常简单而愚蠢的例子,这不是我的情况.
注2:我知道返回null
将是普通的事情,但我需要有适当的抽象和OO代码,而且,就个人而言,我认为没有任何损害.
java ×10
throwable ×10
exception ×5
annotations ×1
coding-style ×1
junit ×1
throw ×1
throws ×1