当Java官方提供的异常不满足我们实际业务需求时候,可以选择自己定义异常
自定义异常的步骤:
1》编写一个异常类,
2》自定义检查异常需要继承Exception
自定义运行时异常需要继承RuntimeException
3>再异常类中去调用父类中带参的构造方法,
传入异常信息字符串
4》在方法里面需要使用自定义异常时,需要先创建异常对象,然后再通过throw关键字将异常对象进行抛出
- import java.util.Scanner;
-
- /*
- * 自定义异常
- */
- class UsernameLengthWrongException extends Exception{
-
- public UsernameLengthWrongException() {
- super("你的用户名太长或太短,应该在4到8个字符之间");
-
- }
-
- }
-
- class WrongSexInputException extends RuntimeException {
-
- public WrongSexInputException() {
- super("请输入性别,男/女");
- }
-
-
- }
- public class TestException03 {
- public static void main(String[] args) throws UsernameLengthWrongException {
- m1();
- }
- /*
- * 提示用户从控制台输入姓名
- * 当用户输入的姓名少于四个字符或者超过八个字符
- * 抛出自定义检查异常
- */
- public static void m1() throws UsernameLengthWrongException {
- System.out.println("请输入你的用户名");
- String username= new Scanner(System.in).nextLine();
- if(username.length()<4||username.length()>8) {
- //创建自定义检查异常
- UsernameLengthWrongException ex=
- new UsernameLengthWrongException();
- //手动抛出检查异常,整个函数都到此结束了
- //相当于这一行代码发生了一个检查异常
- throw ex;
- //后面不能再写其他代码了
- //System.out.println("oiuhgvdekfoiuh");
- }
- System.out.println("1234567890");
- }
-
-
- /**
- * 提示用户从控制台输入性别
- * 如果性别不是男和女
- * 就抛出一个自定义的运行时异常
- */
- public static void m2() {
- System.out.println("请输入性别");
- String sex= new Scanner(System.in).nextLine();
- if(!(sex.equals("男")||sex.equals("女"))) {
- //创建一个自定义的运行时异常
- WrongSexInputException e=new WrongSexInputException();
- //抛出异常,整个函数结束
- throw e;
- }
- System.out.println("恭喜你,你性别正常");
- }
- }
异常相关面试题
1.finally、final、fianlize三个之间有什么区别?
final可以修饰类、变量、方法,修饰类表示该类不能被继承、修饰方法表示该方法不能被重写、
修饰变量表示该变量是一个常量不能被重新赋值。
finally一般作用在try-catch代码块中,在处理异常的时候,通常我们将一定要执行的代码方法
finally代码块中,表示不管是否出现异常,该代码块都会执行,一般用来存放一些关闭资源的代码。
finalize是一个方法,属于Object类的一个方法,而Object类是所有类的父类,Java 中允许使用
finalize()方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。
2,try或catch中有return,finally中代码还会不会执行?
会执行,在 return 前执行。
注意:在 finally 中改变返回值的做法是不好的,因为如果存在 finally 代码块,try中的 return 语
句不会立马返回调用者,而是记录下返回值待 finally 代码块执行完毕之后再向调用者返回其值,
然后如果在 finally 中修改了返回值,就会返回修改后的值。
3,throw和throws有什么区别?
throw 关键字用在方法内部,只能用于抛出一种异常,用来抛出方法或代码块中的异常,受查异常
和非受查异常都可以被抛出。
throws 关键字用在方法声明上,可以抛出多个异常,用来标识该方法可能抛出的异常列表。一个
方法用 throws 标识了可能抛出的异常列表,调用该方法的方法中必须包含可处理异常的代码,否
则也要在方法签名中用 throws 关键字声明相应的异常。
4.说出你项目中常见的五个运行时异常
略(自己了解多少写多少,根据自身要求来看)