自定义异常

当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.说出你项目中常见的五个运行时异常

略(自己了解多少写多少,根据自身要求来看)