[英]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.