一些概念性问题:
①Error和Exception的区别:
Error代表系统错误,属于严重问题,开发人员无法处理;
Exception代表异常,包括运行时异常(编译不报错)和其他异常。
②JVM默认处理异常的方式:1.将异常信息输出到控制台;2.异常下面的代码不会执行。
如何捕获异常:使程序遇到异常时继续运行,不会被虚拟机停止?
try...catch语句:
try{
可能出现异常的代码;
}catch(异常类型 变量名){
异常的处理代码;
}
例如局部代码:
try { //可能会出现异常的代码
int dividend = scanner.nextInt();
int divisor = scanner.nextInt();
int result = divide(dividend, divisor);
System.out.println("结果是: " + result);
} catch (java.util.InputMismatchException e) {
//如果出现异常如何处理
System.out.println("异常:数字格式错误");
} catch (ArithmeticException e) {
System.out.println("异常:除数为0");}
细节:如果try中捕获到了异常,try中异常下面的代码就不会执行了。
如何抛出异常:在方法中遇到异常时能结束方法,并告诉调用者哪个方法出现了问题?
①throws:写在方法定义处声明异常。如:
public void 方法()throws 异常类名1,异常类名2...{
......
}
②throw:写在方法内,结束方法。如:
public void 方法(){
throw new NullpointerException( ); //手动创建一个异常对象交给调用者
}
如何自定义异常:extends继承父类异常
class NewException extends RuntimeException{
//运行时异常继承RuntimeException,(参数异常)
//编译时异常直接继承Excption。(本地信息异常)
public NewException(String message) {
super(message);
}
}
public class Main{
public static void main(String[] args){
int b = setid(12);
System.out.println( b );
}
static int setid(int i){
if(i>10){
throw new NewException(i+"太大的异常");
}
return 1;
}
}
运行结果:
Exception in thread "main" NewException: 12太大的异常
at Main.setid(Main.java:17)
at Main.main(Main.java:12)
进程已结束,退出代码1