目录
1.什么是异常?
异常就是程序在运行时出现意外,而导致程序无法正常往下执行(终止)。
2.为什么需要异常处理
异常处理的目的就是想让程序继续执行。
public class Test {
public static void main(String[] args) {
int a=10;
int b=0;
System.out.println("开始计算===============");
int result=a/b;
System.out.println("结束计算==============");
}
}
我们发现上面再14行发生异常,而导致14行以下的内容都无法正常执行。从而导致程序再14终止了。我们应该处理这种异常。能让程序继续执行。
3.异常处理的类型
Java中提供了两种异常处理的方式:
- try{可能发生异常的代码}catch(异常类型 对象){捕获异常}finally{异常的出口 }
- 抛出异常throws
3.1 try-catch方式
public class Test {
public static void main(String[] args) {
int a=10;
int b=0;
System.out.println("开始计算===============");
try {
int result = a / b;
}catch (ArithmeticException e){
System.out.println("捕获算术异常");
}
System.out.println("结束计算==============");
}
}
处理完异常后我们的程序可以继续执行了。
3.2 处理多种异常
public class Test {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
System.out.print("请输入一个数字:");
String c1=scanner.next();
System.out.print("请输入二个数字:");
String c2=scanner.next();
System.out.println("开始计算===============");
try {
int a=Integer.parseInt(c1);
int b=Integer.parseInt(c2);
int result = a / b;
}catch (ArithmeticException e){
System.out.println("捕获算术异常");
}catch (NumberFormatException e){
System.out.println("格式化转化异常");
}
System.out.println("结束计算==============");
}
}
try后面可以跟多个catch捕获。不同的catch捕获不同的异常。但是这样会先的比较麻烦。
3.3 异常捕获的原理
这些异常有一个公共的父类,异常的根类是Throwable, Throwable下有两个子类:
- Exception: 异常类,我们程序员可以处理的异常。一般使用该异常就了。
- Error: 错误类。这种异常程序员无法处理。比如内存溢出。
根据多态,在异常捕获时可以使用Exception异常来捕获。
注意:如果你使用多个catch,范围大的必须放在范围小的后面。
3.4 异常处理的方式throws
把异常抛出,使用再方法名()后面. 抛给了方法调用者。
public static void main(String[] args) throws Exception {//JVM
fun();//方法调用者
}
public static void fun() throws Exception{
int a=10;
int b=0;
int c=a/b;
}
如果我们抛出的异常为RuntimeException下的异常。不要强制调用者处理。
4.Exception下常用的api方法
getMessage():获取异常信息。
toString():获取异常信息以及异常种类。
printStackTrace():打印异常信息以及异常种类和异常发生的位置。
5.finally关键字
使用异常处理中,作为最终执行的代码,不管有没有异常都会执行finally中代码。后期使用在资源关闭中。
如果执行了return,finally也会被执行,因为return语句执行了,方法直接返回到调用处,但是在返回之前,会执行finally块中的代码。
public class Test02 {
public static void main(String[] args) {
int c = fun();
System.out.println("c========" + c);
}
public static int fun() {
int a = 10;
int b = 2;
int c = a / b;
try {
return c;
} catch (Exception e) {
System.out.println("异常");
} finally {
c = 15;
System.out.println("finally~~~~~~~");
// return c;
}
return 0;
}
}
注意: try{}可以finally单独使用。try{}finally{}:没有捕获异常。
6.throw关键字
我们前面讲解的异常,都是程序自己产生的异常对象。 我们也可以自己定义异常对象。并把该异常对象抛出。
class Student{
private String name;
private Integer age;
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age){
if(age<=0){
// System.out.println("年龄有误");//只能在控制看到 不允许出现sout语句
throw new RuntimeException("年龄有误");
}
this.age = age;
}
}
7.自定义异常
当系统提供的异常类型无法满足客户需求时,程序员可以自己定义异常类型。目的可以达到见名知意。
创建一个异常类并继承RuntimeException:
public class AgeException extends RuntimeException {
//创建一个构造函数
public AgeException(String msg){
super(msg);
}
}
使用自定义的异常类:
标签:Java,一篇,int,System,println,异常,public,out From: https://blog.csdn.net/m0_65224643/article/details/140434622