ASP.Net+Android+IOS开发------期待与您交流
<异常>
1. 异常体系
* Throwable 所有异常和错误的父类
* toString()
* getMessage()
* printStackTrace() 最长用,信息量最大,JVM调用的也是这样方法
* Error
* Exception 所有异常的父类
* RuntimeException
* 其他派系
2. 异常的第一种处理方法
* try{
检测的代码
可能出现异常的代码
如果出现以后,以后的代码(try内的)不在运行,跳转到catch去了
}catch(异常类 变量){
处理方法
}
3. 方法内部抛出异常 (第二种异常处理方法,抛出异常)
* 如果方法内部抛出异常,选择try catch来处理
* 在方法的声明上,继续抛出 throws 异常类
* 如果我们调用了抛出异常方法,可以选择try catch处理,也可以继续抛出
但是,到了最终的调用者,不要在抛出了
* throw throws
* throw 作用在方法内,抛出异常对象,关键字后面跟随的是 new 异常对象
* throws 作用在方法的声明生,后面跟随的是异常类
4. 编译时期异常与运行时期异常
* 编译时期异常,调用了一个抛出异常的方法,没有进行处理,编译失败
* 运行时期异常,运行时候,出现的异常
* RuntimeException 运行时异常
* 如果方法内部,抛出的是RuntimeException或者是它的子类的异常
* 方法的声明生,无需在使用throws进行抛出
* 对于调用者,不需要对异常进行处理
* 原因是(********):
运行时期异常,在程序运行中,是不允许出现了,如果出现了,java工程师,希望
程序停止运行,并让开发者,修改代码
抛出运行时期异常,不需要声明,也不需要处理,发生了就要停止程序了
ClassCastException
NullPointerException
ArrayIndexOutOfBoundsException
5. 自定义异常
* java中目前所有的异常对象,也可能不够我们使用
* 自定义异常 前提,继承异常类Exception,入伙
* 凡是异常类,都具备可抛性
* 如果我们定义的是运行时期异常,继承RuntimeException
* 需要将异常的信息,传递给自定义异常的 父类,用super();
自定义异常的代码演示
package cn.itcast.exception;
/*
* 演示自定义异常的案例
*/
//自定义负数异常
class FuShuException extends RuntimeException{
FuShuException(String message){
super(message);
}
}
class Demo2{
public int getArea(int width,int heigth){
if(width <=0)
throw new FuShuException("长度出现非法数据,小于或者等于0");
if(heigth <=0)
throw new FuShuException("高度出现非法数据,小于或者等于0");
return width * heigth;
}
}
public class ExceptionDemo2 {
public static void main(String[] args) {
Demo2 d = new Demo2();
int x = d.getArea(0, 23);
int y = d.getArea(11, 46);
if(x>y)
System.out.println("aaaaaaaaaaa");
else
System.out.println("bbbbbbbbbbb");
}
}
6. finally代码块
* 配合try catch 处理 来进行使用
* finally代码块中的程序,是一定要执行的
* finally一般用于关闭资源
finally的使用方法代码体现
package cn.itcast.exception;
/*
* finally代码块
*/
class Demo3{
public void show()throws Exception{
if(2==1)
//调用了windows中的功能
throw new Exception();
else
System.out.println("############");
}
}
public class ExceptionDemo3 {
public static void main(String[] args){
Demo3 d = new Demo3();
try{
d.show();
}catch(Exception e){}
finally{
// System.out.println("+++++++++");
//释放资源
}
}
}
7. 继承中子类和父类类异常的抛出特点
* 子类覆盖父类的方法,如果父类方法不抛异常,子类也不能抛出异常
* 子类覆盖父类的方法,如果父类方法抛出异常,子类可以抛出,也可以不抛出异常
但是,子类抛出的异常,不能"大于"父类抛出的异常
8. 异常练习题
* 老师上课,用笔记本上
笔记本会出现异常,蓝屏异常,冒烟异常
笔记本有3个状体,正常状态上课
老师调用笔记本的开机功能上课,如果出现异常,该怎么办?
需要几个类 ,2个自定义异常类,一个是蓝屏,一个是冒烟
笔记本类
老师调用笔记本的功能上课
测试运行的
下面是习题的代码实现:
package cn.itcast.exception;
//自定义蓝屏和冒烟异常
class LanPingException extends Exception{
LanPingException(String message) {
super(message);
}
}
class MaoYanException extends Exception{
MaoYanException(String message) {
super(message);
}
}
class StopException extends Exception{
StopException(String message) {
super(message);
}
}
//定义笔记本类,开机上课功能,3个状态
class Computer{
//定义状态变量 0 正常 1蓝屏 2冒烟
int status = 2 ;
public void open()throws LanPingException,MaoYanException{
if(status == 0 ){
System.out.println("老师开机上课了");
}else if(status == 1){
throw new LanPingException("笔记本蓝屏了");
}else{
throw new MaoYanException("笔记本冒烟了");
}
}
//笔记本的重启功能
public void reset(){
System.out.println("笔记本重启了");
status = 0 ;
}
}
//定义老师类,调用笔记本上课功能
class Teacher{
String name;
Computer c = null;
Teacher(String name){
this.name = name;
c = new Computer();
}
public void teacher()throws StopException{
try{
c.open();
}catch(LanPingException e){
System.out.println("-----"+e.toString());
c.reset();
teacher();
}catch(MaoYanException e){
throw new StopException("课程无法继续");
}
}
public void lianxi(){
System.out.println("做练习了啊。。。。");
}
}
/*
* 老师调用笔记本上课,出现的异常情况
* 冯巍
*/
public class ExceptionTest {
public static void main(String[] args) {
Teacher t = new Teacher("老师");
try{
t.teacher();
}catch(StopException e){
e.printStackTrace();
t.lianxi();
}
}
}
ASP.Net+Android+IOS开发------期待与您交流
详细请查看:http://edu.csdn.net