Java中的异常是指在程序运行时发生的一些错误或者异常情况。这些异常可能是由于编程错误、系统错误或者用户输入错误等引起的。为了让程序更加健壮和容错,Java提供了异常处理机制,允许程序在发生异常时进行捕获、处理和恢复。
运行时异常可以在代码编写时不用显式地处理,因为Java虚拟机会自动进行处理。而非运行时异常则必须在代码中进行显式的处理,否则会导致程序的终止。
try、catch、finally。try块中包含可能会出现异常的代码,catch块中处理异常,finally块中释放资源。
try
代码块包含可能会抛出异常的代码,当异常发生时,程序会跳转到相应的catch
代码块中,进行异常处理。
遇到困难不要怕,放手去try然后catch吧!!!( /^ω^)/♪♪
举个例子:
public class Review_exception {
public static void main(String[] args) {
method();
}
public static void method() {
int a = new Scanner(System.in).nextInt();
int b = new Scanner(System.in).nextInt();
System.out.println(a / b);
}
}
(上图中定义了一个静态方法 method()
,其中通过 Scanner
类从标准输入读取两个整数 a
和 b
,然后将它们相除的结果输出到标准输出。)
我们先搞出一个异常看看。
2/0 将0作为除数
抛出 java.lang.ArithmeticException
异常(异常的名称/类型)
异常的原因 /by zero
异常的位置(java:12 java:5)可以帮助开发者快速定位问题所在。
public static void method(){
try {int a = new Scanner(System.in).nextInt();
int b = new Scanner(System.in).nextInt();
System.out.println(a / b);}
catch(ArithmeticException aaa){
System.out.println("除数不能为0");
}
}
}
再次提醒格式!//try里面放出现异常的代码
//catch圆括号里放异常类型及名称
//catch花括号里面放你的处理方式
在这个修正后的代码中,我们将method()
方法中的try-catch
语句进行了修正。try
代码块中包含需要捕获异常的代码,即通过Scanner
类从标准输入读取两个整数,然后进行除法运算。如果运算过程中出现除数为零的情况,就会抛出ArithmeticException
异常,此时程序会跳转到catch
代码块中,输出一条提示信息。
如果我们觉得异常的类型也太多了,就可以用所有异常类的超类Exception,
因此使用Exception作为catch块的参数可以处理所有可能出现的异常。这也是多态的一个应用,即在catch块中不关心子类的类型,只要是Exception异常都可以被接收和处理。
public static void method(){
try {int a = new Scanner(System.in).nextInt();
int b = new Scanner(System.in).nextInt();
System.out.println(a / b);}
catch(Exception aaa){
System.out.println("除数不能为0");
}
}
Java中的Throwable类提供了一个printStackTrace()方法,可以打印出异常的完整堆栈信息,包括异常的类型、消息、异常出现的位置以及异常发生时调用栈的信息。这个方法会在控制台输出异常的完整信息,便于我们查看异常的类型和异常发生时的调用栈,从而更好地定位和解决问题。
public static void method(){
try {int a = new Scanner(System.in).nextInt();
int b = new Scanner(System.in).nextInt();
System.out.println(a / b);}
catch(Exception aaa){
System.out.println("除数不能为0");
aaa.printStackTrace();
}
}
如图,在控制台输出了异常的完整信息!
在Java中,finally语句块用于定义一段无论是否发生异常都需要执行的代码。通常,我们将需要在程序结束前进行清理工作的代码放在finally语句块中,以确保这些代码在任何情况下都会被执行。
public static void method(){
try {int a = new Scanner(System.in).nextInt();
int b = new Scanner(System.in).nextInt();
System.out.println(a / b);
}
catch(Exception aaa){
System.out.println("除数不能为0");
}finally{
System.out.println("释放资源");
}
}
finally语句块的执行流程如下:
总之流程就是:
总之,finally语句块是用来执行一些必须要做的操作,无论是否出现异常,都会被执行。因此,finally语句块通常被用来进行资源的释放、清理等操作,以保证程序的正确性和可靠性。
在Java中,抛出异常通常用于表示程序运行时出现的异常情况,例如参数错误、文件不存在、网络连接失败等等。如果程序遇到这些异常情况,可以通过抛出异常来通知调用者,让调用者进行相应的处理。
具体格式:
public class Review_exception {
public static void main(String[] args) throws Exception {
method2();
}
public static void method2() throws Exception{
int a = new Scanner(System.in).nextInt();//异常代码
int b = new Scanner(System.in).nextInt();//异常代码
System.out.println(a / b);//异常代码
}
}