异常处理

1、异常的定义:编程过程中出现的各种意料之外的事情

  • 运行期间出现的错误,而不是编译时的语法错误
  • 例如
                一个不存在的文件夹
                网络连接中断
                操作数组越界等

2、层次结构

Throwable(Object的直接子类)
  • Error 特指应用程序在运行期间发生的严重错误,一般这种错误都是灾难性的
  • Exception(人为处理)
           运行时异常: 可以通过debug调试解决
                    RuntimeException      (可处理可不处理)--多数异常的基类
                   ArrayIndexOutOfBoundsException       --数组越界异常
                   NullPointerException                            --试图访问null对象引用
                    ArithmeticException                           --整数除以0异常
                   unchecked exception  非检查性异常

           编译时异常: 必须处理的
                  IOException                    --i/o异常的根类
                  SQLException      --连接数据库的异常
                  ClassNotFountException            --无法找到想要创建对象的类文件
                   checked exception  检查性异常  (不处理无法编译通过)

异常处理机制主要是处理    检查性异常

3、java 中可用于处理异常的两种方式:

  •   自行处理
    • 使用 try  catch 处理异常
  •   回避异常,自己不处理了,谁用 谁处理
    • 使用throws  把 异常抛出

4、Java中处理异常的5个关键字

  • try{               ----------监视
         //可能发生异常的代码
        }catch( 异常的类型){          ----------捕获并处理try块抛出的异常
        //负责处理异常
        }finally{                                ----------收尾
        //收尾的工作
        //关闭数据库链接
        //关闭文件流
        }

注意:
        1)try要么和catch使用或者和finally使用
        2)finally:不管是否有没有异常,都会执行
        3)try中发生异常位置  后的代码不在执行了,进入catch处理
        4)   如果catch 可以捕获try中的异常,则执行 catch中的内容
                如果catch 不能捕获try中的异常,则程序终止
        5)如果使用多重catch( 一定要先写子类在写父类,并且只执行一个catch
                    子类写在父类的前面,而且只能执行其中的一个catch
                    可以直接使用Exception
注意:Exception类型的异常是所有异常类的父类,当有多个catch块是,该形参的catch块要放在最后面

使用try catch 处理异常的三种情况
1) 没有发生异常:
            try中的内容完全执行,再执行后续的内容,而catch中的内容不会执行
2) 发生异常:
            try 中发生异常位置后续的代码不在执行,进入catch,在执行后续的内容
3) 发生异常,但是catch无力捕获:
            try中发生异常位置后续代码不执行,程序终止

示例:
package lianxi01;

public class Hello {
public static void main(String[] args) {
try {
System. out .println( "1111111" );
int i= 20 / 2 ;
/*
1111111
22222222
4444444*/
//inti=20/0;
/*
1111111
333333
4444444*/
System. out .println( "22222222" );
} catch (Exception ex){// NullPointerException
System. out .println( "333333" );
}
System. out .println( "4444444" );
}
}

finally   遇到  return  发生什么情况?
        finally 在return之前执行
         只有一种情况   finally是不会执行的;
                在try或catch中包含   System.exit(0);

通常在finally语句中可以进行资源的清除操作,如关闭打开文件,删除临时文件
无论是否捕获异常,系统都会执行finally语句
示例:
package lianxi01;

public class he {
public static int getReturn(){
try {
int i= 12 / 0 ;
return 1 ;
} catch (NullPointerException ex){
return 2 ;
} finally {
return 3 ;
}
}
public static void main(String[] args) {
int r= getReturn ();
System. out .println(r);
}
}

所谓的异常处理:
        就是在发生异常的时候记录发生异常的信息,保证程序可以继续进行

  • throws:抛出,只能放在方法的参数列表后面

          访问修饰符    返回值类型   方法名(参数列表) throws  异常类型{
        }

        谁调用,谁处理

