Java中的异常机制:

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("换老师或者电脑,不行就放假.");
}
}
}

  

Java基础笔记-异常的更多相关文章

  1. Java基础笔记-异常总结,包

    异常:是对问题的描述,将问题进行对象封装, 异常的体系: Throwable: 1.Error 2.Exception 1.RuntimeException 异常体系的特点: 异常体系中的所有类以及建 ...

  2. Java基础笔记 – Annotation注解的介绍和使用 自定义注解

    Java基础笔记 – Annotation注解的介绍和使用 自定义注解 本文由arthinking发表于5年前 | Java基础 | 评论数 7 |  被围观 25,969 views+ 1.Anno ...

  3. 【转】Java基础笔记 – 枚举类型的使用介绍和静态导入--不错

    原文网址:http://www.itzhai.com/java-based-notes-introduction-and-use-of-an-enumeration-type-static-impor ...

  4. java基础之异常 · fossi

    在开发中,异常处理是一个不可绕开的话题,我们对于异常的处理已经非常熟练了,对于异常本身的概念.用法等不再赘述了,直接结合面试问题来加深对异常的理解吧. Throwable 可以用来表示任何可以作为异常 ...

  5. 黑马程序员----java基础笔记中(毕向东)

    <p>------<a href="http://www.itheima.com" target="blank">Java培训.Andr ...

  6. 黑马程序员----java基础笔记上(毕向东)

    ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 笔记一共记录了毕向东的java基础的25天课程,分上.中.下 本片为上篇,涵盖前10天课程 1. ...

  7. Java基础之异常

    1.异常的概念 异常:程序在运行时出现的不正常情况,也可以说是出现的问题: Java中的异常:出现的不正常的问题也是一类事物,这类事物有一些共性的东西,比如有名称,有产生的原因等,将这些共性的部分抽取 ...

  8. 【java基础之异常】死了都要try,不淋漓尽致地catch我不痛快!

    目录 1.异常 1.1 异常概念 1.2 异常体系 1.3 异常分类 1.4 异常的产生过程解析 2. 异常的处理 2.1 抛出异常throw 2.2 Objects非空判断 2.3 声明异常thro ...

  9. JAVA基础知识|异常

    一.基础知识 处理异常,java提供了一个优秀的解决方案:异常处理机制. java把异常当作对象来处理,所有的异常都是由Throwable继承而来,但在下一层立即分解为两个分支:Error和Excep ...

随机推荐

  1. codevs1039 数的划分

    题目描述 Description 将整数n分成k份,且每份不能为空,任意两种划分方案不能相同(不考虑顺序). 例如:n=7,k=3,下面三种划分方案被认为是相同的. 1 1 5 1 5 1 5 1 1 ...

  2. unity3d导出pdf

    unity生成pdf格式,首先需要导入iTextSharp.dll ,下面是我写的一些方法,可以直接用.直接贴代码, using UnityEngine; using System.Collectio ...

  3. 网易云课堂_C++程序设计入门(上)_第5单元:万类霜天竞自由 – 对象和类的更多内容_第5单元作业【4】 - 在线编程(难度:难)

    第5单元作业[4] - 在线编程(难度:难) 查看帮助 返回   温馨提示: 1.本次作业属于Online Judge题目,提交后由系统即时判分. 2.学生可以在作业截止时间之前不限次数提交答案,系 ...

  4. BZOJ 3674 可持久化并查集加强版 可持久化并查集

    题目大意:同3673 强制在线 同3673 仅仅只是慢了一些0.0 这道题仅仅写路径压缩比仅仅写启示式合并要快一点点 两个都写就慢的要死0.0 改代码RE的可能是内存不够 #include<cs ...

  5. 依赖注入及AOP简述(二)——工厂和ServiceLocator .

    2.2.    工厂模式 基于手工构建组件的诸多弱点,1995年“大师4人组”(GoF)在其经典著作<DesignPatterns>一书中提出了“工厂模式”,这种模式在一定程度上有效的解决 ...

  6. Android编译错误——undefined reference to

    [错误描述] 未定义引用 提示如下:bootable/recovery/minzip/Zip.c:1122: error: undefined reference to 'selabel_lookup ...

  7. 蜗牛爱课 -- iOS 设计模式之模板模式

    1 前言 模板方法模式是面向对象软件设计中一种非常简单的设计模式.其基本思想是在抽象类的一个方法定义“标准”算法.在这个方法中调用的基本操作由子类重载予以实现.这个方法成为“模板”.因为方法定义的算法 ...

  8. ZOJ 1530 - Find The Multiple

    Given a positive integer n, write a program to find out a nonzero multiple m of n whose decimal repr ...

  9. ACID:数据库事务正确执行的四个基本要素

    ACID,指数据库事务正确执行的四个基本要素的缩写.包含:原子性(Atomicity).一致性(Consistency).隔离性(Isolation).持久性(Durability).一个支持事务(T ...

  10. Binder连接池

    一.为什么需要Binder线程池 产生原因:因为当有多个不同的业务块都要使用AIDL来进行通信,则需要创建多个Service,每创建一个Service就需要消耗系统资源. 解决思路:将所有的AIDL放 ...