Java异常及处理

Java中的异常及处理(try catch、throws)

概念

Java中异常的概念

代码正常运行不会出问题,但是遇到意外,参数变量,不符合要求,发生意外,代码终止运行

代码中的异常处理好了,代码就可以顺利的继续运行!

try catch语法

try-catch的语法结构及链式结构多异常处理方式

语法:

try{

//可能产生异常的代码

}catch(捕获的异常类型 e){//e是形式参数

//该异常捕获之后要做的操作

}catch(捕获的异常类型 e){//e是形式参数

//该异常捕获之后要做的操作

比如:

try{

​ Systeom.out.println(1/0);

}catch(Exception e){

​ System.out.println(“抛出异常后的语句”);

}

Demo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package com.ifueenExceptionMsg;

public class ExceptionMsg {
/*
* 异常信息的获得方式
* 和catch中的参数有关
* */
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
System.out.println(1/0);
} catch (Exception e) { //e代表的是在代码抛出异常时捕获到的异常对象
// TODO: handle exception
System.out.println("异常对象:"+e);
System.out.println(e.getMessage()); //获得产生异常的信息
e.printStackTrace(); //将所有异常信息显示出来
}
}

}

throws

语法结构:方法后面使用throws 需要抛出的异常类型

抛出异常的注意事项:

①方法抛出运行时异常,在方法头可以不用抛出异常

②方法抛出编译时异常:方法必须处理异常,或者抛出同类异常,或者抛出异常该异常的父类类型异常

Demo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package com.ifueen.throws;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/*
* 异常信息抛出
* */
public class throws {

public static void main(String[] args) throws ParseException { //这里也将异常进行抛出
// TODO Auto-generated method stub
formt("32"); //给方法传入参数
}
static void formt(String date) throws ParseException{ //这里将异常抛出
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(); //实例化对象
Date date2 = simpleDateFormat.parse(date); //这里会报错,因为字符串元素有问题
System.out.println(date2);
System.out.println("测试异常是否已经抛出");
}

}

finally结构

finally语句块

try-catch语句块可以用写finally

处理异常之后finally语句块一定会执行到

finally语句块中,一般用来处理什么内容

a.关闭流资源[ IO流知识部分再了解 ]

b.释放锁[ 线程知识部分再了解 ]

注意 :

一般不要在finally里面写返回语句,程序难理解

finally语句之前,如果有执行退出虚拟机,也是不会执行finally语句块

Demo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package com.ifueen.Finally;

import jdk.internal.dynalink.beans.StaticClass;

public class Finally {
/*
* Java中的finally语句块
* 概念:
* finally 语句块是try catch 一定会执行到的一个代码块【释放锁资源,关闭流资源】
* 注意:
* 如果System.exit(0);//退出虚拟机,执行不到finally
* 一般不会在finally中执行返回语句
* */
public static void main(String[] args) {
// TODO Auto-generated method stub
String name = test(); //用String类型来接收方法的返回值
System.out.println(name); //打印输出
}
static String test(){
String name = "我好喜欢Java,好喜欢...";
try {
System.out.println(1/0); //这里会报错,所以用try包起来
name = "不喜欢Java了";
return name; //返回name
} catch (Exception e) {
// TODO: handle exception
name = "我变心了,我喜欢Python"; //处理错误后执行
return name; //返回name
}finally { //finally在执行流程中的权限要高于try catch,且必须执行
name = "我又又又又变心了,PHP天下第一!!!";
System.out.println(name);
}
}

}

throws 和 throw的区别

throws 处理异常

在方法头抛出异常

throw 开发代码存在以外的情况,自己主动抛出异常[产生异常]

在方法内部 throw new NullPointException();

自定义异常

为什么要自定义异常?

因为在我们平时的开发中会遇到很多不同的异常,Java不可能把每种情况都写出来,这时候就需要我们自己来定义异常

自定义方式

  1. 自定义类继承异常类

  2. 参照其他异常通过Exception设置异常提示信息

示例Demo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package com.ifueen.SelfException;

public class SelfException {
/*
* 自定义异常
* */
static String name = "小丽"; //定义全局变量
public static void main(String[] args) throws MyException {
// TODO Auto-generated method stub
test("小河"); //将name作为参数传递进去
}
static void test(String id) throws MyException{
System.out.println("欢迎你来注册我们的账号");
if (id.equals(name) ) { //判断是否相等
throw new MyException("账号已经存在"); //这里生成自定义的异常
}
System.out.println("恭喜账号注册成功...");
}
}

自定义异常类:MyExcepton

1
2
3
4
5
6
7
8
9
10
package com.ifueen.SelfException;

public class MyException extends Exception{

public MyException(String msg) {
// TODO Auto-generated constructor stub
super(msg); //将参数返回给父类
}

}

Java中的异常会伴随这我们整个开发生涯,所以得很重视

❤赏点钱让我买杯快乐水8❤