1,try catch处理
在try里面的代码如果有异常,跳到catch里面的代码(try中异常发生后面的代码不执行),执行完后继续执行trycatch后面的代码
public static void main(String[] args) {
//ctrl + atl + t
//老韩解读
//1. 如果异常发生了,则异常发生后面的代码不会执行,直接进入到catch块
//2. 如果异常没有发生,则顺序执行try的代码块,不会进入到catch
//3. 如果希望不管是否发生异常,都执行某段代码(比如关闭连接,释放资源等)则使用如下代码- finally
try {
String str = "韩顺平";
int a = Integer.parseInt(str);
System.out.println("数字:" + a);
} catch (NumberFormatException e) {
e.printStackTrace();
}
System.out.println("程序继续...");
}
会输出程序继续…
2,一个try可对应多个catch,处理不同类别的异常(子类异常在前,父类异常灾后)
finally部分的代码一定会被执行
//老韩解读
//1.如果try代码块有可能有多个异常
//2.可以使用多个catch 分别捕获不同的异常,相应处理
//3.要求子类异常写在前面,父类异常写在后面
try {
Person person = new Person();
//person = null;
System.out.println(person.getName());//NullPointerException
int n1 = 10;
int n2 = 0;
int res = n1 / n2;//ArithmeticException
} catch (NullPointerException e) {
System.out.println("空指针异常=" + e.getMessage());
} catch (ArithmeticException e) {
System.out.println("算术异常=" + e.getMessage());
} catch (Exception e) {
System.out.println(e.getMessage());
} finally {
}
person是空的
算术异常,不能除以0
3,使用trycatch的一个有趣的程序:
如果用户输入的不是一个整数,就提示他反复输入,直到输入一个整数为止
package com.trycatch;
import java.util.Scanner;
public class test {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String inputStr="";
int num=0;
while(true){
System.out.println("请输入一个整数:");
try {
inputStr=scanner.next();
num=Integer.parseInt(inputStr);
break;
} catch (Exception e) {
System.out.println("你输入的不是整数,请重新输入:");
}
}
System.out.println("你输入的整数是:"+num);
}
}
4,使用throws处理异常
在异常发生处若没有trycatch处理,则抛给方法的调用者负责
package com.hspedu.throws_;
/**
* @author 韩顺平
* @version 1.0
*/
public class ThrowException {
public static void main(String[] args) {
try {
ReturnExceptionDemo.methodA();
} catch (Exception e) {
System.out.println(e.getMessage());
}
ReturnExceptionDemo.methodB();
}
}
class ReturnExceptionDemo {
static void methodA() {
try {
System.out.println("进入方法A");
throw new RuntimeException("制造异常");
} finally {
System.out.println("用A方法的finally");
}
}
static void methodB() {
try {
System.out.println("进入方法B");
return;
} finally {
System.out.println("调用B方法的finally");
}
}
}
输出结果:
进入方法A
用A方法的finally
制造异常(异常抛给了调用者 main方法 catch输出异常)
进入方法B
调用B方法的finally
throws和throw的区别