首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >不能引发异常类型的异常,异常类型必须是Throwable的子类

不能引发异常类型的异常,异常类型必须是Throwable的子类
EN

Stack Overflow用户
提问于 2018-10-26 10:38:46
回答 7查看 28.9K关注 0票数 2

我在其他问题上了解到了这个问题,但仍然没有弄清楚什么才是真正意义上的“Throwable”。读几篇关于它的文章(它的“蓝蓝”),但仍然不知道如何实现它。忘了提一下我是java新手。如有任何意见,我们将欣然接受:

下面是异常类:

代码语言:javascript
运行
复制
class Exception {
private int pDen;
private int pMes;
private int kDen;
private int kMes;

public Exception(int pDen, int pMes, int kDen, int kMes) {
    super();
    this.pDen = pDen;
    this.pMes = pMes;
    this.kDen = kDen;
    this.kMes = kMes;
}
public void message()
{
    System.out.println("Isklucok");
}
public void promena()
{
    int tmpDen = 0;
    int tmpMes = 0;
    tmpDen = pDen;
    pDen = kDen;
    kDen = tmpDen;
    tmpMes = pMes;
    pMes = kMes;
    kMes = tmpMes;
}

}

下面是我在其他类中运行的代码,在这些类中,我应该捕获抛出的异常。

代码语言:javascript
运行
复制
try {
        if(pMes > kMes)
        {
            throw new Exception(pDen,pMes,kDen,kMes);
        }
        else if(pMes == kMes)
            if(pDen > kDen)
            {
                throw new Exception(pDen,pMes,kDen,kMes);
            }
    }
    catch(Exception e)
    {
        e.message();
        e.promena();
    }
EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2018-10-26 10:40:27

使您的自定义异常从Throwable层次结构中扩展。

例如

代码语言:javascript
运行
复制
// Exception here is java.lang.Exception, not the class from your example
public class MyException extends Exception {

    // ...

}
票数 6
EN

Stack Overflow用户

发布于 2018-10-26 11:39:35

类异常及其子类是Throwable的一种形式,它指示合理的应用程序可能希望捕获的条件。

在大多数情况下,您的例外情况如下:

  • 算术异常
  • ArrayIndexOutOfBoundException
  • ClassNotFoundException
  • IOException
  • NoSuchMethodException ...

错误是Throwable的子类,它指示合理的应用程序不应该试图捕捉的严重问题。

ExceptionError都是Throwable的子类。

如果您不仅需要捕获Exceptions,还需要捕获Errors,则应该使用Throwable。但是:

大多数这样的错误都是不正常的。ThreadDeath错误虽然是“正常”条件,但也是错误的子类,因为大多数应用程序都不应该试图捕捉它。

如果您想捕获像ThreadDeath错误这样的东西,可以使用Throwable。这可能是一种非常罕见的情况。

在您的示例中,如果您只想检查数字,可以使用以下内容:

代码语言:javascript
运行
复制
public static void check(int pDen, int pMes, int kDen, int kMes) {

    if (pMes > kMes) {
        throw new IllegalArgumentException ("Your message.....");
    } else if (pMes == kMes) {
        if (pDen > kDen) {
            throw new IllegalArgumentException ("Your message.....");
        }
    }
}
票数 3
EN

Stack Overflow用户

发布于 2018-10-26 10:46:29

请忽略那些建议您实现自己的Exception类的答案。Java有自己的:java.lang.Exception。只要使用它,如果需要的话可以扩展它。有自己的Throwable,但不是从标准Exception扩展的情况是非常罕见的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53006884

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档