标签: unchecked-exception

JVM如何处理RuntimeException(s)

在创建自定义异常时,如果我们想要创建一个已检查的 Exception,我们会扩展Exception类,对于未经检查的异常,我们会扩展RuntimeException类.我的问题是,当JVM全部是Exception类的子类时,JVM如何处理RuntimeException和Exception的子类.

java jvm exception-handling checked-exceptions unchecked-exception

5
推荐指数
1
解决办法
641
查看次数

如何判断异常是检查还是不检查?

我正在阅读 Java 中已检查与未检查异常以及何时使用每个异常:

这是底线:如果可以合理地期望客户端从异常中恢复,请将其设置为已检查异常。如果客户端无法从异常中恢复,请将其设为未经检查的异常。

客户端不能恢复的一个例子是除以零,他们可以恢复的东西是 FileNotFound 异常。不过我还没有看到区别。为什么您可以捕获一个并记录错误,但不能捕获另一个并记录错误?什么使某些东西可以合理恢复?您不能在所有情况下捕获错误(从而恢复)吗?

java exception checked-exceptions unchecked-exception

5
推荐指数
1
解决办法
77
查看次数

应该检查和处理未经检查的异常吗?

我最近一直在阅读很多关于例外的帖子,我有一个问题是应该抓住未经检查的例外.我已经读过,如果您希望应用程序从错误中恢复,请使用已检查的异常.但是,如果您无法处理已检查的异常,则将其包装到另一个已检查的异常中,以便将其传递给另一个层; 例如,你包装一个SqlException,或者你抛出一个未经检查的异常.但是,你应该捕获未经检查的异常吗?未经检查的异常是理想情况下您不检查的编程错误吗?它们应该从您的应用程序中冒出来吗?

java unchecked-exception

4
推荐指数
2
解决办法
2749
查看次数

使用静态导入时未经检查的异常,怎么来的?

使用静态导入的继承静态方法时,我遇到了一些奇怪的行为:

COM /示例/ UTIL/BaseUtil.java:

package com.example.util;

/*default*/ class BaseUtil {
    public static final void foo(){ System.out.println("foo"); }
}
Run Code Online (Sandbox Code Playgroud)

COM /示例/ UTIL/Util.java:

package com.example.util;

public final class Util extends BaseUtil{
    public static void bar(){ System.out.println("bar"); }
    //foo() will be inherited
}
Run Code Online (Sandbox Code Playgroud)

COM /示例/ UtilTest.java

package com.example;

import static com.example.util.Util.bar;
import static com.example.util.Util.foo;

public class UtilTest {
    public static void main(String[] args) {
        bar();
        foo();
    }
}
Run Code Online (Sandbox Code Playgroud)

UtilTest在未经检查的异常中运行结果!

线程"main"中的异常java.lang.IllegalAccessError:尝试从类com.example.UtilTest访问类com.example.util.BaseUtil

    at com.example.UtilTest.main(UtilTest.java:15)
Run Code Online (Sandbox Code Playgroud)

但是,如果我通过Util(没有静态导入)引用方法,一切都按预期工作:

COM /示例/ UtilTest.java

package com.example;

import com.example.util.Util; …
Run Code Online (Sandbox Code Playgroud)

java static-methods unchecked-exception

4
推荐指数
1
解决办法
155
查看次数

我应该声明一个未经检查的例外吗?

我有一个方法调用另一个方法,如下所示:

public void m1() {
    m2(10);
}

public void m2(int v) {
    if(v < 10)
        throw new MyException();
}

public class MyException extends RuntimeException{ }
Run Code Online (Sandbox Code Playgroud)

现在,我想通知将要使用m1()它的客户MyException.如果我这样宣布它是否可以:

public void m1() throws MyException{
    m2(10);
}
Run Code Online (Sandbox Code Playgroud)

我不确定它,因为我曾经使用throws带有检查异常的声明.与未经检查的人一起这样做是否常见?

java exception unchecked-exception

4
推荐指数
1
解决办法
100
查看次数

如何在 Kotlin 中测试预期的未检查异常?

我正在尝试在 Kotlin 中编写一个测试,以确保在特定情况下抛出未经检查的异常。

我正在尝试这样使用org.junit.jupiter.api.Assertions.assertThrows

assertThrows(MyRuntimeException::class, Executable { myMethodThatThrowsThatException() })
Run Code Online (Sandbox Code Playgroud)

当我尝试这个时,我得到一个

类型推断失败编译器错误

因为我的Exceptionin not a CheckedExceptionbut a RuntimeException。有没有什么好方法来测试这种行为而不进行幼稚的尝试捕获?

testing junit exception kotlin unchecked-exception

3
推荐指数
1
解决办法
2949
查看次数

始终使用选中的例外

