我们最近遇到了一个Java服务器应用程序的问题,其中应用程序抛出了未捕获的错误,因为Error是Throwable的一个单独的子类,我们只捕获异常.
我们通过捕获Throwables而不是Exceptions解决了当前的问题,但是这让我想到为什么你想要捕获Exceptions而不是Throwables,因为你会错过错误.
所以,当你能捕获Throwables时,你为什么要捕捉异常呢?
鉴于: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) 我知道
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中的文件中写入错误日志或异常.我经历过Log4j.我搜索了一下,但diidnt找到了一个很好的解决方案.我写了一个简单的代码
catch (Exception e) {
PrintWriter pw = new PrintWriter(new FileOutputStream("Log"));
e.printStackTrace(pw);
}
Run Code Online (Sandbox Code Playgroud)
有没有其他方法来记录错误或异常?任何机构可以提供我与Log4j的示例?
我正在尝试使用一个简单的代码org.testng.Assert来断言2个用例.在第一个用例中,我Fail正确地声明了2个不相等的值.
但是在第二个用例中,当我在try-catch块中断言2个不相等的值时,结果总是返回为 Pass
我的代码如下:
package demo;
import org.testng.Assert;
import org.testng.annotations.Test;
public class Q43710035
{
@Test
public void test1()
{
System.out.println("Within test1");
int a = 12;
int b =20;
Assert.assertEquals(a, b);
}
@Test
public void test2()
{
System.out.println("Within test2");
int a = 12;
int b =20;
try
{
Assert.assertEquals(a, b);
}catch(Throwable t)
{
System.out.println("Exception Occurred");
}
}
}
Run Code Online (Sandbox Code Playgroud)
我得到的结果是:
Within test1
Within test2
Exception Occurred
PASSED: test2
FAILED: test1
java.lang.AssertionError: expected [20] but found [12]
at org.testng.Assert.fail(Assert.java:94) …Run Code Online (Sandbox Code Playgroud) 我不是java类型系统和异常处理方面的专家。但我发现我们应该只捕获异常而不是可抛出的异常。
这是链接: Difference Between using Throwable and Exception in a try catch
在 Vavr 的库中我找到了这个源代码:
public interface Try<T> extends Value<T>, Serializable {
long serialVersionUID = 1L;
static <T> Try<T> of(CheckedFunction0<? extends T> supplier) {
Objects.requireNonNull(supplier, "supplier is null");
try {
return new Try.Success(supplier.apply());
} catch (Throwable var2) {
return new Try.Failure(var2);
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果我将来使用这个容器,会有什么问题吗?我会错过执行“of”函数期间可能发生的一些关键异常吗?