举报投诉联系我们 手机版 热门标签 VUE中文网
您的位置:VUE中文网 > java异常使用场景 Java 异常使用

java异常使用场景 Java 异常使用

2023-05-08 14:17 Java教程

java异常使用场景 Java 异常使用

java异常使用场景

Java异常是一种特殊的程序错误,它可以在运行时发生,并且可以被捕获和处理。它们是由Java虚拟机(JVM)抛出的,并且可以通过使用try-catch块来处理。

Java异常的使用场景包括:

1. 当程序尝试执行不允许的操作时,例如尝试访问不存在的文件或数组中不存在的元素时。
2. 当程序尝试执行一些无效的操作时,例如尝试将字符串转换为数字时。
3. 当程序尝试执行一些不安全的操作时,例如尝试分配内存大于可用内存量时。
4. 当系统出现意外情况或错误时,例如当文件损坏或未能正常加载时。
5. 在多线程应用中,当一个线程尝试对另一个正在运行中的对象进行修改或删除时。
6. 在数据库应用中,当SQL命令出错或者数据库未能正常连接时。 

Java 异常使用

Java面向对象的设计 - Java异常使用

访问线程的堆栈

以下代码显示了如何获取线程的堆栈帧。

Throwable对象在创建线程的点处捕获线程的堆栈。

public class Main {
  public static void main(String[] args) {
    m1();
  }

  public static void m1() {
    m2();
  }

  public static void m2() {
    m3();
  }
  public static void m3() {
    Throwable t = new Throwable();
    StackTraceElement[] frames = t.getStackTrace();
    printStackDetails(frames);
  }
  public static void printStackDetails(StackTraceElement[] frames) {
    System.out.println("Frame count: " + frames.length);
    for (int i = 0; i < frames.length; i++) {
      int frameIndex = i; // i = 0 means top frame
      System.out.println("Frame Index: " + frameIndex);
      System.out.println("File Name: " + frames[i].getFileName());
      System.out.println("Class Name: " + frames[i].getClassName());
      System.out.println("Method Name: " + frames[i].getMethodName());
      System.out.println("Line Number: " + frames[i].getLineNumber());
    }
  }
}

上面的代码生成以下结果。

try-with-resources块

Java 7添加了一个名为try-with-resources的新结构。

使用Java 7中的新的try-with-resources构造,上面的代码可以写成

try (AnyResource aRes = create the resource...) {
    // Work with the resource here. 
    // The resource will be  closed automatically.
}

当程序退出构造时,try-with-resources构造自动关闭资源。

资源尝试构造可以具有一个或多个catch块和/或finally块。

我们可以在try-with-resources块中指定多个资源。两个资源必须用分号分隔。

最后一个资源不能后跟分号。

以下代码显示了try-with-resources使用一个和多个资源的一些用法:

try (AnyResource  aRes1  = getResource1())  {
    // Use aRes1  here
}

try (AnyResource  aRes1  = getResource1(); AnyResource  aRes2  = getResource2())  {
    // Use aRes1  and  aRes2  here
}

我们在try-with-resources中指定的资源是隐式最终的。

在try-with-resources中的资源必须是java.lang.AutoCloseable类型。

Java 7添加了AutoCloseable接口,它有一个close()方法。

当程序退出try-with-resources块时,将自动调用所有资源的close()方法。

在多个资源的情况下,按照指定资源的相反顺序调用close()方法。

class MyResource implements AutoCloseable {

  public MyResource() {
    System.out.println("Creating MyResource.");
  }
  @Override
  public void close() {

    System.out.println("Closing  MyResource...");
  }
}

public class Main {
  public static void main(String[] args) {
    try (MyResource mr = new MyResource();
        MyResource mr2 = new MyResource()) {

    }
  }
}

上面的代码生成以下结果。

Multi-Catch块

Java 7增加了对多catch块的支持,以便在catch块中处理多种类型的异常。

我们可以在multi-catch块中指定多个异常类型。多个异常由竖线(|)分隔。

捕获三个异常:Exception1,Exception2和Exception3。

try  {
    // May  throw  Exception1, Exception2, or  Exception3
}
catch (Exception1 | Exception2 | Exception3  e)  {
    // Handle  Exception1, Exception2, and  Exception3
}

在multi-catch块中,不允许有通过子类化相关的替代异常。

例如,不允许以下multi-catch块,因为Exception1和Exception2是Throwable的子类:

try  {
    // May  throw  Exception1, Exception2, or  Exception3
}
catch (Exception1 | Exception2 | Throwable    e)  {
    // Handle  Exceptions here
}
阅读全文
以上是VUE中文网为你收集整理的java异常使用场景 Java 异常使用全部内容。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
相关文章
© 2024 VUE中文网 vue88.com 版权所有 联系我们