Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中是否有一种全局处理异常的方法?_Java_Inheritance_Exception Handling - Fatal编程技术网

在Java中是否有一种全局处理异常的方法?

在Java中是否有一种全局处理异常的方法?,java,inheritance,exception-handling,Java,Inheritance,Exception Handling,在C#中,我们可以调用一个方法,该方法接受一个函数或一个操作,并在try-catch中执行该函数或操作。通过这样做,我们可以在一个地方处理所有异常,使其更易于管理 因为Java没有委托,所以不能以同样的方式执行。还有别的选择吗 我们有两个类:A和B。B是A的子类。B中的所有方法都覆盖A中的方法 我必须在B中的方法中处理所有异常,还是有办法在a中处理它,然后在B中重新调用?我的假设是,我必须在B中处理这一切,但我想确认这一点。C#委托对您描述的内容不是必不可少的,它们只是传递对任意函数引用的另一

在C#中,我们可以调用一个方法,该方法接受一个函数或一个操作,并在try-catch中执行该函数或操作。通过这样做,我们可以在一个地方处理所有异常,使其更易于管理

因为Java没有委托,所以不能以同样的方式执行。还有别的选择吗


我们有两个类:A和B。B是A的子类。B中的所有方法都覆盖A中的方法

我必须在B中的方法中处理所有异常,还是有办法在a中处理它,然后在B中重新调用?我的假设是,我必须在B中处理这一切,但我想确认这一点。

C#委托对您描述的内容不是必不可少的,它们只是传递对任意函数引用的另一种方式。普通对象也通过多态性特性提供了同样的功能

在经典Java中,可以传递
Runnable
Callable
的实现,并且可以提供匿名类的实现。在Java8中,您可以提供具有lambda语法的实现

public static void runWithExceptionHandling(RunnableExc r) {
   try { r.run(); } 
   catch (xxxException e) { ... }
}

public static void main(String[] args) {
   runWithExceptionHandling(() -> Files.readAllLines(Paths.get("/x/y"), UTF_8));
   runWithExceptionHandling(() -> { throw new xxxException(); });
}

interface RunnableExc { void run() throws Exception; }

setDefaultUncaughtExceptionHandler(UncaughtExceptionHandler eh)大致完成您要查找的任务

什么?请出示相关的C#代码。委托与异常处理有什么关系?请考虑将函数或操作作为参数的方法。在该方法中,它在try-catch语句中执行函数/操作。因此,函数/操作中的所有重试异常都可以用这个方法处理。为什么不能用Java中的
函数
可运行的
可调用的
来处理呢?我不知道我可以,这就是为什么我问。代表们与此完全无关。lambda语法也是如此。这只是一个设计问题。同样值得指出的是,如果您愿意,您可以用同样的方式组织所有异常处理代码(除了异常抛出代码)。