黑马程序员_异常概述

------- android培训java培训、期待与您交流! ---------

 

异常的体系
 Throwable
     |--Error
        |--通常出现重大问题:运行的类不存在或者内存溢出
        |--不编写针对代码对其处理
     |--Exception
        |--在运行是出现不正常情况,可以通过try catch finally

·Exception和Error的自类名都是以父类名作为后缀    

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

对于问题的划分:两种:一种是严重的问题,一种非严重的问题
对于严重的,java通过Error类进行描述
        对于Error一般不编写针对性的代码描述
对于非严重的,java通过Exception类进行描述
         编写针对性的编写方式进行处理

2.异常的处理
java提供了特有的语句进行处理
try{
     需要被检测的代码
}catch(异常类 变量){
     处理异常的代码
}finally{
     一定会执行的语句
}

3.对捕获到的的异常对象进行常见方法操作
e.getMessage();     //异常信息
e.getMessage();     //异常名称,异常信息
e.printStackTrace();//异常名称,异常信息,异常出现的位置
              

在函数上声明异常:
便于提高安全性 让调用出进行处理 不处理编译失败

对多异常的处理:
1.声明异常时,建议声明更为具体的异常。这样处理更为具体。
2.对方声明几个异常,就对应有几个catch块
       如果多个catch块中的异常出现继承关系,父类异常catch放在最后面

建议在进行catch处理时,catch中一定要定义具体处理方式。
不要简单定义一句e.printStackTrace();
建议使用异常日志。

自定义异常:
因为项目中会出现特有的问题,而这些问题并未被java 所描述并封装对象。所以,对于这些特有问题可以按照java的对问题封装的思想。将特有的问题。进行自定义的异常封装。

当在函数内部出现throw抛出异常对象,那么就必须给对应的处理动作。要么在内部try catch处理,要么在函数上声明,让调用者处理。一般情况下,函数内出现异常,函数上需要声明。


如何定义信息?
因为父类中已经把异常信息的操作都完成了。所以子类只要在构造时,讲异常信息传递给父类通过super语句。那么就可以直接通过getMessage方法获取自定义的异常信息

自定义异常:
必须是自定义类继承Exception。

继承Exception原因:
异常体系有一个特点:因为异常类和异常对象都需要被抛出。
因为他们都具有可抛性。这个可抛性是Throwable这个体系中独有特点。

只有这个体系中的类和对象才可以被throws和throw操作。

throw和throws的区别
throws使用在函数上,后面跟的异常类。可以跟多个,用逗号隔开
throw使用在函数内,后跟的是异常对象

RuntimeException 运行时异常
如果在函数内容抛出该异常,函数上可以不声明,编译一样通过
如果函数上声明了该异常。调用者可以不用进行处理,编译一样通过。之所以不用在函数申明,是因为不需要让调用者处理
当该异常发生,希望程序停止。因为在运行时,出现了无法继续运算的情况,希望停止程序后,对代码进行修正。

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

异常可以分为两种:
1.编译时被检测的异常
   编译时异常: 该异常在编译必须抛或try
   该异常被标识,代表这可以被处理
2.编译时不被检测的异常(运行时异常,RuntimeException及其子类)
  该异常在编译时,编译器不检查
  该异常的发生,建议不处理,让程序停止,需要对代码修正

对可能的异常进行描述,封装成对象


finally代码块:定义一定执行的代码。
通常用于关闭资源。finally只有一种情况读不到,System.exit(0);

catch是用于处理异常。如果没有catch就代表没有处理过,如果该异常是检测时异常,则必须声明

异常在子父覆盖中的体现:
1.子类在覆盖父类时,如果父类的方法抛出异常,那么子类的覆盖方法只能抛出父类的异常或者异常的子类。因为早期异常不能处理新异常。
2.如果父类方法抛出多个异常,那么子类覆盖该方法时,只能抛出父类异常的子集。
3.如果父类或者接口的方法没有异常抛出,那么子类在覆盖方法时,也不可以抛出异常。如果子类发生了异常,只能try 处理,绝对不能抛。

 

异常练习

-----------------------------------------------------------------------------------------------------------------------------

/*
 * 毕老师用电脑上课
 * 开始思考上课出现的问题
 * 
 * 比如问题是
 * 电脑蓝屏
 * 电脑冒烟
 * 要对问题进行描述,并封装对象
 * 
 * 但冒烟发生时,出现讲课进度无法继续  课时计划无法完成
 */

package exception;

//三个自定义异常

-----------------------------------------------------------------------------------
class LanpingException extends Exception  {             //蓝屏异常
 LanpingException(String msg){
  super(msg);
 }
}

-----------------------------------------------------------------------------------

class MaoyanException extends Exception{              //冒烟异常
 MaoyanException(String msg){
  super(msg);
  }
}

-----------------------------------------------------------------------------------

class NoPlanException extends Exception{         //课时安排异常
 NoPlanException(String msg){
  super(msg);
 }
}

-----------------------------------------------------------------------------------

class Computer{
 private int state=3;         //电脑状态
 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 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) {    //蓝屏异常则调用reset()方法
   cmpt.reset();
  } catch (MaoyanException e) {
   System.out.println("练习");       //冒烟则先练习  抛NoPlan异常
   throw new NoPlanException("课时无法继续");   //catch代码块中也可以抛异常
  }
  System.out.println("开始讲课");
  
 }
 public void test(){
  System.out.println("练习");
 }
}

-----------------------------------------------------------------------------------

public class ExceptionDemo {
 public static void main(String[] args) {
          Teacher t=new Teacher("老毕");
          try {
   t.prelect();
  } catch (Exception e) {
   System.out.println(e.toString());
   System.out.println("换老师或者放假");
//   e.printStackTrace();
  }
 }
}

/*

打印结果

-----------------------------------------------------------

练习
exception.NoPlanException: 课时无法继续
换老师或者放假

-----------------------------------------------------------

*/

-----------------------------------------------------------------------------------------------------------------------------

 

 

------- android培训java培训、期待与您交流! ----------

详细请查看:http://edu.csdn.net/heima/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值