• JAVA异常详解


    【Java Exception】
    (1.)java中所有异常和错误的基类Throwable
    Throwable

    Error Exception
    (检查时异常) (运行时异常)
    RunTimeException

    (2.) Java中的异常分为运行时异常和检查时异常:
    运行时异常时表示RunTimeException以及所有子类,这些异常无需早程序中捕获,大多数可以通过代码进行控制避免 。
    检查时异常表示出了RunTimeException以及所有子类之外的所有异常,这些异常要求必须在程序中进行捕获处理。
    --------------------------------------------------------------------------------
    【使用try-catch进行异常捕获】
    (1.)使用try{}块包裹可能出现异常的代码,使用多个catch{}块进行不同异常的处理操作。
    当try块中的程序出现异常时进入对应的catch{}块进行操作,而不再执行try块中剩余的代码。

    使用try-catch捕获异常后,如果程序出现异常,将不会阻断程序运行
    (2.)catch{}块可以有多个,一般最后使用Exception作为结束,表示捕获所有异常。
    但是,多个catch{}块在顺序上,必须从小到大
    (3.)e,getMessage()拿到错误信息;
    e.printSrackTrace()打印 堆栈信息
    (4.)try-catch结构如果需要确保程序能够不被中断,必须确保catch{}块能够捕获程序中可能出现的所有异常。
    (5.)finally{}表示程序是否出现异常,都必须执行的语句。
    即便try{}块有return语句,也必须执行完finally才能结束当前方法。

    System.exit(0); 退出程序,将不再执行finally的语句。

    所以finally通常用于进行流的关闭,资源释放等操作。
    (6.)try-finally可以组合存在,而不一定必须包含catch
    表示出现异常不进行处理,但是finally中的代码必须执行

    【异常的第二种处理机制--抛出机制】
    (1.)在方法体中,如果出现异常,可以不进行tru-catch捕获,而使用throws在方法声明上进行抛出!
    抛出后,由调用该方法的地方进行捕获,如果不捕获可以继续抛出
    原则上,在main方法中必须进行异常处理,如果不处理,可能导致程序出现异常而无法发现。
    (2.)throws如果抛出多个异常,使用逗号分隔:
    throws 异常a,异常b
    (3.)throw关键字,在程序中,手动抛出异常。
    throw new IllegalArgumentException("你输入的年龄不合法");
    (4.)如果使用throw抛出的是一个检查时异常,那么必须在方法体上,使用throws进行抛出声明。
    如果使用throw抛出的是一个运行时异常,那么,不必使用throws进行抛出声明


    自定义异常类,必须继承自现有异常类。通常继承Exception或者RunTimeException,分别表示声明了一个检查时异常和一个运行时异常。

    【log4j的使用】

    (2.)在src目录同级下,创建log4j.propetites配置文件
    (3.)在需要打印日志的类中,通过Logger.getLogger()拿到一个日志对象,参数传入本类类名.class
    (4.)使用日志对象,分表调用不同级别的打印语句,进行日志的输出!
    log.deBug("打印一条deBug信息");
    log.info("打印一条info信息");
    log.warn("打印一条warn信息");
    log.error("打印一条error信息");

    【log4j的配置文件设置】
    #log4j.rootLogger 表示根配置。
    #log4j.rootLogger = [ level ] , appenderName1 , appenderName2
    #level 表示可以写入日志的级别:
    #ERROR > WARN > INFO > DEBUG
    #设置info 表示级别大于info的都可以进行日志输出

    # 级别后面的多个选项,表示多个适配器的名字,适配器的名字可以随便起
    log4j.rootLogger=info, logfile,A,B

    # 进行各个适配器的配置。 log4j.appender.适配器名字

    #[为Appender指定日志输出目的地]
    #org.apache.log4j.ConsoleAppender(控制台),
    #org.apache.log4j.FileAppender(文件),
    #org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),
    #org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)
    log4j.appender.A=org.apache.log4j.ConsoleAppender
    # 设置控制台打印的语句。 System.out/System.err
    log4j.appender.A.Target=System.err
    # 使用哪种布局进行日志显示:
    # org.apache.log4j.HTMLLayout(以HTML表格形式布局),
    # org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
    # org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
    #org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
    log4j.appender.A.layout=org.apache.log4j.SimpleLayout


    log4j.appender.logfile=org.apache.log4j.FileAppender
    # 设置文件的地址
    log4j.appender.logfile.File=mylog.log
    log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
    # 为PatternLayout进行样式的设置。
    #   %m 输出代码中指定的消息
    #  %p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL
    #  %r 输出自应用启动到输出该log信息耗费的毫秒数
    #  %c 输出所属的类目,通常就是所在类的全名
    #  %t 输出产生该日志事件的线程名
    #  %n 输出一个回车换行符,Windows平台为“ ”,Unix平台为“ ”
    #  %d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss , SSS},输出类似:2002年10月18日 22 : 10 : 28 , 921
    #  %l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java: 10 )
    log4j.appender.logfile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %l %F %p %m%n
    # 为当前适配器,指定单独的级别,可以覆盖rootLogger的配置
    log4j.appender.logfile.Threshold = warn
    # 表示写入新日志时,是否清空日志文件;false表示清空原文件,true表示在原文件后面追加新日志
    log4j.appender.logfile.Append = false

  • 相关阅读:
    个人网站
    物理读,逻辑读,预读
    正则表达式
    面向对象五大基本原则
    工作总结
    sql性能优化
    sqlServer游标的使用
    ASP.NET安全[开发ASP.NET MVC应用程序时值得注意的安全问题](转)
    一个简单问题引发对IEnumerable和IQueryable的思考
    EFCodeFirst 各种命令整理
  • 原文地址:https://www.cnblogs.com/cuteboy/p/8907728.html
Copyright © 2020-2023  润新知