对于一些发生概率较高的异常,需要在运行之前对其进行预处理。
5.1.在方法声明的位置上,使用throws关键字,抛给上一级。谁调用我,我就抛给谁。抛给上一级。
5.2.使用try…catch语句进行异常的捕捉。这件事发生了,谁也不知道,因为我给抓住了。
被catch捕捉后,不耽误下边的程序执行
举个例子:
我是某集团的一个销售员,因为我的失误,导致公司损失了1000元, “损失1000元”这可以看做是一个异常发生了。我有两种处理方式, 第一种方式:我把这件事告诉我的领导【异常上抛】 第二种方式:我自己掏腰包把这个钱补上。【异常的捕捉】 张三 --> 李四 ---> 王五 --> CEO思考:
异常发生之后,如果我选择了上抛,抛给了我的调用者,调用者需要 对这个异常继续处理,那么调用者处理这个异常同样有两种处理方式。finally关键字,它后边的语句块要跟try、try…catch连用,不管他前边的try、try…catch语句块有没有return,finally一定会执行。 执行结果: 出现该结果的原因离不开两大亘古不变的原因:
1.方法体中代码自上而下执行;2.return一旦执行方法结束。 class Finally{ public static void main(String[] args) { System.out.println("returni()输出:"+returni()); } static int returni(){ int i=100; try { return i; /**此处return不影响finally的执行*/ }finally { i++; System.out.println("finally输出:"+i); } } }子类不可以比父类抛出更多\更宽泛的异常, 可以更少\更小范围。
/*** *编写程序模拟用户注册
1.程序开始执行时,提示用户输入“用户名”、“密码”2.输入信息后,后台java程序模拟用户注册3.注册时要求用户名长度在6~14,小于或者大于均显示异常。*/ import java.util.Scanner; public class UserLogin { public static void main(String[] args) { System.out.println("请输入用户名……(6~14位)"); Scanner input =new Scanner(System.in); String userName=input.next(); System.out.println("请输入密码……(6~14位)"); Scanner input2 =new Scanner(System.in); String password=input2.next(); UserRegister user=new UserRegister(); try { user.userRegName(userName); user.userRegPassword(password); } catch (InputException e) { e.printStackTrace();/***输出异常信息*/ System.out.println("注册失败"); } } } class UserRegister{ /***用户名验证****/ public void userRegName(String userName) throws InputException { if(userName==null ||userName.length()<6 || userName.length()>14){ throw new InputException("用户名输入长度异常"); /***下边不再执行**/ } System.out.println("用户名:"+userName+",符合要求"); } /*****密码验证*****/ public void userRegPassword(String password) throws InputException { // if(password==null || password.length()<6 || password.length()>14){ if(null==password || password.length()<6 || password.length()>14){ throw new InputException("密码输入长度异常"); /***下边不再执行**/ } System.out.println("密码符合要求"); } } /****自定义异常的两个要素:1.继承Exception或RuntimeException,2.无参构造、有参构造方法****/ class InputException extends Exception{ public InputException() { } public InputException(String str) { super(str); } }