Java基础学习补充 -- 异常处理和log4j日志
Java中的异常处理

异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的。
Java中所有异常的基类Throwable:Throwable又分为Error类和Exception类。
错误:Error类以及他的子类的实例,代表了JVM本身的错误。错误不能被程序员通过代码处理,Error很少出现。
异常:Exception以及他的子类,代表程序运行时发送的各种不期望发生的事件。可以被Java异常处理机制使用。Exception又分为检查时异常和运行时异常(RuntimeException)
检查性异常:最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的。
运行时异常: 运行时异常是可能被程序员避免的异常。与检查性异常相反,运行时异常可以在编译时被忽略。
Java中的异常分为运行时异常和检查时异常,运行时异常表示RuntimeException以及子类,这些异常无需在程序中进行捕获,大多可以通过代码进行控制避免,检查时异常包过除运行时异常表示RuntimeException以及子类以外其他所有异常,这些异常需要在程序中进行捕获处理。
异常捕获
1.使用:使用 try/catch 关键字可以捕获异常。try/catch 代码块放在异常可能发生的地方。使用Try捕获可能出现异常的代码,使用catch块进行不同异常操作的处理,当try块中的程序出现异常时,将进入对应的catch代码块进行操作,而不再执行try块中剩余的代码。
使用try/catch捕获异常后,如果程序出现异常,将不会阻断程序的运行。
2.写法:
try{
// 可能出现异常的代码块
}catch(ExceptionName1 e1){
//Catch块
}catch(ExceptionName1 e2){
//Catch块
}
注意:一个 try 代码块后面跟随多个 catch 代码块,一般最后使用Exception作为结束,表示捕获所有异常,但是如果要使用多个catch,那么Exception异常就不能放在要捕获的具体异常之前。
3.常用方法:e1.printStackTrace():打印堆栈信息;e1.getMessage():获得错误信息
try/catch如果需要确保程序能够不被中断,必须确保catch快能够捕获程序中可能出现的所有异常
finally:表示无论程序是否出现异常,哪怕try中出现了return语句,也必须执行完finally才能结束当前方法。
finally块不管异常是否发生,只要对应的try执行了,则它一定也执行。只有一种方法让finally块不执行:System.exit()。因此finally块通常用来做资源释放的操作:如关闭I/O流,关闭数据库连接等等。
try{
// 程序代码
}catch(异常类型1 异常的变量名1){
// 程序代码
}catch(异常类型2 异常的变量名2){
// 程序代码
}finally{
// 程序代码
}
注意:一个try至少要有一个catch块,否则, 也要至少要有1个finally块,才能构成一个捕获异常的语句。
抛出异常
如果一个方法出现了异常而没有捕获(检查性异常),那么该方法必须使用 throws 关键字来声明,将异常抛出,抛出后,由调用该方法的地方进行捕获异常,如果不想捕获可以继续抛出。原则上,在main方法中如果出现了异常,不建议再抛出,如果抛出,则可能导致程序无法正常运行。
throws 关键字放在方法名的尾部,如果抛出多个异常,异常之间使用逗号分割。

也可以使用 throw 关键字抛出一个异常,即,在程序中手动抛出异常,无论它是新实例化的还是刚捕获到的。

如果使用throw抛出的是一个检查型异常,那么必须使用throws抛出声明,如果使用throw抛出的是一个运行时异常,那么不必再使用throws进行抛出声明。
自定义异常
自定义异常类,必须基础现有的异常类
通常继承Exception 或者 RuntimeException,分别表示声明了一个检查时异常和一个运行时异常。
并且重写其getMessage()方法。

Log4j日志的使用
log4j的使用:
1、导入log4j.jar
2、在src同级下创建log4j.propetites配置文件
3、在需要打印日志的类中通过Logger.getLogger()拿到一个日志对象
4、分别调用不同局级别的打印语句,进行日志的输出
log4j的配置文件的设置:http://www.blogjava.net/zJun/archive/2006/06/28/55511.html

