《黑马程序员》Java 异常

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

一.概述
什么事异常:
程序在运行时出现的不正常情况。其实就是程序中出现的问题。这个问题按照面向对象思想进行描述,并封装成了对象。因为问题的产生有产生的原因、有问题的名称、有问题的描述等多个属性信息存在。当出现多属性信息最方便的方式就是将这些信息进行封装。异常就是java按照面向对象的思想将问题进行对象封装。这样就方便于操作问题以及处理问题。
出现的问题有很多种,比如角标越界,空指针等都是。就对这些问题进行分类。而且这些问题都有共性内容比如:每一个问题都有名称,同时还有问题描述的信息,问题出现的位置,所以可以不断的向上抽取。形成了异常体系。
常见的异常可分为以下几种:
ArrayIndexOurOFBoundsException
ClassCastException
NoClassDefFoundException
IOException
FileNotFoundException
——–java.lang.Throwable:
Throwable:可抛出的。
异常和错误的区别?
|–Error:错误,一般情况下,不编写针对性的代码进行处理,通常是jvm发生的,需要对程序进行修正。
|–Exception:异常,可以有针对性的处理方式

无论是错误还是异常,它们都有具体的子类体现每一个问题,它们的子类都有一个共性,就是都以父类名才作为子类的后缀名。

这个体系中的所有类和对象都具备一个独有的特点;就是可抛性。
可抛性的体现:就是这个体系中的类和对象都可以被throws和throw两个关键字所操作。
在开发时,如果定义功能时,发现该功能会出现一些问题,应该将问题在定义功能时标示出来,这样调用者就可以在使用这个功能的时候,预先给出处理方式。
处理方式有两种:1、捕捉;2、抛出。
对于捕捉:java有针对性的语句块进行处理。捕捉的三种方式如下
1.try {
需要被检测的代码;
}
catch(异常类 变量名){
异常处理代码;
}
fianlly{
一定会执行的代码;
}
2.
try {
需要被检测的代码;
}
catch(异常类 变量名){
异常处理代码;
}
3.try {
需要被检测的代码;
}fianlly{
一定会执行的代码;
}
异常处理原则:功能抛出几个异常,功能调用如果进行try处理,需要与之对应的catch处理代码块,这样的处理有针对性,抛几个就处理几个。
特殊情况:try对应多个catch时,如果有父类的catch语句块,一定要放在下面。
throw 和throws关键字的区别:
throw用于抛出异常对象,后面跟的是异常对象;throw用在函数内。
throws用于抛出异常类,后面跟的异常类名,可以跟多个,用逗号隔开。throws用在函数上。
通常情况:函数内容如果有throw,抛出异常对象,并没有进行处理,那么函数上一定要声明,否则编译失败。但是也有特殊情况。

异常分两种:
1:编译时被检查的异常,只要是Exception及其子类都是编译时被检测的异常。
2:运行时异常,其中Exception有一个特殊的子类RuntimeException,以及RuntimeException的子类是运行异常,也就说这个异常是编译时不被检查的异常。
编译时被检查的异常和运行时异常的区别:
编译被检查的异常在函数内被抛出,函数必须要声明,否编译失败。
声明的原因:是需要调用者对该异常进行处理。
运行时异常如果在函数内被抛出,在函数上不需要声明。
不声明的原因:不需要调用者处理,运行时异常发生,已经无法再让程序继续运行,所以,不让调用处理的,直接让程序停止,由调用者对代码进行修正。
定义异常处理时,什么时候定义try,什么时候定义throws呢?
功能内部如果出现异常,如果内部可以处理,就用try;
如果功能内部处理不了,就必须声明出来,让调用者处理。
代码示例:

