异常: * 继承体系:Throwable 异常类:Error错误类/Exception异常类 * Exception异常类 * 编译期异常(受检异常checked): 在高级开发工具中,编写代码过程中,代码中就包含的有异常信息,需要进行异常的处理,否则编译异常 * 运行期异常(运行期runtime): 在编译过程中不会发生异常,只有class文件加载到jvm虚拟机中才能检查出的异常 * 编译期异常 * IO异常,... --->Exception * 运行期异常 --->RuntimeException * ArithmeticException 算数异常 * 索引越界异常 StringIndexOutOfBoundsException * 空指针异常 NullPointerException * 结果: * 异常在程序中发生后,会导致程序异常终止,异常后面的代码是不会执行或者加载的 * * 异常: * JVM 首先JVM会找到匹配的异常类(对象)来接收异常信息 * 异常对象包括:异常的类型/异常产生的位置/异常产生的原因/异常解决的办法(措施) * 异常链: * 一个异常可能会引发其他异常 * cause by ...... * * 解决异常: * 通过它的提示信息来定位异常产生的位置--->原因---->日志
Properties * 它是一个属性集,属于HashTable类的一个子类,可以使用Map接口当中所有的方法 * 它的键值对类型都是字符串 * 常用API方法: * store() --->把属性集中的数据存储到文件中 * load() ---->把文件中的数据读取到Properties属性集中 * getProperty() ---->获取属性值 * setProperty() ---->设置
备注: * 如果类中定义的成员变量为静态的,那么该静态成员变量是不能进行序列化的 * 原因:因为静态成员变量不属于对象的,存储的位置不在对象当中,在方法区中的静态区中存储 * 所以我们在进行对象数据序列化的时候,是不能把方法区中静态区中的数据进行序列化,最终 * 静态成员变量值是不会存储到序列化的文件中
异常处理措施: * 1. 可以使用try-catch语句块 * 2. 使用throws往上抛出异常,由程序调用者来处理下层的异常----->异常最终会抛给虚拟机 * * 备注: * 1. 把可能引发异常的代码放到try语句块中,catch语句块中定义的异常类型一定对应匹配,否则异常不会被处理掉,程序还是会异常终止. * 2. 即便我们书写了多个catch语句块,当try语句当中引发异常后,引发异常代码后的内容将不会被程序执行,程序此时会直接跳跃到对应的catch语句块中 * 3. try-catch语句块除了可以并列使用还可以嵌套使用 * 4. 在catch语句块中,把较大范围的异常类型放到后面,把范围较小的异常类型放到前面----->子在上,父在下。 * 5. 如果在try语句块当中,有些代码是必须要加载的,我们可以把必须要加载的代码放到finally语句块中去加载 * 6. 使用throws抛出异常处理办法,更多时候是对程序调用着进行友好提示 * 7. 定义方法功能时,如果对方法参数有要求,当参数不满足要求时可以手动制造一个异常,往外抛出,使用throw来抛出一个受检异常---->(Assert)--->断言