我最近一直在重新考虑一些Java代码......我发现有很多RuntimeExceptions被抛出(即未经检查的异常).我创建了自己的已检查异常,并用我自己的异常替换了这些RuntimeExceptions的每个实例.然后,这迫使我检查异常.

有了这个,我发现检查异常更好,因为另一个开发人员将确保处理异常...而不是程序只是吃异常而不向用户显示任何内容.

我已经阅读了许多关于未经检查和已检查异常的文章.但是,我仍然觉得我更多地检查了异常,因为它减少了人为错误.

编程有多糟糕,主要是使用检查异常?有没有其他人觉得他们喜欢检查异常比未经检查的异常更多?

java exception checked-exceptions unchecked-exception

2
推荐指数
1
解决办法
725
查看次数

Java未经检查的arraylist转换

任何人都可以告诉我如何以正确的方式创建阵列arraylist?

.\File.java:5: warning: [unchecked] unchecked conversion
        ArrayList<myObjectType> myParkingLotArray[] = new ArrayList[3];
                                                 ^
  required: ArrayList<Vehicle>[]
  found:    ArrayList[]
1 warning
Run Code Online (Sandbox Code Playgroud)

我想要一个存储3个arraylists的arry(或任何其他解决方案).如何将对象添加到arrylists也很高兴知道.

ParentArray

  1. ChildArrayList1
  2. ChildArrayList2
  3. ChildArrayList3

我很高兴任何帮助

解:

public class myClass {
  ArrayList<myObjectType>[] myArryName= new ArrayList[3];

  public void addLists() {
    myArryName[0] =  new ArrayList<myObjectType>();
    myArryName[1] =  new ArrayList<myObjectType>();
    myArryName[2] =  new ArrayList<myObjectType>();
  }
}
Run Code Online (Sandbox Code Playgroud)

警告可以被忽略或抑制.

java arraylist type-conversion unchecked unchecked-exception

2
推荐指数
1
解决办法
2213
查看次数

Java方法包含另一个抛出异常的方法

我有公共方法add(String)调用私有方法inspectSequence(String)来检查String是否有效.

如果传递String有效,则此方法返回数组,如果它无效则抛出方法IllegalArgumentException

代码是下一个

public void add(String sequence) throws IllegalArgumentException{
  inspectSequence(sequence);
}

private int[] inspectSequence(String sequence){
  int[] array;
  //some actions
  if(<some condition>) throw new IllegalArgumentException("description");
  return array;
}
Run Code Online (Sandbox Code Playgroud)

所以在情况下,当无效String传递给add方法输出时,下一步是:

java.lang.IllegalArgumentException: description
at inspectSequence
at add
Run Code Online (Sandbox Code Playgroud)

但是我不希望用户知道私有inspectSequence方法,因为这是实现细节,对吧?

那么在那种情况下我能做些什么呢?在这里抛出未经检查的异常是一个好主意吗?

而且是一个好主意,抛出异常中inspectSequence的方法,或者我应该返回null提供时String是无效的,然后检查返回结果add的方法,并根据它扔还是不扔异常?

java unchecked-exception

1
推荐指数
1
解决办法
1678
查看次数

Guava Preconditions RuntimeExceptions处理

据我所知,在更改某些对象状态之前,我们使用Guava Preconditions快速失败(是stackoverflow的一个很好的答案).这很好.但是它会抛出运行时异常,这不是应用程序用户最喜欢的异常(500错误等等......).所以我需要你在设计方面给我一些帮助.

我有一个声明许多方法的接口.每个方法都有必须控制的参数(例如:not null).所以在实现类中我使用如下指令:

Preconditions.checkNotNull(fooObj);
Run Code Online (Sandbox Code Playgroud)

但是,调用此API的程序可能会因运行时异常而崩溃,在本例中为NullPointerException.

那么你如何处理这些未经检查的异常呢?

谢谢.

--------编辑应用层:

  • 数据访问层

  • API声明交换DTO的方法

  • 使用Guava实现API并检查参数的过程

  • Web服务取决于流程层

java exception preconditions guava unchecked-exception

0
推荐指数
1
解决办法
345
查看次数

是否可以在没有任何 athrow 指令的情况下隐式抛出已检查的异常?

在 Java 中,检查异常和未检查异常都可以显式抛出,即通过throw语句抛出。此外,未经检查的异常如ArithmeticExceptionOutOfMemoryError可以在没有任何显式throw声明的情况下触发,如下所示:

public static void throwArithmeticException() {
    int i = 1;
    int j = i / 0;
}

public static void throwOutOfMemoryError() {
    List<Object> list = new ArrayList<>();
    while(true) {
        list.add(new Object());
    }
}
Run Code Online (Sandbox Code Playgroud)

所以我的问题是,有没有什么方法可以触发检查的异常,例如IOException隐式,即不使用任何throw语句?

java exception checked-exceptions unchecked-exception

0
推荐指数
1
解决办法
68
查看次数