相关疑难解决方法(0)

为什么不允许在Java实例初始化块中抛出异常?

当我尝试在实例初始化(而不是类初始化)块中抛出异常时,我得到错误:

initializer must be able to complete normally
Run Code Online (Sandbox Code Playgroud)

尽管Java本身就是这样,为什么不允许这样做?

以下示例创建了四个类.A由于ArithmeticException ,该类在实例化期间失败.这可以用和处理catch.B与NullPointerException失败的相同.但是当我尝试自己抛出一个NullPointerException时,因为在C程序中没有编译.当我尝试定义自己的RuntimeException时,我得到了同样的错误D.所以:

我怎么能像Java一样做?

// -*- compile-command: "javac expr.java && java expr"; -*-

class expr
{
    class A
    {
        int y;
        {{ y = 0 / 0; }}
    }

    class B
    {
        Integer x = null;
        int y;
        {{ y = x.intValue(); }}
    }

    class C
    {
        {{ throw new NullPointerException(); }}
    }

    class Rex extends RuntimeException {}

    class D
    {
        {{ …
Run Code Online (Sandbox Code Playgroud)

java

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

静态代码块可以抛出异常吗?

在假设的情况下,我有一个这样的课:

import java.io.File;
import java.util.Scanner;
class X
{
    static Scanner scanner;
    static
    {
        scanner = new Scanner(new File("X.txt"));
    }
}
Run Code Online (Sandbox Code Playgroud)

在编译时,我明白了

未报告的例外java.io.FileNotFoundException; 必须被抓住或宣布被抛出

因为public Scanner(File source) throws FileNotFoundException.

要解决这个问题,我可以scanner = new...在try/catch语句中添加一行:

    static
    {
        try
        {
            scanner = new Scanner(new File("X.txt"));
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }
Run Code Online (Sandbox Code Playgroud)

但是,我有什么方法可以做到这样的事情:

    static throws java.io.FileNotFoundException
    {
        scanner = new Scanner(new File("X.txt"));
    }
Run Code Online (Sandbox Code Playgroud)

这是一个假设的情况.请不要说"那你为什么要那样做?" 或者"这是制作扫描仪的更好方法!"

java static static-block try-catch throws

8
推荐指数
2
解决办法
3522
查看次数

在静态初始化块中使用 try catch

我不会抛出任何异常static

static 
{
    try
    {
        int number = Integer.parseInt("2a");
    }
    catch (NumberFormatException e)
    {
        //log
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么在这种情况下使用 try 和 catch 被认为是错误的?

java

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

标签 统计

java ×3

static ×1

static-block ×1

throws ×1

try-catch ×1