簡體   English   中英

如何在Java中的方法主體外部處理異常形式?

[英]How can I handle an exception form outside method body in java?

考慮以下代碼:

public class A
{
   static final List<Integer> list = new ArrayList<>();
}

上面的代碼似乎工作正常。 但是,當我使用以下命令時:

public class A
{
   static final ServerSocket ss = new ServerSocket(6666);
}

在這里,我看到了IOException類型的未處理異常。 我嘗試了try-catch塊並拋出關鍵字。 通過使用以上兩種方法,我無法解決此問題。 他們有可能工作,但不知道如何工作。 有什么辦法可以處理這個異常? 當前正在使用JDK 7。

提供方法

您可以使用靜態私有方法創建ServerSocket ,並在該方法內部可以處理異常並執行所需的操作。

public class A
    static final ServerSocket ss = createServerSocket();

    private static ServerSocket createServerSocket() {
        try {
            return new ServerSocket(6666);
        } catch (IOException e) {
            throw new RuntimeException();
        }
    }
}

靜態塊

另一種方法是使用靜態塊。 然后您的代碼可能看起來像這樣。

public class A {
    static final ServerSocket ss;

    static {
        try {
            ss = new ServerSocket(6666);
        } catch (IOException e) {
            throw new RuntimeException();
        }
    }
}

有多種方法可以執行此操作,但是最好的方法是使用init方法,因此您可以處理異常,並且代碼可重復使用。

因此,只需在您的類中定義一個靜態init方法

public class A{
   static ServerSocket ss;

   public static void init(int port) throws IOException{
      ss = new ServerSocket(port);
   }
}

該代碼使您可以通過將異常提供給更高的實例(調用方)來處理該異常,並允許您在另一個程序中重用該代碼(端口號不固定)。

另一種方法是帶有內部異常處理的靜態塊,使用它不是一個好主意,因為它很難維護並且異常處理非常困難

static {
   try {
      ss = new ServerSocket(6666);
   } catch (IOException e) {
     e.printStackTrace();
   }
}

也可以看看:

http://docs.oracle.com/javase/8/docs/api/java/lang/ExceptionInInitializerError.html

使用靜態初始化塊來捕獲這樣的異常:

public class A {
    static final ServerSocket ss;

    static {
        try {
            ss = new ServerSocket(6666);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM