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