您的位置:首页 > 职场人生

黑马程序员 java学习笔记——异常

2014-08-01 12:22 369 查看

---------------------- ASP.Net+Android+IO开发S.Net培训、期待与您交流!
----------------------

概述

概念:程序运行时期发生的不正常情况

由来:问题也是现实生活中的事物,也可以通过Java类进行描述,并封装成对象。其实就是Java对不正常情况进行描述后的对象体现。

体系:一种是Error,一种是Exception。由于发现这俩大类中还有很多共性东西,所以又进行了抽取。抽取成了Throwable。

Error:对于严重的异常,java通过Error类进行描述,对于Error一般不编写针对性的代码对其进行处理
Exception:对于非严重的,java通过Exception类进行描述,对于Exception可以使用针对性的处理方式进行处理。

异常的处理

异常的处理分两种方式:try..catch和throws抛异常

try...catch异常捕获的三种方式:

try{
可能发生异常的代码;
}
catch(接收捕获异常类的对象 异常类引用变量){
处理代码;
}


try{
可能发生异常的代码;
}
fianlly{
一定要执行的语句;(通常用于关闭资源)
}


try{
可能发生异常的代码;
}
catch(捕获异常类的对象 异常类引用变量){
处理代码;
}
finally{
一定要执行的语句;(通常用于关闭资源)
}
PS:将必须要运行的代码放入finally代码块中。

try...catch异常的示例代码

class Demo{
int div(int a,int b){
return a/b;
}
}
class ExceptionDemo{
public static void main(String[] args){
Demo d=new Demo();
try{
int x=d.div(4,0);
System.out.println(x);
}catch(Exception e){
System.out.println("除零啦!");
}
System.out.println("over");
}
}


throws异常的示例代码

class Demo{
int div(int a,int b) throws Exception{
return a/b;
}
}
class ExceptionDemo{
public static void main(String[] args) throws Exception{
Demo d=new Demo();
int x=d.div(4,0);
System.out.println(x);
System.out.println("over");
}
}


throws和throw的区别

1、throws使用在函数上,throw使用在函数内

2、throws后面跟的是异常类,可以跟多个,用逗号隔开;throw后跟的是异常对象

RuntimeException

1、如果在函数中抛出该异常,函数上可以不用声明,编译一样通过;

2、如果在函数上声明了该异常,调用者可以不用进行处理,编译一样通过。

PS:该异常之所以不用在函数上声明,是因为不需要让调用者处理。当该异常发生,希望程序停止,因为在运行时,出现了无法继续运算的情况,希望停止程序后由程序员对代码进行修正。

自定义异常时,如果该异常的发生无法再继续运算,就让自定义异常继承 RuntimeException。

练习

关于毕老师用电脑上课的异常处理

示例代码如下:

class LanPingException extends Exception{
LanPingException(String message){
super(message);
}
}
class MaoYanException extends Exception{
MaoYanException(String message){
super(message);
}
}
class Computer{
private int state=1;
public void run() throws LanPingException,MaoYanException{
if(state==2)
throw new LanPingException("蓝屏了");
if(state==3)
throw new MaoYanException("冒烟了");
System.out.println("电脑运行");
}
public void reset(){
System.out.println("电脑重启");
}
}
class NoPlanException extends Exception{
NoPlanException(String msg){
super(msg);
}
}
class Teacher{
private String name;
private Computer cmpt;
Teacher(String name){
this.name=name;
cmpt=new Computer();
}
public void prelect() throws NoPlanException{
try{
cmpt.run()
}catch(LanPingException e){
cmpt.reset();
}catch(MaoYanException e){
test();
throw new NoPlanException("课时无法继续"+e.getMessage());
}
System.out.println("讲课");
}
public void test(){
System.out.println("练习");
}
}
public class Demo{
public static void main(String[] args){
Teacher t=new Teacher("毕老师");
try{
t.prelect();
}catch(NoPlanException e){
System.out.println(e.toString());
System.out.println("换老师,或者放假");
}
}
}


---------------------- ASP.Net+Android+IO开发S.Net培训、期待与您交流!
----------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: