java - 使用try-catch java

标签 java try-catch

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

这是我试图分析和理解的代码。使用 try 然后使用 catch(Exception e) 与仅使用 throwsthrow new 有什么区别?

根据我的理解,trycatch 基本上是一种通过输出消息或传递给另一个方法来处理错误的方法。但是,我认为我陷入了它的语法方面。

任何能够阐明这个概念的建设性评论或简单示例以及我书中的示例代码的情况将不胜感激。

/* 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;
 }
}

最佳答案

说明

来自Java documentation :

[The try block] contains one or more legal lines of code that could throw an exception. (The catch and finally blocks are explained in the next two subsections.)

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

当您抛出异常时,它会被嵌套在(内部)的 try-catch block 捕获。也就是说,假设已注册该异常的正确 catch block 。如果代码未包装在 try-catch block 中,则一旦抛出错误,程序就会自动关闭。在任何可能引发错误的代码或方法周围使用 try-catch,尤其是由于用户输入(在合理范围内)时。

有些异常必须捕获​​,其他异常则可以选择捕获。 (checked vs. unchecked).

当您将抛出添加到方法签名时,您是在向其他方法宣布,如果它们调用该方法,则有可能抛出已检查异常(对于未检查则没有必要)。请注意它是如何抛出而不是抛出。它不是在执行一个操作,而是描述它有时会执行一个操作。

当您不想捕获该方法内的错误,但希望允许调用您的方法的方法本身捕获错误时,可以使用此功能。

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

示例

public CircleWithException() throws InvalidRadiusException {
       this(1.0);
}

这里,CircleWithException() 有可能抛出 InvalidRadiusException(大概,this(1.0) 有时会抛出 InvalidRadiusException。)

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

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
}

正如我之前所说,异常只是扩展异常的特定类型的对象

/* 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 对象,然后抛出它:

throw new InvalidRadiusException(1.0);

关于java - 使用try-catch java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48632403/

相关文章:

c# - 为什么我无法在 Entity Framework 的 SaveChanges() 方法上捕获 SqlException

Java Hibernate,一种跟踪 native 异常的方法

java - 正确使用log4j和异常

java - 在现有的java项目中加载hibernate.cfg.xml

java - 泛型类型上限本身就是泛型

c# - 如何使用 Try 和 Catch 来设置值

javascript - JavaScript try-catch 是否忽略了预期的偶然错误的不良做法?

java - 我应该选择 i > 1 还是 i >= 1 进行随机洗牌

java - 如何使用以编程方式包含多列的 where-in 子句进行 PostgreSQL 查询?

python - 提高网页抓取的速度/性能,但有很多异常(exception)情况