优秀交互设计网站,网站备案转服务器,网页设计代码大全图片,手机网站网址申请目录 一.认识异常二.异常分类三.异常的分类1.编译时异常2.运行时异常 四.异常的处理1.LYBL#xff1a;事前防御型2.EAFP#xff1a;事后认错型 五.异常的抛出Throw注意事项 六.异常的捕获1.异常的捕获2.异常声明throws3.try-catch捕获并处理 七.自定义异常 一.认识异常 在Jav… 目录 一.认识异常二.异常分类三.异常的分类1.编译时异常2.运行时异常 四.异常的处理1.LYBL事前防御型2.EAFP事后认错型 五.异常的抛出Throw注意事项 六.异常的捕获1.异常的捕获2.异常声明throws3.try-catch捕获并处理 七.自定义异常 一.认识异常 在Java中我们将程序执行过程中发生不正常的情况称为异常。 我们先看下面这行代码我们将字符串赋值给了字符类型的s由我们所学习的知识来判断这肯定是不能通过的。
char s adas;接下来我们来简单了解几种异常 1.算数异常 2.数组越界异常 int[] arr new int[]{1,2,3};System.out.println(arr[5]);3.空指针异常 int[] str null;System.out.println(str.length);二.异常分类 由图可以看出 1.Throwable是所有异常体系的顶层类由它延伸出两个重要的子类Error和Exception 2.Error是指Java虚拟机无法处理的严重问题比如JVM的内部错误资源耗尽等代表的错误有StackOverflowError和OutOfMemoryError。 3.Exception是在程序运行发现猴程序员可以自己解决的异常比如感冒发烧。我们平时所说的异常就是Exception。
三.异常的分类
1.编译时异常 编译时异常也叫做受检查异常是指程序在编译时就出现的错误。 举例如下 我们将3.66浮点型数字赋值给int型的变量a这时编译器就会报错我们这时根据编译器报的提示就可以修改错误。
2.运行时异常 在程序运行时报的错误叫做运行时异常也叫非受检查异常。 RunTimeException以及其子类对应的异常都称为运行时异常。比如NullPointerException、ArrayIndexOutOfBoundsExceptionArithmeticException。
四.异常的处理
那么我们发现异常后我们就需要解决异常这里有两种处理异常的方法
1.LYBL事前防御型
Look Before You Leap。顾名思义这就是在操作之前就做好充分的检查。 boolean ret false;ret 进入系统();if(!ret){进入系统错误;return;}ret 输入账号();if(!ret){账号错误;return;}ret 输入密码();if(!ret){密码错误;return;}ret 操作选择();if(!ret){输入操作错误;return;}这样的代码将操作和异常的抛出混合在一起使代码看起来十分混乱想要找到某一个操作还需要一个一个浏览。所有我们一般不使用这种异常处理方法.
2.EAFP事后认错型
It’s Easier To ASk Forgiveness Than Permission 。“事后获取原谅比事前获取许可更容易”. 也就是先操作, 遇到问题再处理 boolean ret false;try{ret 进入系统();ret 输入账号();ret 输入密码();ret 操作选择();}catch(进入系统错误){处理进入系统错误;}catch(输入账号错误){处理输入账号错误;}catch(输入密码错误){处理输入密码错误;}catch(操作选择错误){处理操作选择错误;}这样正确流程和错误流程是分开的程序更关注正常流程。使得代码更加清晰更加容易理解在日常中处理代码异常的核心思想就是EAFP 在Java中处理异常的五个关键字throw、try、catch、final、throws。
五.异常的抛出
Throw
可以通过throw程序员来自己抛出应该异常
public class Main {public static void func(int[] arry){if(arry null){throw new NullPointerException();}}public static void main(String[] args) {func(null);}
}同一时刻只会抛出一个异常。
注意事项 throw必须写在方法体内部抛出的对象必须是Exception 或者 Exception 的子类对象如果抛出的是 RunTimeException 或者 RunTimeException 的子类则可以不用处理直接交给JVM来处理如果抛出的是编译时异常用户必须处理否则无法通过编译异常一旦抛出其后的代码就不会执行 六.异常的捕获
1.异常的捕获
异常的捕获也就是异常的具体处理方式主要有两种异常声明throws 以及 try-catch捕获处理
2.异常声明throws
处在方法声明时参数列表之后当方法中抛出编译时异常用户不想处理该异常此时就可以借助throws将异常抛给方法的调用者来处理。即当前方法不处理异常提醒方法的调用者处理异常。
语法格式
修饰符 返回值类型 方法名(参数列表) throws 异常类型1异常类型2...{
}提醒程序员这里可能会抛出异常 如果程序员不处理异常则就会交给JVM来处理此时程序就会异常终止。 当抛出异常时程序不会继续向下运行。
3.try-catch捕获并处理 注意
[]中表示可选项可以添加也可以不用添加try中的代码可能会抛出异常也可能不会
举例 这里再main方法中也进行了声明程序编译上不会报错但是这个异常程序员也没有处理这时就会交给JVM来处理就出现如下情况。 如果main方法中没有声明 此时使用try-catch来处理alt回车 try {里面放可能出现异常的代码} catch里面放要捕获异常的类型 {} 此时运行结果没有异常报错的提示如果我们要显示出来使用e.printStackTrace() 当catch没有捕获到异常时就会交给JVM来处理程序就会异常终止
七.自定义异常
如果继承Exception就是受查异常/编译异常在程序未运行时就能发现错误 如果继承RunTimeException 就是非受查异常/运行时异常只有在程序运行时才会报错。 并且自定义异常需要重写方法跟情况而定 如下是博主分享的一个自定义异常的例子 我们的目的是在用户输入账号名称和密码时判断跟所存的密码账号是否一致如果不相同则报错
public class PasswordException extends RuntimeException{public PasswordException() {}public PasswordException(String message) {super(message);}
}public class UserNameException extends RuntimeException{public UserNameException() {}public UserNameException(String message) {super(message);}
}package Myerror;import test.PassWordException;public class Login {public String userName xiaoguo;public String password henshuai;public void Login(String userName,String password){if(!this.userName.equals(userName)){throw new UserNameException(用户名错误);}if(!this.password.equals(password)){throw new PassWordException(密码错误);}}
}
public class Main {public static void main(String[] args) {try {Login login new Login();login.Login(xiaohuang,bushuai);}catch (UserNameException e){e.printStackTrace();System.out.println(处理用户名错误!);;}catch (PasswordException e){e.printStackTrace();System.out.println( 处理密码错误!);;}}}
码字不易感谢观看 如果对你有帮助的话记得点赞评论关注吧