读书笔记--Java语言程序设计基础12章异常-1

来源:互联网 发布:网络爱国事例 编辑:程序博客网 时间:2024/06/05 06:31

异常的种类:
1、这里写图片描述

1、异常的分类有三种:系统错误(System Error)、异常(Exception)和运行时异常(RunTimeException)。
a)系统错误:即虚拟机产生的内部错误,用Error表示。处理方式:终止程序。【免检异常】
b)异常:即由程序或外部环境所引起的错误,使用Exception表示。【必检异常:要求程序员强制处理】
c)运行时异常:即程序的设计错误,使用RuntimeException表示。处理方式:捕获或声明异常。
2、可以通过继承Exception或者是Exception 的子类来创建自己的异常类。【免检异常】
3、Java的异常处理模式是基于三种操作:
a)声明抛出一个异常:(declaring an Exception):
i.每一个方法都必须声明它可能抛出的必检异常的类型。
1.如:public void myMethod() throws IOException {}
2.抛出多个异常:
a)Public void myMethod() throws Exception1,Exception2….ExceptionN {}
ii.Java中不要求在方法中显式的声明免检异常(Error和RunTimeException)。
iii.如果方法没有在父类中声明异常,那么就不能在子类中对其进行继承来声明异常。
b)抛出一个异常:(throwing an Exception)
i.说明:程序如果检测到有错误的程序,就可以创建一个合适的异常类型的实例并抛出。
ii.如:throw new IllegalArgumentException(“Wrong Arguments!”);
1.异常类的说明:异常类都有两个构造方法:
a)无参的构造方法:
b)带有Exception message的构造方法。
c)捕获一个异常:(catching an Exception)
i.说明:

Try{    Statements;}catch(Exeption exVar1){    Handler and exceptions;} catch(Exeption exVar2){    Handler and exceptions;} catch(Exeption exVar3){    Handler and exceptions;}

ii.注意事项:
1.在try模块当中,如果没有检测到异常,则直接跳过catch语句。
2.如果在try模块当中的某一个语句检测到了一个异常,并且抛出,就会直接跳过try模块的剩下的语句。
3.如果一个catch模块可以捕获一个父类的异常对象,也可以捕获这个父类的所有子类的异常对象。
4.如果存在有多个catch语句时,父类的异常类排在后面,主要原因就是在父类如果排在前面,父类的覆盖范围会比子类的要大,所以在前面的父类会将异常捕获,而后面的子类就没有办法捕获异常。
iii.Java会强制程序员处理必检异常。
1.如果一个方法里声明了一个必检异常,就必须在try-catch块中调用它,或者在调用方法中声明抛出的异常。
a)如果p2方法中可能会抛出IOException 可能会抛出这个必检异常。
所以其方法必须是:

void p1(){Try{p2();       }catch(Exception ex){   }}

捕获这个异常(对这个异常进行处理)

void p1() throws IOException{p2();}

声明这个异常(向p1的调用方法来处理异常)
2、使用相同的处理代码处理多个异常的情况。其语法是:
Catch(Exception1 | Exception2|Exception3…..){
//Same code for handling these exception.
}

12.5、finally子句:
无论异常是否发生,finally子句总会被执行的。
其语法为:

Try{Statements;       }catch(Exception ex){Handling ex;   }finally{finalStatement;}

1、在到达finally块之前如果有return语句,finally块还是会执行。
a)如果在catch模块和finally模块当中同时有return和throw语句的时候,finally语句中的return
或者是throw语句会覆盖catch中的return或者是throw语句,使得catch中的失效。
2、可能出现的情况:
2-1、如果try语句中没有出现异常,执行finalStetament,然后执行try语句的下一条语句。
2-2、如果try语句中有一条语句出现异常,并被catch语句捕获,然后跳过try中的其他语句,执行catch和finally语句。执行try语句之后的下一条语句。
2-3、如果try语句中有一条语句引起异常,并且没有被任何catch语句所捕获,就会跳过try模块的剩下的语句,执行finally语句,并且将异常传递给调用这个方法的调用者。
12.6、何时使用异常:
1、当错误需要被方法的调用者处理的时候,方法应该抛出一个异常。
2、不要把异常处理当做简单的逻辑测试。

12.7、重新抛出异常:
其语法:

Try{    Statement;}catch(TheException ex){    Perfer operations before exits;     Throw ex;}

创建自定义异常类:
1、可以继承java.lang.Exception 来定义自定义异常类。
12.8、链式异常
和其他异常一起抛出新的异常。
Throw new Exception(“now info from method”,ex);
Ex为输出这个语句Catch的异常。
12.9、如何自定义异常
1、自定义异常类:自定义类名继承Exception类。
2、在创建某一个类时,根据条件抛出自定义异常类。
3、在主类当中实现异常。

File类:
1、File类只是对文件和文件夹的基本处理的功能。
a)创建方法:
i.mkdir():创建文件夹
ii.mkdirs():创建文件夹(包括创建不存在的文件夹)

2、文件输入和输出
a)printWriter写数据
i.创建一个printWriter创建一个对象,可以是File对象,也可以是String文件名,
1.printWriter pw = new printWriter(File file);
2.printWriter pw1 = new printWriter(String filename);
可以使用对象中的print方法对对象进行写入数据。
ii.写入完毕之后,记得关闭数据流。
b) 使用try-with-resources可以自动关闭资源
c) 使用Scanner读数据
1、Scanner input = new Scanner(new File(filename));
2、可以使用Scanner中的next系列的方法来读取文件中钢的内容。
3、其中nextFloat();nextDouble();nextInt();nextString();next();nextByte();nextShort();nextLong();是通过分隔符(默认为空格)分隔开的标记。可以使用useDelimiter(String regex)来设置新的分隔符模式。
4、next():读取的是一个由分隔符分隔的字符串。nextLine()读取一个以换行符结束的行。
5、用Scanner类中使用nextInt()和nextLine()从文件中读取数据和从键盘中读取数据的区别:
a)文本中有“12 456”
1、nextInt():从文件中读取整数部分的数值。12
2、nextLine():从第一个分隔符(保留)开始下一个分隔符为止(不保留)的一个字符串。为“ 456”
B)键盘中输入
“12
456”
nextInt():从文件中读取整数部分的数值。12
nextLine():会在一个行分隔符之后结束,会在读取一个行分隔符之前的数据。即为空。

原创粉丝点击