抛出异常

异常的传播 当某个方法抛出了异常时,如果当前方法没有捕获异常,异常就会被抛到上层调用方法,直到遇到某个try ... catch被捕获为止: // exception public class Main { public static void main(String args) { try { process1(); } catch (Exception e) { e.printStackT
抛出异常

自定义异常

Java标准库定义的常用异常包括: Exception ├─ RuntimeException │ ├─ NullPointerException │ ├─ IndexOutOfBoundsException │ ├─ SecurityException │ └─ IllegalArgumentException │ └─ NumberFormatException ├─ IOException
自定义异常

空指针NullPointerException

在所有的RuntimeException异常中,Java程序员最熟悉的恐怕就是NullPointerException了。 NullPointerException即空指针异常,俗称NPE。如果一个对象为null,调用其方法或访问其字段就会产生NullPointerException,这个异常通常是由JVM抛出的,例如: // NullPointerException public class M
空指针NullPointerException

使用JDK Logging

在编写程序的过程中,发现程序运行结果与预期不符,怎么办?当然是用System.out.println()打印出执行过程中的某些变量,观察每一步的结果与代码逻辑是否符合,然后有针对性地修改代码。 代码改好了怎么办?当然是删除没有用的System.out.println()语句了。 如果改代码又改出问题怎么办?再加上System.out.println()。 反复这么搞几次,很快大家就发现使用Syst
使用JDK Logging

使用Commons Logging

和Java标准库提供的日志不同,Commons Logging是一个第三方日志库,它是由Apache创建的日志模块。 Commons Logging的特色是,它可以挂接不同的日志系统,并通过配置文件指定挂接的日志系统。默认情况下,Commons Loggin自动搜索并使用Log4j(Log4j是另一个流行的日志系统),如果没有找到Log4j,再使用JDK Logging。 使用Commons Lo
使用Commons Logging

使用Log4j

前面介绍了Commons Logging,可以作为“日志接口”来使用。而真正的“日志实现”可以使用Log4j。 Log4j是一种非常流行的日志框架,最新版本是2.x。 Log4j是一个组件化设计的日志系统,它的架构大致如下: log.info("User signed in."); │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ ├─
使用Log4j

使用SLF4J和Logback

前面介绍了Commons Logging和Log4j这一对好基友,它们一个负责充当日志API,一个负责实现日志底层,搭配使用非常便于开发。 有的童鞋可能还听说过SLF4J和Logback。这两个东东看上去也像日志,它们又是啥? 其实SLF4J类似于Commons Logging,也是一个日志接口,而Logback类似于Log4j,是一个日志的实现。 为什么有了Commons Logging和Log
使用SLF4J和Logback

Class类

除了int等基本类型外,Java的其他类型全部都是class(包括interface)。例如: String Object Runnable Exception ... 仔细思考,我们可以得出结论:class(包括interface)的本质是数据类型(Type)。无继承关系的数据类型无法赋值: Number n = new Double(123.456); // OK String s = new
Class类