注意:
两个catch只能执行一个


  • throw语句:在程序执行过程中人为的引发异常
       异常时通过关键字throw抛出,程序可以用throw语句引发明确的异常

        throw new 异常的类型(“原因”);
如果 throw 引发的是编译时异常  那么必须使用throw  在方法上抛出
例如:
public void test(int age ) throws SQLException{
if (age< 18 ){
throw new SQLException( "年龄不足18岁" );
}

}

 如果 throw引发的是运行时异常,则可以不用throws
例如:
public void setAge( int age){
if (age< 18 ){
throw new RuntimeException( "年龄不足18岁" );
}
}
public void div( int i, int j) throws Exception{

}

通常 使用throw 引发的异常 都是运行时异常

注意:在异常处理过程中,通过 异常处理 , 对用户操作进行提醒  并  记录异常的原因


log4j  工具的使用方式
a)添加log4j需要的jar文件到项目中
    在.idea下新建一个lib包,直接复制粘贴log4j到该包下
        并把jar添加到类路径(文件-项目-导入   Ctrl+alt+shift+S)
b ) 在 src 下创建名为log4j.properties 的资源文件
c ) 在资源文件中添加日志输出的配置
        设置日志 的级别和输出的源(一般设置两个  一个控制台 一个文件)


日志的四个级别:
    error>warn>info>debug
    如果设置的级别为warn 那么 通过 info()和debug()方法写入的信息  无法记录

#设置日志记录的级别和输出源的名称
#注意 设置输出源名是  该名称必须存在          注意:语句后面无分号
log4j.rootLogger = debug,a,b
#设置每一个源的配置
#指定添加日志的方式      控制台追加
log4j.appender.a = org.apache.log4j.ConsoleAppender
#设置输出信息的目标
log4j.appender.a.Target = System.out
#设置输出信息的布局
log4j.appender.a.layout = org.apache.log4j.PatternLayout
#设置模板布局的格式
log4j.appender.a.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss} %c %l %M %m%n

                                        文件追加
log4j.appender.b = org.apache.log4j.FileAppender
#指定文件的名称和位置
log4j.appender.b.File =D:\\ test.log
log4j.appender.b.layout = org.apache.log4j.PatternLayout
log4j.appender.b.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss} %m%n

具体步骤:
#设置日志记录的级别,及需要的输出位置
log4j.rootLogger=debug,a,b

#设置输出源 a 的信息
#设置 a 使用的记录工具 控制台
log4j.appender.a=org.apache.log4j.ConsoleAppender
#使用System.out进行数据输出
log4j.appender.a.Target=System.out
#设置数据输出的格式的布局
log4j.appender.a.layout=org.apache.log4j.PatternLayout
#设置数据显示的模板 %d是日期 类 行 mothod方法 message信息 换行
log4j.appender.a.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %c %l %M %m%n

#文件追加
log4j.appender.b=org.apache.log4j.FileAppender
#指定文件的名称和位置
log4j.appender.b.File=test.log
log4j.appender.b.layout=org.apache.log4j.PatternLayout
log4j.appender.b.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %m%n


了解    比较常用的
%d:表示日期
%c :表示异常的类名(记录日志的类)
%l:表示记录日志的位置
%M:记录异常的方法名
%m:表示日志的堆栈信息(详细信息)
%n:表示换行
%t:发生异常的线程名称
%p:记录日志的级别

d)在java类中使用日志工具 记录日常信息
        注意:必须引入
                    org.apache.log4j.Logger;
  • 在Java类中创建日志记录器的对象
    • private Logger log=Logger.getLogger(类名.class)
  • 使用 Logger中的方法记录信息
    • log.error()
    • log.warn()
    • log.info()
    • log.debug()

log4j记录的内容 给谁看?
a) 运维,维护     人员
b)产品经理,了解该项目中那些模块使用的频率较高
c)可以通过日志   进行数据的恢复



1.异常
2.处理异常后,保证程序可以继续进行(做项目  一定要记录日志)







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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值