文章目录
异常
一.什么是异常
- 异常:在java中将程序执行中发生不正常的情况称为异常
- String a =10 叫做语法错误,不叫异常
- Error异常:虚拟机无法解决的问题
- eg:递归中,值太大,超出虚拟机范围
- Exception异常:编译错误,且程序可以处理的
1.数组越界 java.lang.ArrayIndexOutOfBoundsException
int[] a = new int[5];
a[5] = 10;
2.空指针异常 java.lang.NullPointerException
String a = null;
a.length();
3.类型转换异常 java.lang.ClassCastException
Object a = "abc";
Integer i = (Integer) a ;
4.数字格式化异常 java.lang.NumberFormatException
new Integer("abc");
5.算术异常 java.lang.ArithmeticException
int a = 10;
int b = 0;
System.out.println(a/b);
二. 异常分为运行期异常,编译期异常
1.try,catch
//算术异常 java.lang.ArithmeticException
int a = 10;
int b = 0;
try {
System.out.println(a / b);
} catch (ArithmeticException e) {
//打印输出异常信息,记录日志
/* System.out.println(e.getMessage());
e.printStackTrace();//打印异常信息到控制台*/
PrintWriter p = new PrintWriter("E:\\log.txt");
e.printStackTrace(p);
p.flush();
p.close();
System.out.println("操作失败");//用户进行提示,通过一些日志组件
}
System.out.println("运行接下来的代码");
2.finally
无论是否发生异常,代码依然执行
//finally无论是否发生异常,代码依然执行
Dome2 y = new Dome2();
System.out.println( y.x(10,0));
}
/*
try{}
finally{}
try没有处理异常,一旦try出现问题,执行finally,程序终止
不管try有没有处理异常,也有return,也优先执行finally
*/
public int x(int a,int b){
try{
int c ;
c = a / b ;
return c;
}catch (ArithmeticException e){
return -1;
}finally {
System.out.println("牛皮");
}
3.throws
- throws:作为方法的声明,声明此方法中可能出现的某种异常
- 这个多为编译异常
- main方法里必须是try catch
- 谁调用谁用throws
Dome3 s2 = new Dome3();
try {
s2.s();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
public void s () throws UnsupportedEncodingException {
this.s1();
}
public void s1 () throws UnsupportedEncodingException {
"abc".getBytes("utf-8");
}
4.抽象方法写的异常,子类继承时也要写
public abstract class Dome4 {
//throws后面这个在父类中范围必须大于或等于子类继承的Exception
public abstract void s () throws Exception;
public abstract void s1 ();
public abstract void s2 ();
}
public class Dome5 extends Dome4{
@Override
public void s() throws UnsupportedEncodingException {
"abc".getBytes("utf-8");
}
@Override
public void s1() {
}
@Override
public void s2() {
}
}
5. throw 运行期,捕获一个异常对象
在不满足某种条件时,在方法中显示抛出一个异常对象,程序终止
public class Dome6 {
public static void main(String[] args) {
Dome6 d = new Dome6();
try {
d.x(120);
} catch (Exception e) {
e.printStackTrace();
}
}
public String x(int y) throws Exception {
if (y>100||y<0){
throw new Dome7("数字太大");//Dome7是自定义异常,根据实际业务逻辑要求,指定一种场景的异常
}
if (y>90){
return "优秀";
}else{
return "失败";
}
}
}
- Dome7是自定义异常,根据实际业务逻辑要求,指定一种场景的异常
- Dome类继承Exception类
- 在这里通过有参构造函数,进行判断,如果值不满足条件,则输出异常
public class Dome7 extends Exception{
public Dome7() {
}
public Dome7(String message) {
super(message);
}
}