繁体   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