您的位置:首页 > 编程语言 > Java开发

[JAVA基础]异常、断言、日志和调试

2017-08-23 23:08 399 查看
一、概述

在理想状态下,用户输入数据的格式永远是正确的,打开的文件也一定存在,但现实中的充满了不良数据和问题代码。JAVA需要有机制去处理这些可能出现问题的情形。

异常:对于可能造成程序崩溃的错误输入,JAVA使用“异常处理”的错误捕获机制;

断言:大量的检测以验证程序操作的正确性,检测完之后不必保留检测,在需要时再将它们粘贴回来,断言可以进行有选择的检测;

日志:当程序出现错误时,未必能及时进行分析,可以通过记录问题,以备日后的分析

调试:如何获得一个正在运行的JAVA程序的有用信息,在IDE中的调试技巧

二、异常

什么是异常?

(1) 用户输入错误:输入内容错误、格式错误等;(2)设备错误:硬件故障;(3)物理限制:磁盘内存不足;(4)代码错误

什么是异常处理的任务?

将控制权从错误产生的代码Transfer给能够处理这个错误的错误处理器

2.1 异常的分类



附图1 Java中的异常层次
(1) Error:JAVA内部错误和资源耗尽错误;

(2) Exception:程序导致的运行时错误RuntimeException和IO错误IOException

1) RuntimeException:空指针、非法的类型转换和数组越界访问

2) IOException:打开不存在的文件等

(3) 检查异常和未检查异常

未检查异常:派生于Error或者RuntimeException; 其它则是检查异常。

(4) 抛出异常和捕获异常

1) 抛出异常

语法:方法 throws 异常名

什么情况需要抛出异常呢? A. 方法调用了一个抛出已检查异常的方法;B.程序运行时发现错误;C.程序出现错误;D.JAVA虚拟机和运行时库的内部错误

可以抛出多个异常,如方法 throws 异常名1,异常名2,...,异常名n。不可以抛出未检查异常,未检查异常要么是不可控的(Error)要么是应该避免发生的(RuntimeException)

2) 捕获异常

try...catch{} 的运行机制?A. try语句块没有抛出任何异常,则跳过catch子句;B.try语句块抛出一个在catch子句中说明的异常,则程序跳过try中其余代码,执行catch子句的代码;C.try语句块抛出一个w为在catch子句中说明的异常,则这个方法立即退出。不论异常是否被捕获,finally子句都会执行

抛出异常和捕获异常如何选呢?通常,应该捕获那些知道如何处理的异常,将不知道如何处理的异常进行抛出

为什么在捕获异常的同时抛出异常呢?目的:改变异常的类型,通常,为了不失去原来异常的信息,可以采用“包装”技术,使得新的异常类型包含有原有异常的信息。

三、断言

四、日志

每个Java程序员都会在有问题的代码中插入一些System.out.println()方法来帮助观察程序运行的过程,当发现问题的原因后又将这些语句删掉,记录日志API就是为了规范这些行为而设计的。

(1) 基本日志:Logger.getGlobal().info("hello Java!"); 取消日志:Logger.getGlobal().setLevel(Level.OFF);

(2) 高级日志

在一个企业级的应用程序中,不能将所有的日志都记录在一个全局日志记录器之中,可以自定义日志记录器。

自定义日志记录器语法:private static final Logger myLogger = Logger.getLogger("com.gusizhu.myapp");

日志记录器的级别:SEVERE WARNING INFO CONFIG FINE FINER FINEST,默认的日志记录器配置记录了INFO或者更高级别的所有记录,显示日志调用的类名和方法名,,如果不行,则可以调用logp()方法

日志通常用于记录那些不可预料的异常。  myLogger.throwing() .log()方法

五、调试

(1) 打印、记录变量的值

system.out.println("x = " + x);

Logger.getGlobal().info("x = " + x); 还有 Logger.getGlobal().info("this = " + this); 

(2) 在每一个类中放置一个main方法

(3) Junit框架和使用

(4)  日志代理

(5) 利用Throwable类的printStackTrace()方法等
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 异常