JavaSE教程_进阶
异常就是在程序的运行过程中出现的不正常现象导致了程序中断,之前遇到的异常有哪些?
1.空指针异常: NullPointerException
2.类型转换异常:ClassCastException
3.算术异常: ArithmeticException
在java中, 把一些不正常现象进行了抽象, 形成了一些异常类。
在Throwable类的getMessage()/printStackTrace()这两个方法,所有的异常都有。
编译时异常,也称受检异常是指在编译前必须进行预处理, 并不是说这个异常在编译阶段发生,所有的异常都是在运行阶段才可能发生. 就像楼道中必须有灭火器与消防栓, 如果没有这些设备, 就没有安全证, 没有这个安全证,企业就不能生产. 企业必须有火灾的预处理措施, 火灾现在并没有发生。
编译阶段进行语法检查, Java的语法有很多条, 其中一语语法是: 对于受检异常必须进行预处理。
package com.wkcto.chapter02.demo01;
/**
* 运行时异常都是RuntimeException类的子类
* 不需要进行预处理,
* 通过规范的代码进行规避
* @author 蛙课网
*
*/
public class Test01 {
public static void main(String[] args) {
int x = 10;
int y = 2;
// divide(x, y); //10/2=5
// divide(10, 0); //这一行产生了异常,导致了程序中断, 程序不再继续向下执行
divide22(x, y);
divide22(10, 0);
System.out.println("main....end...");
}
//定义方法,计算两个整数的商, 没有判断除数为0的情况
public static void divide( int num1, int num2) {
int result = num1/num2;
System.out.println( num1 + "/" + num2 + "=" + result);
}
//定义方法,计算两个整数的商, 通过判断除数为0避免出现算术异常
public static void divide22( int num1, int num2) {
if ( num2 == 0 ) {
System.out.println("除数不能为0");
return ; //结束方法的执行
}
int result = num1/num2;
System.out.println( num1 + "/" + num2 + "=" + result);
}
}
package com.wkcto.chapter02.demo01;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
/**
* 演示编译时异常
* 受检异常, 受控异常
* @author 蛙课网
*
*/
public class Test02 {
public static void main(String[] args) {
//读取d:/abc.txt文件中的内容, 使用了FileInputStream类
FileInputStream fis = new FileInputStream("d:/abc.txt");
//SUN在定义FileInputStream构造方法时, 通过 throws关键字声明了FileNotFoundException异常,
//这个异常就是受检异常, 即在定义方法时, 通过throws声明的异常
//受检异常在编译前必须进行预处理, 否则编译语法报错
}
}