//异常
//异常分类
//编译时异常:程序编译时的异常例子 IO异常,SQL异常
//运行时异常的区别:程序在运行时出现的异常,会自动抛出该异常
//异常处理
//
//try catch finally处理异常
//throws 和 throw 的区别
//throws是用于在方法声明抛出的异常是(Oexcetion)类型,而throw是用于抛出异常。
Java 的异常处理通过 5 个关键字来实现:try、catch、throw、throws 和 finally。try catch 语句用于捕获并处理异常,finally 语句用于在任何情况下(除特殊情况外)都必须执行的代码,throw 语句用于拋出异常,throws 语句用于声明可能会出现的异常。
try {
// 可能发生异常的语句
} catch(ExceptionType e) {
// 处理异常语句
}
语法的处理代码块 1 中,可以使用以下 3 个方法输出相应的异常信息。
printStackTrace() 方法:指出异常的类型、性质、栈层次及出现在程序中的位置(关于 printStackTrace 方法的使用可参考《Java的异常跟踪栈》一节)。
getMessage() 方法:输出错误的性质。
toString() 方法:给出异常的类型与性质。
//题目1:完成一个编译时异常的举例 其实就是写的时候会有红线提示进行异常处理
//题目2:完成一个运行时异常的举例
public class Day19 {
public static void main(String[] args){
System.out.println(3/0);
}
}
//题目3:完成一个运行时异常捕获,获取异常信息后打印异常信息。
public class Day19 {
public static void main(String[] args){
try{
System.out.println(3/0);
}catch (Exception e){
e.printStackTrace();
System.out.println("啊啊啊啊,出错了");//如果没有异常处理,这句是不会打印的
}
}
}
//题目4:自定义一个异常并捕获抛出
import java.util.InputMismatchException;
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
int age;
Scanner in=new Scanner((System.in));
System.out.println("请输入您的年龄");
try {
age=in.nextInt();
if(age<0){
throw new MyException("您输入的年龄为负数,输出错误");
}else if(age>100){
throw new MyException("您输入的年龄大于100,输出错误");
}else {
System.out.println("您的年龄是"+age);
}
}catch (InputMismatchException e1){
System.out.println("您输入的年龄不是数字");
}catch (MyException e2){
System.out.println(e2.getMessage());
}
}
}
public class MyException extends Exception {
public MyException(){
super();//继承父类构造函数
}
public MyException(String str){
super(str);
}
}
参考:http://c.biancheng.net/view/1051.html
参考答案:
答案:
题目1:
@Test//获取系统编译时异常,需要抛出异常或者进行异常捕获 try catch
public void getBuildException(){
File file = new File("/dd");
FileInputStream inputStream =new FileInputStream(file);
}
直接会有红线提示:
或者运行时会提示:
Error:(15, 39) java: 未报告的异常错误java.io.FileNotFoundException; 必须对其进行捕获或声明以便抛出
题目2:
public class ex {
public static void getRunException() {
int a = 1 / 0;
System.out.println("异常已经出现了看我打印不打印");
}
public static void main(String[] args) {
// getBuildException();
}
}
运行时会出现:
Exception in thread "main" java.lang.ArithmeticException: / by zero
at com.benben.exception.ex.getRunException(ex.java:19)
at com.benben.exception.ex.main(ex.java:24)
题目3:
@Test//获取系统运行时异常
public void getRunException() {
try {
int a = 1 / 0;
System.out.println("异常已经出现了看我打印不打印");
} catch (RuntimeException e) {
System.out.println(e.getMessage() + "异常信息");
System.out.println(e.toString() + "输出异常串");
System.out.println("打印异常信息");
e.printStackTrace();
} finally {
System.out.println("finally 输出了");
}
}
题目4:
//抛出一个 自定义的异常,并由调用此方法的对象方法捕获后处理 throw
自定义的异常类:
Oexcetion.java
public class Oexcetion extends RuntimeException {
final long serialVersionUID = -703407466939L;
public Oexcetion() {
}
public Oexcetion(String msg) {
super(msg);
}
}
ex.java
class ex {
public void biJia(int a, int b) throws Oexcetion {
if (a < b) {
throw new Oexcetion("出现自定义异常了");
}
}
}