Java异常的总结-----黑马程序员

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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值