(什么是异常 异常后果 异常的结构 什么是检查时一擦 运行时 异常处理方式 try-cathc-fianlly 有什么弊端——log4j 怎么用——>间歇性生成)
##Java语言将程序运行过程中所发生的不正常严重错误称为异常,对异常的处理称为异常处理。
##它会中断正在运行的程序,如果程序出现异常,则同级代码不再运行。
##异常的结构:
Throwable常用方法: public String getMessage():获取异常信息; public void printStackTrace():输出异常堆栈中的异常信息Throwable下有两个子类Exception,Error;当出现Error时,是jdk的错,我们不需要做什么,程序发生这种严重错误时,通常的做法是通知用户并中止程序的执行。Exception又分为运行时异常(RuntimeException)和检查时异常(CheckedException),异常构造方法有: public Exception():无参构造方法; public Exception(String message):可以指定详细异常信息的有参构造方法;
##CheckedException:检查时异常,又称为非运行时异常,这样的异常必须在编程时进行处理,否则就会编译不通过。Exception异常类及其子类(除去RuntimeException异常类及其子类)都是检查时异常。
##RuntimeException:运行时异常,即程序运行时抛出的异常。这种异常在写代码时不进行处理,Java源文件也能编译通过。 RuntimeException异常类及其下面的子类均为运行时异常。
##总结:运行时异常--可以不显式对异常的处理,javac依然可以编译程序,检查时异常:必须显式对异常的处理,不然javac不会对程序进行编译。
##异常处理方式:有两种如下:
try…catch…finally异常处理结构中,try语句块是必须的, catch和finally语句块至少出现一个。 注意:如果try语句块包含的是检查时异常,则在没有通过throws抛出该异常类的情况下,try必须和catch一起使用,当该行代码去掉或注销掉时,catch相应的异常语句块必须去掉。捕获异常的语法结构如下:
try{
//可能抛出异常的语句块
}catch(SomeException1 e){ // SomeException1特指某些异常
//当捕获到SomeException1类型的异常时执行的语句块
} catch( SomeException2 e){
//当捕获到SomeException2类型的异常时执行的语句块
}finally{
//无论是否发生异常都会执行的代码
}
try {
Class.forName("java.long.object");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}catch(ArithmeticException e) {
System.out.println("shuxue");
}catch(Exception e) {//一个try可以有多个catch,try不允许单独使用
System.out.println("未知的异常名");
}finally{//finally 无论try中是否有异常发生,finlly中的代码总会执行,一般用于释放资源
System.out.println("jieshu");
}
## 先子类异常,后父类异常:ArrayIndexOutOfBoundsException异常类(捕获下标越界异常)是RuntimeException的子类,而RuntimeException异常类(捕获运行时异常)是Exception(捕获所有异常)的子类,他们的先后顺序不能颠倒。
## try…catch…finally异常处理的弊端:
如下是个死循环,出现异常,会将异常信息打印控制台——>存入一段缓存,缓存有大小——>当缓存满了,但是异常信息源源不断,则会将最先进入缓存的异常信息移除——>意味着无法全面的发现程序运行期间出现的问题——>为了全面收集系统运行期间出现的所有异常信息,log4j诞生了——>将都有异常信息输出到一个文件中——因为文件在硬盘上——>可以认为无限大 。如下:
public static void main(String[] args) {
System.out.println(1122);
int i=1;
while(true) {
try {
System.out.println("1/0");
} catch (Exception e) {
System.out.println("i");
e.printStackTrace();
}
i++;
}
}
##Log4j:是Apache的一个开源项目,通过使用Log4j,可以控制日志信息格式及其输送目的地(控制台、文件、数据库等),方便后期查找系统运行期间出现的问题,进而便于维护系统。
static Logger logger=Logger.getLogger(Test.class);只要写上这行代码就行,括号中是类名。