JAVA中的异常处理及日志(log4j为例)的使用

Java的异常

1.Java中所有异常和错误的基类:Throwable
    Throwable
  error        Exception
      (检查时异常)(运行时异常)
             RuntimeException
2.Java中的异常分为运行时异常和检查时异常

运行时异常是表示RuntimeException以及所有子类,这些异常无需再程序中捕获,大多可以通过代码进行控制避免

检查时异常:除了RuntimeException以及其所有子类之外的所有异常,这些异常必须在程序中进行捕获处理。

异常的第一种处理机制——使用try-catch进行异常捕获

1.使用try块包裹可能出现异常的代码,使用多个catch块进行不同异常的处理

当try块中的程序出现异常时,将进入对应的catch块进行操作,而不再执行try块中的代码

使用try—catch捕获异常后,如果程序出现异常,将不会阻断程序的运行

2。catch块可以有多个,一般最后用catch(Exception e)收尾,表示捕获所有异常
但多个catch块顺序必须由小到大

3.e.getMessage():拿到错误信息
e.printStackTrace(); 打印堆栈信息

4.try catch结构如果需要确保程序不被中断,必须确保程序块可以捕获程序中可能出现的所有异常(最后用catch(Exception e)收尾)

5.finally表示无论程序是否出现异常,都必须执行的语句,即便try块中有return语句也必须执行完finally才能结束当前方法。

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

所以,finally通常用于进行流的关闭,资源释放等操作

6.try-finally可以组合存在,而不一定必须包含catch
表示出现异常不进行操作,但是finally中的代码必须执行

异常的第二种处理机制——抛出机制

1.在方法体中如果出现异常,可以不用try-catch捕获,而使用throws在方法声明上进行抛出
抛出后,在调用方法的地方进行抛出,如果捕获可以继续抛出
原则上,main方法中必须进行异常处理,如果继续抛出将会导致程序出现异常而无法发现

2.throws如果抛出多个异常,可以使用逗号分隔

3.throw 在程序中手动抛出异常 

throw new IOException("输入年龄不合法");

4.如果使用throw抛出的是一个检查型异常,那必须在方法体上使用throws进行抛出声明

如果使用throw抛出的是一个运行时异常,那么不必再使用throws进行抛出声明。

实例代码:

try {
    setAge(110);
} catch (IOException e) {
    e.printStackTrace();
}
public static void setAge(int i) throws IOException{
    if(i<0||i>100){
        throw new IOException("输入年龄不合法");
    }
}

如何自定义异常类

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

实例代码:

class AgeException extends Exception{
    private String message=null;

    public AgeException(){

    }
    public AgeException(String message){
        this.message=message;
    }
    public String getMessage(){
        return message;
    }
}
class AgeRuntimeException extends RuntimeException{
    private String message=null;

    public AgeRuntimeException(){

    }
    public AgeRuntimeException(String message){
        this.message=message;
    }
    public String getMessage(){
        return message;
    }
}

log4j的使用
1.导入log4j-1.2.17.jar

2.在src目录同级下,创建log4j.properties配置文件

3.在需要打印日志的类中通过Logger.getLogger()拿到一个日志对象,参数传入本类.class

4.使用日志对象,分别调用不同级别的打印语句进行日志的输出!
  log.debug("打印一条debug信息");
  log.info("打印一条info信息");
  log.warn("打印一条warn信息");
  log.error("打印一条error信息");

log4j的配置文件log4j.properties

#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平台为“\r\n”,Unix平台为“\n”
#  %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

原文地址:https://www.cnblogs.com/hjcblog/p/8905893.html

时间: 2024-11-07 08:49:23

JAVA中的异常处理及日志(log4j为例)的使用的相关文章

【转】Java中关于异常处理的十个最佳实践

原文地址:http://www.searchsoa.com.cn/showcontent_71960.htm 导读:异常处理是书写强健Java应用的一个重要部分,Java许你创建新的异常,并通过使用 throw 和 throws关键字抛出它们. 异常处理是书写强健Java应用的一个重要部分,它是关乎每个应用的一个非功能性需求,是为了优雅的处理任何错误状况,比如资源不可访问,非法输入,空输入等等.Java提供了几个异常处理特性,以try,catch和 finally 关键字的形式内建于语言自身之中

Java中的异常处理机制

