Java面向对象
Java异常
Java数组
Java常用类
Java集合
Java IO流
Java线程
Java反射
Socket编程
Java注解开发
Java GoF设计模式
HashMap
Java内存模型
Java线性表

Java异常简介

异常就是在程序的运行过程中出现的不正常现象导致了程序中断,之前遇到的异常有哪些?

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声明的异常
		//受检异常在编译前必须进行预处理, 否则编译语法报错
	}

}