public class Demo03_log4j {
/**
* 通过Logger.getLogger拿到log对象,参数传入本类的class
*
* log4j的使用:
* 1、导入log4j.jar
* 2、在src的目录下(与包同级)创建log4j.propetites配置文件
* 3、在需要打印日志的类中通过Logger.getLogger()拿到一个日志对象
* 4、分别调用不同局级别的打印语句,进行日志的输出
*/
static Logger log = Logger.getLogger(Demo03_log4j.class);
public static void main(String[] args) {
//打印一条错误信息
log.error("打印一条错误信息");
//打印一条警告信息
log.warn("打印一条警告信息");
//打印一条info信息
log.info("打印一条info信息");
//打印一条测试信息
log.debug("打印一条测试信息");
}
}
Java基础学习补充 -- 异常处理和log4j日志的更多相关文章
- Java基础学习总结(39)——Log4j 1使用教程
1. 配置文件 Log4J配置文件的基本格式如下: #配置根Logger log4j.rootLogger = [ level ] , appenderName1 , appenderN ...
- Java基础学习总结(25)——Log4j快速入门教程
log4j是一个优秀的日志组件,基本上所有的java开发项目都会用到它.下面将自己学习的一些心得总结一下,方便以后学习. log4j在项目中都不会单独使用,至少是我写过的java项目中没有.一般来说l ...
- Java基础学习总结(42)——Log4j 2使用教程
1. 去官方下载log4j 2,导入jar包,基本上你只需要导入下面两个jar包就可以了(xx是乱七八糟的版本号): log4j-core-xx.jar log4j-api-xx.jar 2. 导入到 ...
- 尚学堂JAVA基础学习笔记
目录 尚学堂JAVA基础学习笔记 写在前面 第1章 JAVA入门 第2章 数据类型和运算符 第3章 控制语句 第4章 Java面向对象基础 1. 面向对象基础 2. 面向对象的内存分析 3. 构造方法 ...
- Java基础学习-- 继承 的简单总结
代码参考:Java基础学习小记--多态 为什么要引入继承? 还是做一个媒体库,里面可以放CD,可以放DVD.如果把CD和DVD做成两个没有联系的类的话,那么在管理这个媒体库的时候,要单独做一个添加CD ...
- Java基础学习(3)
Java基础学习(三) Java异常 Throwable类:所有异常的祖先类 Error:虚拟机异常.内存错误.没法处理 Exception:编码.环境.用户操作输入出现问题 非检查异常(自动捕获): ...
- Java基础学习中一些词语和语句的使用
在Java基础学习中,我们刚接触Java会遇到一些词和语句的使用不清的情况,不能很清楚的理解它的运行效果会是怎么样的,如:break,continue在程序中运行效果及跳转位置, 1.先来看看brea ...
- Java基础学习笔记总结
Java基础学习笔记一 Java介绍 Java基础学习笔记二 Java基础语法之变量.数据类型 Java基础学习笔记三 Java基础语法之流程控制语句.循环 Java基础学习笔记四 Java基础语法之 ...
- 转载-java基础学习汇总
共2页: 1 2 下一页 Java制作证书的工具keytool用法总结 孤傲苍狼 2014-06-24 11:03 阅读:25751 评论:3 Java基础学习总结——Java对象的序列化和 ...
随机推荐
- JDBC-Statement 对象
Statement 对象 一旦我们获得了数据库的连接,我们就可以和数据库进行交互.JDBC 的 Statement,CallableStatement 和 PreparedStatement 接口定义 ...
- hdu1525 Euclid's Game , 基础博弈
http://acm.hdu.edu.cn/showproblem.php?pid=1525 题意: 两人博弈,给出两个数a和b, 较大数减去较小数的随意倍数.结果不能小于0,将两个数随意一个数减到0 ...
- bzoj3173: [Tjoi2013]最长上升子序列(树状数组+二分倒推)
3173: [Tjoi2013]最长上升子序列 题目:传送门 题解: 好题! 怎么说吧...是应该扇死自己...看错了两次题: 每次加一个数的时候,如果当前位置有数了,是要加到那个数的前面,而不是直 ...
- linux 内存不足时候 应该及时回收page cache
另一起问题是24G内存的系统,空闲内存已经不到50M 1. 确认该系统的版本是64位 # uname -a Linux gxgd-nms-app 2.6.18-194.el5xen #1 SMP Tu ...
- javascript系列-class5.数组
转载请标明出处! 栈堆结构: 堆栈都是一种数据项按序排列的数据结构,只能在一端(称为栈顶(top))对数据项进行插入和删除. 栈:存放的是路径:容量有限(在一开始被定义之后就不会改变了): ...
- Android 国际区号注册手机号编码 以及常用城市列表
附上 国际区号编码:我是定义到arrays.xml里面了 <?xml version="1.0" encoding="utf-8"?> <re ...
- Mac 如何修改Mac系统的默认截图路径
step 1 :打在桌面或者其他任意位置创建一个文件夹:截图图库.我创建的路径是:/Users/yilin/Documents/截图图库(仅供参考) step 2:打开终端,输入以下命令:defaul ...
- .startsWith和endsWith的使用方法与说明
a.startsWith(b) --判断字符串a,是不是以字符串b开头 a.endsWith(b) --判断字符串a,是不是以字符串b结尾
- CentOS 6.9 CentOS 7.4 自动安装系统 kickstart
通过ks文件 实现 CentOS 6.9 & 7.4 自动安装系统 环境: VMware 14.0 Pro版 光盘镜像: CentOS-6.9-x86_64-minimal.iso ks文件生 ...
- grant 命令
创建拥有所有权限账户.可以远程连接.并且允许用户再将该权限授予其它用户: grant all privileges on *.* to root @"%" identified b ...