不能抛出Exception类型的异常,异常类型必须是Throwable的子类
No exception of type Exception can be thrown, an exception type must be a subclass of Throwable
我在其他问题中搜索这个问题,但仍然没有弄清楚
Throwable 到底是什么意思。阅读一些关于它的文章(its superclas bla bla bla)但仍然不知道如何实现它。忘了说我是 java 的新手。任何建议将不胜感激:D
这是例外情况 class:
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;
}
}
这是我在其他 class 中 运行 的代码,我应该在哪里捕获我抛出的异常。
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();
}
使您的自定义异常扩展 Throwable
层次结构中的内容。
例如
// Exception here is java.lang.Exception, not the class from your example
public class MyException extends Exception {
// ...
}
在您的自定义中 class 扩展了 Throwable。它的工作
class Exception extends Throwable {
//your code
}
您必须创建一个包含所需 Constructors
的自定义 Exception
class,如下所示:
public class CustomException extends Exception {
/* Optional: Include Serial UID */
public CustomException(Throwable t) {
super(t);
}
public CustomException(int pDen, int pMes, int kDen, int kMes) {
/* Handle Info & Throw Exception */
}
}
然后就可以抛异常如下,
throw new CustomException(pDen,pMes,kDen,kMes);
请忽略建议您实施自己的 Exception
class 的答案。 Java 有自己的:java.lang.Exception
。只需使用它,并在需要时扩展它。拥有自己的 Throwable
但不从标准 Exception
扩展的情况非常罕见。
The class Exception and its subclasses are a form of Throwable
that indicates conditions that a reasonable application might want to
catch.
在大多数情况下,您的例外是以下情况之一:
- 算术异常
- ArrayIndexOutOfBoundException
- ClassNotFoundException
- IOException
- NoSuchMethodException ...
An Error is a subclass of Throwable that indicates serious problems
that a reasonable application should not try to catch.
Exception
和 Error
都是 Throwable
的子类。
如果您不仅需要捕获 Exceptions
,还需要捕获 Errors
,您应该使用 Throwable
。但是:
Most such errors are abnormal conditions. The ThreadDeath error,
though a "normal" condition, is also a subclass of Error because most
applications should not try to catch it.
如果你想捕获像 ThreadDeath
这样的错误,你可以使用 Throwable。这可能是一种非常罕见的情况。
在你的例子中,如果你只是想检查数字,你可以使用这样的东西:
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.....");
}
}
}
编写任何 Java 程序时避免此常见错误的要点:
- 确保您没有为
Exception
class. 导入任何包
- 如果您发现任何导入,请将其删除。
- 可以通过扩展Exception来实现class。
- 或者从方法中抛出一个
Exception
。
- 在创建自定义消息时使用
throw
与方法上的 throws 关键字一起抛出。
当我没有将 Exception 类型导入正在捕获它的 class 时,我遇到了这个异常
我在其他问题中搜索这个问题,但仍然没有弄清楚 Throwable 到底是什么意思。阅读一些关于它的文章(its superclas bla bla bla)但仍然不知道如何实现它。忘了说我是 java 的新手。任何建议将不胜感激:D
这是例外情况 class:
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;
}
}
这是我在其他 class 中 运行 的代码,我应该在哪里捕获我抛出的异常。
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();
}
使您的自定义异常扩展 Throwable
层次结构中的内容。
例如
// Exception here is java.lang.Exception, not the class from your example
public class MyException extends Exception {
// ...
}
在您的自定义中 class 扩展了 Throwable。它的工作
class Exception extends Throwable {
//your code
}
您必须创建一个包含所需 Constructors
的自定义 Exception
class,如下所示:
public class CustomException extends Exception {
/* Optional: Include Serial UID */
public CustomException(Throwable t) {
super(t);
}
public CustomException(int pDen, int pMes, int kDen, int kMes) {
/* Handle Info & Throw Exception */
}
}
然后就可以抛异常如下,
throw new CustomException(pDen,pMes,kDen,kMes);
请忽略建议您实施自己的 Exception
class 的答案。 Java 有自己的:java.lang.Exception
。只需使用它,并在需要时扩展它。拥有自己的 Throwable
但不从标准 Exception
扩展的情况非常罕见。
The class Exception and its subclasses are a form of Throwable that indicates conditions that a reasonable application might want to catch.
在大多数情况下,您的例外是以下情况之一:
- 算术异常
- ArrayIndexOutOfBoundException
- ClassNotFoundException
- IOException
- NoSuchMethodException ...
An Error is a subclass of Throwable that indicates serious problems that a reasonable application should not try to catch.
Exception
和 Error
都是 Throwable
的子类。
如果您不仅需要捕获 Exceptions
,还需要捕获 Errors
,您应该使用 Throwable
。但是:
Most such errors are abnormal conditions. The ThreadDeath error, though a "normal" condition, is also a subclass of Error because most applications should not try to catch it.
如果你想捕获像 ThreadDeath
这样的错误,你可以使用 Throwable。这可能是一种非常罕见的情况。
在你的例子中,如果你只是想检查数字,你可以使用这样的东西:
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.....");
}
}
}
编写任何 Java 程序时避免此常见错误的要点:
- 确保您没有为
Exception
class. 导入任何包
- 如果您发现任何导入,请将其删除。
- 可以通过扩展Exception来实现class。
- 或者从方法中抛出一个
Exception
。 - 在创建自定义消息时使用
throw
与方法上的 throws 关键字一起抛出。
当我没有将 Exception 类型导入正在捕获它的 class 时,我遇到了这个异常