J2SE第四章——异常(二)

来源:互联网 发布:sql数据库服务器搭建 编辑:程序博客网 时间:2024/06/04 19:56

新知识点:

1.共有5个关键字 4个已学 try catch throw throws   

       问题:

        1.如果不抛异常,则顺序执行,但越过catch语句块,然后往下执行catch之后的语句块

        2.如果try中的代码抛出了异常,那么try中余下的代码还执不执行?          -------不执行

2 跳转到相应的catch语句块中,执行catch里面的代码

         如果catch语句块使用了throw,那么throw后的语句(无论是在catch语句之中还是catch语句之后)不再执行

         确保代码一定能够执行  finally 

try {} catch () {} finally {}

3.一张图:(组织关系图): 很多异常类----OOP  继承  父类  Object

类:                                           Throwable

                   有两个分支                       Error                                      Exception

                                                        (系统环境错误)               (程序员违背了某种规则)

                                                                                    ..... RuntimeException .....

                                                       ArithmeticException  ArrayIndexOutofBoundsException  NullPointerException

 

 

                  try : 可能发生异常的代码要封装在try语句块中  会增加代码量。设计师把一些经常发生的异常进行“处理”,这些代码可以不用放在try 中。RuntimeException 中的异常可以不用写在try语句中

public class B {public static void main(String[] args) {}public static void m1(int a) {int result = 0;int[] arr = {1,2,3};String str = null;//String str = new String();result = 10/0;//ArithmeticExceptionSystem.out.println(arr[4]);  //ArrayIndexOurofBoundsExceptionStr.split(",");//NullPointerException}} 

4.先捉小的,后捉大的      

     如果try 语句块抛出多种异常,那么:

      4.1 规范格式:用catch 分别捕捉-----catch语句块的顺序

     是不是抛出异常的顺序?

      ---不是~!因为try抛出异常,JVM 会跳转到相应的catch 执行

       catch捕捉到的多个异常类,如果存在“继承”关系,必须考虑“父类-子类”的顺序问题:

      父类异常:位于子类异常的后面:------没有问题

      父类异常:位于子类异常的前面:------不行!因为后面的子类异常永远都没有机会执行

try {result = 10/0;System.out.println(arr[5]);Str.split(",");}catch (NullPointerException e) {} catch (ArrayIndexOutofBoundsException e) {} catch (ArithmeticException e) {} catch (RuntimeException e) {//父类}


5. 自定义异常 

         模拟登陆  输入用户名zs,  提示正确,否则提示错误。 

         自定义异常 封装用户名不正确信息

          语法:

               继承自Exception(必须写 try catch)/ RuntimeException(可以不写 try catch )

================继承自Exception=======================

class UsernameNotFoundException extends Exception {// className nethodName linenumber (前三者都不能确定)info public UsernameNotFoundException(String info ) {super(info);//super("用户名不存在");}}public class B {public static void main(String[] args) {try {login();} catch (Exception e) {System.out.println("用户名不正确");}}//登陆public static String  login() throws Exception{String name = getName();if ("zs".equals(name) {System.out.println("登陆成功");} else {//登陆不成功,认为是运行期错误---异常  -JDK 没有内置“用户名错误”的异常---已定义异常Exception e = new UsernameNotFoundException();throw e;}//键盘输入用户名public static String getName() throws Exception {return new BufferedRead(new InputStreamReader(System.in)).readLine();}}
=====================继承自RuntimeException=============================

class PasswardErrorException extends RuntimeException {public PasswardErrorException(String info) {super(info);}}public class Test {public static void main(String[] args) {checkPwd(); //受控异常  不用写try  catch /*try {checkPwd();} catch (PassWardErrorException) {System.out.println("密码错误");}*/}public static void checkPwd() {if ("123".equals(pwd)) {System.out.println("跳转到成功页面");} else {throw new PassWardErrorException("密码错误");}}public static String getPwd() {String str = null;try {str = new BufferedRead(new InputStreamReader(System.in)).readLine();} catch (IOException e) {}}}




1 0
原创粉丝点击