首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用try-catch java

使用try-catch java
EN

Stack Overflow用户
提问于 2014-03-25 19:23:56
回答 4查看 28K关注 0票数 5

因此,我刚刚了解了Java中的try-catch语句的基本知识,我仍然对语法中的一些差异感到困惑。

下面是我要分析和理解的代码。使用trycatch(Exception e)与只说throwsthrow new有什么区别?

据我理解,trycatch基本上是一种通过输出消息或传递给另一种方法来处理错误的方法。但是,我认为我仍然停留在它的语法方面。

任何建设性的意见或简单的例子,澄清这一概念,以及如何与样例代码从我的书将不胜感激。

代码语言:javascript
复制
/* Invalid radius class that contains error code */
public class InvalidRadiusException extends Exception {
     private double radius;

/** Construct an exception */
public InvalidRadiusException(double radius) {
       super("Invalid radius " + radius);
       this.radius = radius;
}

/** Return the radius */
public double getRadius() {
    return radius;
 }
}


public class CircleWithException {
/** The radius of the circle */

private double radius;

/** The number of the objects created */
private static int numberOfObjects = 0;

/** Construct a circle with radius 1 */
public CircleWithException() throws InvalidRadiusException {
       this(1.0);
  }

/** Construct a circle with a specified radius */
public CircleWithException(double newRadius) throws InvalidRadiusException {
          setRadius(newRadius);
          numberOfObjects++;
}

/** Return radius */
public double getRadius() {
     return radius;
}

/** Set a new radius */
public void setRadius(double newRadius)
    throws InvalidRadiusException {
if (newRadius >= 0)
  radius =  newRadius;
else
  throw new InvalidRadiusException(newRadius);
}

/** Return numberOfObjects */
public static int getNumberOfObjects() {
      return numberOfObjects;
}

/** Return the area of this circle */
public double findArea() {
    return radius * radius * 3.14159;
 }
}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-03-25 19:26:41

解释

来自Java文档

try块包含一个或多个合法代码行,这些代码行可以抛出异常。(在接下来的两个小节中将解释捕获块和最终块。)

异常是一种特殊的对象。编写new Exception()时,您正在创建一个新的异常对象。当您编写throw new Exception()时,您正在创建一个新的错误,然后将它抛到最近的try-catch块中,中止其余的代码。

当抛出异常时,它会通过在E 220中嵌套的try-catch块(在E 220中)捕获捕获。也就是说,假设为该异常注册了适当的catch块。如果代码没有包装在一个try-catch块中,那么一旦抛出错误,程序就会自动关闭。在任何可能抛出错误的代码或方法周围使用尝试捕获,特别是因为用户输入(在合理范围内)。

有些例外必须被抓住,而另一些则是可选的。(检查与未检查)。

当您将throws 添加到方法签名中时,您将向其他方法宣布,如果它们调用该方法,它有可能引发选中的异常(不需要未经检查)。注意它是throws而不是throw。它不是在做一个动作,而是描述它有时会做一个动作。

如果不希望捕获该方法中的错误,但希望允许调用方法的方法自己捕获错误,则可以使用此功能。

异常是使程序对意外或无效情况作出一致响应的一种方法,在需要用户输入时特别有用,尽管它在其他情况(如文件输入/输出)中也很有用。

示例

代码语言:javascript
复制
public CircleWithException() throws InvalidRadiusException {
       this(1.0);
}

在这里,CircleWithException()可能抛出一个InvalidRadiusException (想必,这个(1.0)有时会抛出一个InvalidRadiusException)。

调用此方法的代码应该有:

代码语言:javascript
复制
try {
    new CircleWithException(); // This calls the method above
} catch (InvalidRadiusException e) { // The object "e" is the exception object that was thrown.
    // this is where you handle it if an error occurs
}

正如我前面所说的,Exception异常只是扩展的一种特定对象类型。

代码语言:javascript
复制
/* Invalid radius class that contains error code */
public class InvalidRadiusException extends Exception {
     private double radius;

/** Construct an exception */
public InvalidRadiusException(double radius) {
       super("Invalid radius " + radius);
       this.radius = radius;
}

/** Return the radius */
public double getRadius() {
    return radius;
 }
}

上述代码定义了特定于您的程序/应用程序的一种新的异常类型。Java标准库中有许多预定义的异常,但通常需要创建自己的异常。

要抛出此异常,首先创建一个InvalidRadiusException对象,然后抛出它:

代码语言:javascript
复制
throw new InvalidRadiusException(1.0);
票数 8
EN

Stack Overflow用户

发布于 2014-03-25 19:30:51

如果不能在方法内处理异常,则可以声明一个方法来抛出异常(或者不方便)。

在您的示例中,您要在构造函数中调用方法setRadius。如果认为在构造函数中处理异常(由setRadius抛出)很方便,则可以使用try-catch子句:

代码语言:javascript
复制
public CircleWithException(double newRadius) throws InvalidRadiusException {
    try {
        setRadius(newRadius);
        numberOfObjects++;
    } catch (InvalidRadiusException e) {
        setRadius(0); // for example
    }
}

如果抛出异常,catch块包含要执行的操作。在本例中,我将半径设置为0,但您可以更改它。

记住,它取决于您的类实现以及您希望它们如何工作。如果不希望构造函数处理此异常,则可以抛出它(正如您已经在做的那样),并在其他方法中处理它。

票数 3
EN

Stack Overflow用户

发布于 2014-03-25 19:30:57

抛出”是一个声明,表示一个方法将抛出某些异常。这是由java编译器对已检查的异常强制执行的,而不是针对错误或未检查的异常。

抛出新”是java中的两个关键字,因此我们可以将其分解.

  • 抛出”是抛出异常的操作符。
  • " new “是创建对象的新实例的操作符。

"try“块允许您执行声明抛出异常的方法,这是使用" catch”子句的地方,以便捕获抛出的异常。

此外,还有一个try-with-resources块,您可以使用try块对实现AutoCloseable,的可消耗资源(例如流)进行操作,然后关闭它。

对于一个try块也有“finally”子句,它允许您执行清除或必须在try块之后执行的任何其他方法,而不管是否发生异常。

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

https://stackoverflow.com/questions/22644397

复制
相关文章

相似问题

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