Java中的异常处理机制 示例 public class test { public static void main(String[] args) { // TODO Auto-generated method stub String s="hello"; int i=Integer.parseInt(s); } } 运行异常结果 在上述代码中Integer.parseInt表示把字符串类型转化成整数类型,同时Integer是Int的封装类:程序会报错,因为计算机没有办法把hello

说说asp.net中的异常处理和日志追踪

关于异常的处理想必大家都了解try{}catch(){}finally{},这里就不再讲了.通过在VS里的"调试"-"异常",在弹出的异常对话框里的Common Language Runtime Exceptions栏里是.NET中的异常层次结构. 自定义异常: 如果系统提供的异常类已经不能够满足应用系统开发的需要,或者开发团队需要一套自定义异常处理机制,可以创建自定义的异常类.自定义异常类应该直接过间接地继承自ApplicationException类,并且其最好

Java中的异常处理机制的简单原理和应用。

异常是指java程序运行时(非编译)所发生的非正常情况或错误,与现实生活中的事件很相似,现实生活中的事件可以包含事件发生的时间.地点.人物.情节等信息,可以用一个对象来表示,Java使用面向对象的方式来处理异常,它把程序中发生的每个异常也都分别封装到一个对象来表示的,该对象中包含有异常的信息. Java对异常进行了分类,不同类型的异常分别用不同的Java类表示,所有异常的根类为java.lang.Throwable,Throwable下面又派生了两个子类:Error和Exception,Erro

深入了解 Java 中的异常处理 + 面试题

# 深入了解 Java 中的异常处理 + 面试题 在程序开发中,异常处理也是我们经常使用到的模块,只是平常很少去深究异常模块的一些知识点.比如,try-catch 处理要遵循的原则是什么,finally 为什么总是能执行,try-catch 为什么比较消耗程序的执行性能等问题,我们本讲内容都会给出相应的答案,当然还有面试中经常被问到的异常模块的一些面试题,也是我们本篇要讲解的重点内容. 异常处理基础介绍 先来看看异常处理的语法格式: try{ ... } catch(Exception e){

Java中实现异常处理的基础知识

异常 (Exception):发生于程序执行期间,表明出现了一个非法的运行状况.许多JDK中的方法在检测到非法情况时,都会抛出一个异常对象. 例如:数组越界和被0除. 源代码示例: package yanzheng; //关于异常  2015.11.11 import javax.swing.*; public class AboutException { public static void main(String[] args) { int i=1, j=0, k; //   k=i/j; 

java中的异常处理原理浅谈

什么是异常呢: 在现实生活中,总会有一些问题,聚焦在生活上,我们会有工作问题,比如工作不满意,工作薪水低,工作没有发展前景,那么我们会成为这是一个“问题”. 在java的世界中,那么我们相对应的是程序,那么程序也有这样或者那样的问题,那么我们成为“异常”.异常就是程序在运行时出现的不正常现象. java把异常封装成对象的描述,来高度的概括. java中Error我们无能为力.我们还是聊聊Exception Exception的分类: 1.编译时异常 必须进行捕获 2.运行时异常(也就是Runti

Java中的异常处理从概念到实例

1.概念 采用新的异常处理机制 在以往的程序开发过程中,经常采用返回值进行处理.例如,在编写一个方法,可以返回一个状态代码,调用者根据状态代码判定出错与否.若状态代码表示一个错误,则调用这进行相应的处理,或显示一个错误页面或错误信息.通过返回值进行处理的方法是有效的,但是有它的许多不足之处. 1. 程序复杂 2. 可靠性差 3. 返回信息有限 4. 返回代码标准化困难 采用错误代码和异常处理相结合的方式的优越性: 1. 把错误代码与常规代码分开 2. 可以在catch中传播错误信息 3. 可以对

牛刀小试 - 趣谈Java中的异常处理

概述 顾名思义,通俗来讲异常就是指,那些发生在我们原本考虑和设定的计划之外的意外情况. 生活中总是会存在各种突发情况,如果没有做好准备,就让人措手不及. 你和朋友约好了明天一起去登山,半道上忽然乌云蔽日,下起了磅礴大雨.这就是所谓的异常情况. 你一下子傻眼了,然后看见朋友淡定的从背包里掏出一件雨衣穿上,淫笑着看着你.这就是对异常的处理. 对于一个OO程序猿来讲,所做的工作就是:将需要处理的现实生活中的复杂问题,抽象出来编写成为程序. 既然现实生活中总是存在着各种突然的异常情况,那么对应其抽象出的