class Demo0
{
    int div(int a,int b)throws Exception{
        return a/b;
    }
}
class  ExceptionDemo
{
    public static void main(String[] args) 
    {
        Demo0 d = new Demo0();
        try
        {
            int x = d.div(4,0);
            System.out.println("x="+x);
        }
        catch (Exception e)//Exception e = new ArithmeticException();
        {
            System.out.println("除零啦");
            System.out.println(e.getMessage());//  / by zero;
            //sSystem.out.println(e.toString());// 异常名称 : 异常信息。
        //  e.printStackTrace();//异常名称,异常信息,异常出现的位置。
                            //其实jvm默认的异常处理机制,就是在调用printStackTrace方法。
                            //打印异常的堆栈的跟踪信息。
        }       

        System.out.println("over");
    }
}
//打印异常信息三种方式  e.printStackTrace()
                 //    System.out.println(e.getMessage());
                    System.out.println(e.toString())

自定义异常:
什么是自定义异常:
即在当开发时,项目中出现了java中没有定义过的问题时,这时就需要我们按照java异常建立思想,将项目的中的特有问题也进行对象的封装。这个异常,称为自定义异常。
对于除法运算,0作为除数是不可以的。java中对这种问题用ArithmeticException类进行描述。对于这个功能,在我们项目中,除数除了不可以为0外,还不可以为负数。可是负数的部分java并没有针对描述。所以我们就需要自定义这个异常。
代码示例如下:
代码1:

class FuShuException1 extends Exception //getMessage();
{   
    private String msg;
    private int value;
//  FuShuException(){
//      super();
//  }
    FuShuException1(String msg,int value){
        super(msg);
        this.value = value;
    }
    public int getValue(){
        return value;
    }
}
class Demo
{
    int div(int a,int b) throws Exception{
        if(b<0)
            throw new FuShuException1("出现异常喽",b);//手动通过throw关键字抛出一个自定义异常对象。
        return a/b;
    }
}
class  Exception1{
    public static void main(String[] args) throws Exception {
        Demo28 d = new Demo28();
        try{
            int x = d.div(4,-9);
            System.out.println("x="+x);     
        }
        catch (FuShuException1 e){
            System.out.println(e.toString());
            //System.out.println("除数出现负数了");
            System.out.println("错误的负数是:"+e.getValue());
        }
        System.out.println("over");
    }
}

代码2:(引自毕向东Java基础案例)

/*
毕老师用电脑上课。
开始思考上课中出现的问题。
比如问题是
    电脑蓝屏。
    电脑冒烟。
要对问题进行描述,封装成对象。
可是当冒烟发生后,出现讲课进度无法继续。
出现了讲师的问题:课时计划无法完成。
*/
class LanPingException extends Exception{
    LanPingException(String message){
        super(message);
    }
}
class MaoYanException extends Exception{
    MaoYanException(String message){
        super(message);
    }
}
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(){
        state = 1;
        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){
            cmpt.reset();
        }
        catch (MaoYanException e){
            test();
            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("换老师或者放假");
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我! 毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip
综合小区管理系统管理系统按照操作主体分为管理员和用户。管理员的功能包括报修管理、车位管理、车位分配管理、出入管理、字典管理、房屋管理、物业费缴纳管理、公告管理、物业人员投诉管理、我的私信管理、物业人员管理、用户管理、管理员管理。用户的功能包括管理部门以及部门岗位信息,管理招聘信息,培训信息,薪资信息等。该系统采用了Mysql数据库,Java语言,Spring Boot框架等技术进行编程实现。 综合小区管理系统管理系统可以提高综合小区管理系统信息管理问题的解决效率,优化综合小区管理系统信息处理流程,保证综合小区管理系统信息数据的安全,它是一个非常可靠,非常安全的应用程序。 管理员权限操作的功能包括管理公告,管理综合小区管理系统信息,包括出入管理,报修管理,报修管理,物业费缴纳等,可以管理操作员。 出入管理界面,管理员在出入管理界面中可以对界面中显示,可以对招聘信息的招聘状态进行查看,可以添加新的招聘信息等。报修管理界面,管理员在报修管理界面中查看奖罚种类信息,奖罚描述信息,新增奖惩信息等。车位管理界面,管理员在车位管理界面中新增。公告管理界面,管理员在公告管理界面查看公告的工作状态,可以对公告的数据进行导出,可以添加新公告的信息,可以编辑公告信息,删除公告信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值