Java学习笔记06:Java基本语法异常
- 异常是指程序运行中出现的不期而至的各种情况,如:文件找不到了,网络连接失败,非法参数等...
异常发生在程序运行期间,它影响了正常程序执行流程。
public class demo01 {
public static void main(String[] args) {
}
public void a(){
b();
}
public void b(){
a();
}
}
Java把异常当做对象来处理,并定义了一个基类java.lang.Throwable来作为所有异常的超类。
在Java API中已经定义了许多异常类,这些异常类分为两大类:
- Error(错误)
- Exception(异常)
Error
- Error类对象是由Java虚拟机生成并抛出,大多数错误与编写者操作无关
- Java虚拟机运行错误,当JVM不再有继续执行操作所需的内存资源时,将出现OutOfMemoryError,这些异常发生时,JVM选择线程终止
- 发生在虚拟机试图执行应用时,如类定义错误(NoClassDefFoundError),链接错误,这些错误是不可查的,因为他们在应用程序的控制和处理能力之外,而且绝大多数运行时不允许出现的状况
异常处理机制
- 抛出异常
- 捕获异常
异常处理的5个关键字: - try
- catch
- finaly
- throw
- throws
public class demo01 {
public static void main(String[] args) {
int a = 1;
int b = 0;
// System.out.println(a/b);
try {
System.out.println(a/b);
}catch (ArithmeticException e){
//如果出现异常执行这里
System.out.println("程序出现异常. 变量B不能为0");
}finally {
//无论是否异常最终都会执行到这里
//可以不要,常用来关闭、善后操作
System.out.println("finally");
}
}
}
捕捉的最高级别为Throwable,catch的参数表示要希望捕获的类型
异常也是可以一层层判断的:
package com.exception;
public class demo01 {
public static void main(String[] args) {
int a = 1;
int b = 0;
// System.out.println(a/b);
try {
new demo01().a();
System.out.println(a/b);
}catch (ArithmeticException e){
//如果出现异常执行这里
System.out.println("程序出现异常. 变量B不能为0");
}catch (Throwable e){
System.out.println("最高级别异常");
}finally {
//无论是否异常最终都会执行到这里
//可以不要,常用来关闭、善后操作
System.out.println("finally");
}
}
public void a(){
b();
}
public void b(){
a();
}
}
捕获错误的快捷键: control+alt+t
主动抛出异常
public static void main(String[] args) {
try {
new demo03().test(1,0);
} catch (Exception e) {
e.printStackTrace();
} finally {
}
}
public void test(int a, int b){
if(b==0){
throw new ArithmeticException();
}
System.out.println(a/b);
}
自定义异常
使用Java内置的异常类可以描述在编程时出现的大部分异常情况,除此之外,用户还可以自定义异常。用户自定义异常类,只需要继承Exception类即可.
在程序中使用自定义异常类,大体可以分为以下几个步骤:
- 创建自定义异常类
- 在方法中通过throw关键字抛出异常对象
- 如果在当前抛出异常的方法中处理异常,可以使用try-catch语句捕获并处理;否则在方法的声明处通过throws关键字指名要抛出给方法调用者的异常,继续进行下一步操作
- 在出现异常方法的调用者中捕获并处理异常.
public class demo04 extends Exception {
private int detail;
public void MyException(int a ){
this.detail = 10;
}
//异常打印信息
public String toString(){
return "MyException{"+
"detail="+detail+
"}";
}
}
总结
- 处理运行异常时,采用逻辑去合理规避同时辅助try-catch处理
- 在多重catch块后面,可以加一个catch来处理可以会被遗漏的异常
- 对于不确定的代码,也可以加上try-catch,处理潜在的异常
- 尽量去处理异常,切记只是简单的调用printStackTrace()去打印输出
- 具体如何处理异常,要根据不同的业务需求和异常类型去决定
- 尽量添加finally语句块去释放占用的资源
浙公网安备 33010602011771号