Java基础笔记-异常
2015-05-20 22:47
162 查看
Java中的异常机制:
Throwable类是 Java 语言中所有错误或异常的超类。主要包括两个子类: Error和Exception.
一般中要处理的异常是Exception.
Java中最常见的处理方式是try catch finally.格式为:
try
{
需要被检测的异常.
}
catch(异常类 变量)
{
处理异常的代码()处理方式
}
finally
{
一定会被执行的代码语句
}
一个简单的异常处理代码及有关函数的应用:
用try catch finally也处理捕捉多个异常,在声明异常时,应该声明更具体的异常.
当出现了多个catch时,声明了多个异常时,父类异常块应该放在代码的最下面,如果放在最上面会导致子类异常永远无法执行到.
异常的声明:用关键字 throws.在java中可以用throws和throws来抛出异常.
throw和throws的区别在于:
throws:使用在函数上(所谓函数上就是在函数名的小括号与大括号之间),后面跟异常类,可以有多个异常类,用","(逗号)隔开即可.
throw:使用在函数内(在大括号之内),后面跟的是异常对象,格式例如: throw new 异常类名();
在实际应用中,可以自定义异常,自定义异常需要继承一个异常类,可以是Error类,Exception类,或者它们的根类:Throwable类.
格式:(例如声明一个自定义的Exception异常类)
class 自定义异常类名(一般写成xxxException) extends Exception
{
xxxException(String message)
{
super(message);
}
}
上面的自定义异常类,因为java已经在父类中已经把异常类的信息都完成了,子类异常类在构造时,
将异常的信息传递给父类,通过super语句,就可以直接调用getMessage()获取异常信息.(有关父类的方法可以查阅Java API)
自定义异常类只能手动抛出,是无法自动抛出的.
相关的例子代码:
Java中有一种特别的异常类:RuntimeException
1.该异常如果在函数内抛出了,在函数上不声明,编译也是可以通过的,(其他Exception等类是在函数内抛出了必须在函数上声明的)
2.如果在函数上声明了该类异常,调用者可以不进行处理.
因此使用自定义异常的时候,如果该异常的发生,无法继续进行运算,那么就可以让该自定义异常继承RuntimeException.
最后是一个异常的相关练习代码:
Throwable类是 Java 语言中所有错误或异常的超类。主要包括两个子类: Error和Exception.
一般中要处理的异常是Exception.
Java中最常见的处理方式是try catch finally.格式为:
try
{
需要被检测的异常.
}
catch(异常类 变量)
{
处理异常的代码()处理方式
}
finally
{
一定会被执行的代码语句
}
一个简单的异常处理代码及有关函数的应用:
/* 异常:Exception. 处理异常的方式: try { 需要被检测的代码. } catch(异常类 变量) { 处理异常的代码,处理方式. } finally { 一定会被执行的语句. } */ class ExceptionDemo { public static void main(String args []) { Demo d = new Demo(); //int a = d.div(4,1); try { int a = d.div(4,0); System.out.println("a = "+a); } catch(Exception e) //Exception类型的引用对象 Exception e = new ArithmeticException(); { System.out.println("除以零了."); System.out.println(e.getMessage()); //打印出异常信息. /by zero System.out.println(e.toString()); // 异常名称 异常信息 e.printStackTrace(); //JVM默认的就是调用printStackTrace方法获取异常处理,并打印出在堆栈中的跟踪信息. } finally { System.out.println("It's over."); } } } class Demo { int div(int a,int b)throws Exception //throws Exception 声明了该方法可能会出现问题. { return a/b; } }
用try catch finally也处理捕捉多个异常,在声明异常时,应该声明更具体的异常.
当出现了多个catch时,声明了多个异常时,父类异常块应该放在代码的最下面,如果放在最上面会导致子类异常永远无法执行到.
异常的声明:用关键字 throws.在java中可以用throws和throws来抛出异常.
throw和throws的区别在于:
throws:使用在函数上(所谓函数上就是在函数名的小括号与大括号之间),后面跟异常类,可以有多个异常类,用","(逗号)隔开即可.
throw:使用在函数内(在大括号之内),后面跟的是异常对象,格式例如: throw new 异常类名();
在实际应用中,可以自定义异常,自定义异常需要继承一个异常类,可以是Error类,Exception类,或者它们的根类:Throwable类.
格式:(例如声明一个自定义的Exception异常类)
class 自定义异常类名(一般写成xxxException) extends Exception
{
xxxException(String message)
{
super(message);
}
}
上面的自定义异常类,因为java已经在父类中已经把异常类的信息都完成了,子类异常类在构造时,
将异常的信息传递给父类,通过super语句,就可以直接调用getMessage()获取异常信息.(有关父类的方法可以查阅Java API)
自定义异常类只能手动抛出,是无法自动抛出的.
相关的例子代码:
class ExceptionDemo2 { public static void main(String args []) { Demo d = new Demo(); try { int a = d.div(4,-9); System.out.println("a = "+a); } catch(FuShuException e) { System.out.println(e.toString()); //System.out.println("出现了负数."); System.out.println("错误的负数是:"+e.getValue()); } System.out.println("It's over."); } } class FuShuException extends Exception { private int value; /* private String msg; FuShuException(String msg) { this.msg = msg; } public String getMessage() { return msg; } */ FuShuException(String msg,int value) { super(msg); this.value = value; } public int getValue() { return value; } } class Demo { int div(int a,int b)throws FuShuException //throws 使用在函数上. { if(b<0) throw new FuShuException("出现了除数是负数的情况",b); //throw 使用在函数内. return a/b; } }
Java中有一种特别的异常类:RuntimeException
1.该异常如果在函数内抛出了,在函数上不声明,编译也是可以通过的,(其他Exception等类是在函数内抛出了必须在函数上声明的)
2.如果在函数上声明了该类异常,调用者可以不进行处理.
因此使用自定义异常的时候,如果该异常的发生,无法继续进行运算,那么就可以让该自定义异常继承RuntimeException.
最后是一个异常的相关练习代码:
class BlueScreen extends Exception { BlueScreen(String message) { super(message); } } class Smoke extends Exception { Smoke(String message) { super(message); } } class NoPlanException extends Exception { NoPlanException(String message) { super(message); } } class Computer { private int state = 3; public void run()throws BlueScreen,Smoke { if(state==2) throw new BlueScreen("电脑蓝屏了"); if(state==3) throw new Smoke("电脑冒烟了"); System.out.println("电脑运行"); } public void reset() { state = 1; System.out.println("电脑重启"); } } class Teacher { private String name; private Computer comp; Teacher(String name) { this.name = name; comp = new Computer(); } public void prelect()throws NoPlanException { try { comp.run(); } catch(BlueScreen e) { test(); comp.reset(); } catch(Smoke e) { throw new NoPlanException("课时无法继续."+e.getMessage()); } System.out.println("老师讲课"); } public void test() { System.out.println("练习"); } } class ExceptionTest { public static void main(String args[]) { Teacher t = new Teacher("张老师"); try { t.prelect(); } catch(NoPlanException e) { System.out.println(e.toString()); System.out.println("换老师或者电脑,不行就放假."); } } }
相关文章推荐
- C\C++ 程序员从零开始学习Android - 个人学习笔记(九) - java基础 - 异常
- 黑马程序员---------笔记整理(java基础六-----异常)
- java基础学习笔记_异常和包
- Java基础笔记二继承、异常、多态
- java 从零开始,学习笔记之基础入门<异常>(十五)
- 黑马程序员—7—Java基础:有关异常学习笔记和学习心得体会
- 毕向东JAVA基础_异常总结笔记及自己观点理解
- 黑马程序员 Java基础学习笔记11 异常
- Java基础笔记 – Java中的Exception异常 自定义异常
- 笔记整理(java基础六-----异常)
- java基础笔记之异常
- JAVA基础笔记四——异常处理
- Java基础笔记-异常总结,包
- 黑马程序猿 JAVA基础学习笔记 异常等
- 黑马程序员——java基础——异常笔记
- Java基础笔记 – Java中的Exception异常 自定义异常
- 黑马程序员————Java基础日常笔记---对异常的理解
- Think in Java 笔记_Chapter12_1_Exception基础_异常处理3_自定义异常以及抛出多个异常的处理
- 黑马程序员--Java基础学习笔记【异常处理】
- Java基础知识强化之IO流笔记01:异常的概述和分类