异常类是个什么东西!?为什么要有异常这个东东??不够用了能不能自己造一个?
举个例子:
假设今天早晨你早早的出门,骑着单车去买新鲜的蔬菜、肉类总之就是你打算今天做一顿丰盛的午餐,你呢,要去的菜市场要过马路,在你过马路的时候,突然发现前面有个老奶奶还撑着拐杖,慢悠悠的走,你骑得很快,意识到快撞上老奶奶了,这就是异常。为什么要有异常??这问题谁提的,不扯蛋吗!!过...这时候你脑袋飞快处理,抛出异常,紧接着你的大脑就捕获异常,你的脑袋那一瞬间想到的--快撞人了,还是个老奶奶,不得了,这还是头一次,你的经验满足不了你了,因为你没有遇到过这样的事情,这就是所谓的创建自己异常类。也就是说当满足不了自己的需求的时候可以自己创建异常类。
你刹车了,呼,有惊无险,紧接着你到了菜市场,你去卖蔬菜,发现有片菜叶有虫子,还是烂的,这可不得了,你的大脑表示这种异常是可抛出的Throwable,心想这老板还做不做生意了,但是这不关你的事,因为你只是来买菜的,这就是所谓的Error类,这是一种异常对象,派生于你大脑的抛出,对象是那片菜叶,但这种异常不需要你操心,这是店家的问题,你换一家店买到你想吃的菜就行啦。我们要关心的刚刚那场有惊无险的“老奶奶事件”,我们称之为Exception类,他也是派生于Throwable类的。
异常Exception的概念:
Java异常时Java提供的用于处理程序中错误的一种机制。
JAVA是采用面向对象的方式来处理异常的。处理过程:
抛出异常:在执行一个方法时,如果发生异常,则这个方法生成代表该异常的一个对象,停止当前执行路径,并把一场对象提交给JRE。
捕获异常:JRE得到该异常后,寻找相应的代码来处理该异常。JRE在方法的调用栈中查找,从生成异常的方法开始回溯,直到找到相应的处理代码为止。
异常分类:
JDK中定义了很多异常类,这些类对应了各种各样可能出现的异常事件,所有一场对象都是派生于Throwable类的一个实例。如果内置的异常类不能够满足需要,还可以创建自己的异常类。Thorwable表示可抛出的
Error类不需要我们管,(发动机坏了)不需要我们管,处理不了,驾驶员不需要操心,唯一的办法就是重启,Error不需要我们操心
我们需要关心的就是Exception
import java.util.Scanner;
/**
* 测试异常(Exception)
* @author Administrator
*
*/
public class TestException {
public static void main(String[] args) {
//int i =1/0;//UnCheckedException
//Computer c = null;
//if(c!=null)
//c.start();//对象是null,调用了对象方法或属性
String str = "1234shfdkah";
Integer i = new Integer(1234);
System.out.println(i);
//手动捕获
try {
//CheckedException(被编译器检查过了)
Thread.sleep(3000);
}catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
System.out.println("aaa");
}
}
}
class Computer{
void start() {
System.out.println("计算机启动");
}
}
没什么技术含量 但是第一次见面还是要自己打的try - catch
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import javax.print.DocFlavor.READER;
public class TestException2 {
public static void main(String[] args) {
FileReader reader = null;
try {
reader = new FileReader("D:/a.txt");
char c = (char)reader.read();
char c2= (char)reader.read();
System.out.println(""+c+c2);
}catch(FileNotFoundException e) {
e.printStackTrace();
} catch(IOException e) {
e.printStackTrace();
}finally {
//资源开了一定要关,要不服务器用久了会崩溃的
try {
if(reader != null) {
reader.close();
}
}catch(IOException e){
e.printStackTrace();
}
}
}
}
使用异常机制的建议:
1、要避免使用异常处理代替错误处理,这样会降低程序的清晰性,并且效率低下
2、处理异常不可以代替简单测试---只在异常情况下使用异常机制
3、不要进行小粒度的异常处理---应该讲整个任务包装在一个Try语句块中
4、异常往往在高层处理(暂时先了解)[是否开枪]