Exception类
1)Java异常结构中定义有Throwable类,Exception和Error是其派生的两个子类。
Exception表示由于网络故障、文件损坏、用户输入非法等情况导致的异常。是程序级别的错误
Error表示系统级别的错误,比如内存溢出。这是我们处理不了的
2)异常处理语句是try-catch语句,catch块可以出现很多次
try{
可能发生异常的片段代码
}catch(NullPointerException e){ //列举代码中可能出现的异常类型
当出现了列举的一场类型后,在这里处理
}catch(StringIndexOutOfBoundsException e){
}... ...
在异常捕获机制的最后书写catch(Exception e)捕获未知的错误(或不需要针对处理的错误),这样可以捕获没有想要
针对性处理的异常。
catch捕获是从上到下,即从第一个catch检测,直到最后一个catch块,当检测到catch并响应后,退出try中的语句
3)throw关键字:用于主动抛出异常
使用环境:在方法中主动抛出异常,但不是什么情况下我们都应该抛出异常。原则上,自身决定不了的应该抛出
问:方法中什么时候该自己处理异常,什么时候该抛出?
答:方法通常有参数,调用者在调用我们的方法帮助解决问题时通常会传入参数,若方法的逻辑是因为参数的错误而引发的
异常,则应该抛出,若是我们自身的原因则应该自己处理。
4)throws关键字:
声明方法时,我们可以同时声明可能抛出的异常种类,通知调用者强制捕获。可以类比:“丑话说前头”。
原则上throws声明的异常,一定要在该方法中抛出,否则没有意义,相反的,若方法中主动通过throw抛出一个异常,应该
在throws中声明该种类异常,通知外界捕获。
main方法不要抛出异常,因为main方法抛出的异常是被jvm捕获,jvm捕获后直接会kill掉
5)finally关键字
finally块定义在catch块的最后,只能出现一次。(只能出现0-1次),无论程序是否出错都会执行的块!
java抛出异常的机制:
1)java虚拟机(jvm)在运行程序时,一旦在某行代码运行时出现了错误,jvm会创建这个错误的实例并抛出。这时jvm会检查出错
代码所在的方法是否有try捕获,若有,则检查catch块是否有可以处理该异常的能力。若没有,则将该异常抛给该方法的调用者
。以此类推,直到抛至main方法外仍没有解决,那么jvm会中止该程序。
2)java异常Exception分为:
运行时异常:编译时不检查异常
可检查异常:编译时检查
RuntimeException及其子类:运行时异常
若方法中抛出该类异常或其子类,那么声明方法时可以不在throws中列举该类异常的抛出
RuntimeException的子类:NullPointerException、ArraysIndexOutOfBoundsException、
ClassCastException、IllegalArgumentException等,不要去刻意记住。
1)Java异常结构中定义有Throwable类,Exception和Error是其派生的两个子类。
Exception表示由于网络故障、文件损坏、用户输入非法等情况导致的异常。是程序级别的错误
Error表示系统级别的错误,比如内存溢出。这是我们处理不了的
2)异常处理语句是try-catch语句,catch块可以出现很多次
try{
可能发生异常的片段代码
}catch(NullPointerException e){ //列举代码中可能出现的异常类型
当出现了列举的一场类型后,在这里处理
}catch(StringIndexOutOfBoundsException e){
}... ...
在异常捕获机制的最后书写catch(Exception e)捕获未知的错误(或不需要针对处理的错误),这样可以捕获没有想要
针对性处理的异常。
catch捕获是从上到下,即从第一个catch检测,直到最后一个catch块,当检测到catch并响应后,退出try中的语句
3)throw关键字:用于主动抛出异常
使用环境:在方法中主动抛出异常,但不是什么情况下我们都应该抛出异常。原则上,自身决定不了的应该抛出
问:方法中什么时候该自己处理异常,什么时候该抛出?
答:方法通常有参数,调用者在调用我们的方法帮助解决问题时通常会传入参数,若方法的逻辑是因为参数的错误而引发的
异常,则应该抛出,若是我们自身的原因则应该自己处理。
4)throws关键字:
声明方法时,我们可以同时声明可能抛出的异常种类,通知调用者强制捕获。可以类比:“丑话说前头”。
原则上throws声明的异常,一定要在该方法中抛出,否则没有意义,相反的,若方法中主动通过throw抛出一个异常,应该
在throws中声明该种类异常,通知外界捕获。
main方法不要抛出异常,因为main方法抛出的异常是被jvm捕获,jvm捕获后直接会kill掉
5)finally关键字
finally块定义在catch块的最后,只能出现一次。(只能出现0-1次),无论程序是否出错都会执行的块!
java抛出异常的机制:
1)java虚拟机(jvm)在运行程序时,一旦在某行代码运行时出现了错误,jvm会创建这个错误的实例并抛出。这时jvm会检查出错
代码所在的方法是否有try捕获,若有,则检查catch块是否有可以处理该异常的能力。若没有,则将该异常抛给该方法的调用者
。以此类推,直到抛至main方法外仍没有解决,那么jvm会中止该程序。
2)java异常Exception分为:
运行时异常:编译时不检查异常
可检查异常:编译时检查
RuntimeException及其子类:运行时异常
若方法中抛出该类异常或其子类,那么声明方法时可以不在throws中列举该类异常的抛出
RuntimeException的子类:NullPointerException、ArraysIndexOutOfBoundsException、
ClassCastException、IllegalArgumentException等,不要去刻意记住。
重写方法时的异常处理注意事项
若使用继承时,在父类的某个方法上宣告了throws某些异常,而在子类中重写该方法时,可以按如下方法处理:
1)不处理异常(重新定义时不设定throws)
2)可仅throws父类别中被重写的方法上的某些异常
3)可throws被重写的方法上的异常的子类
但是不可以按照如下方式处理:
1)throws出额外的异常
2)throws被重新定义的方法上的异常的父类
若使用继承时,在父类的某个方法上宣告了throws某些异常,而在子类中重写该方法时,可以按如下方法处理:
1)不处理异常(重新定义时不设定throws)
2)可仅throws父类别中被重写的方法上的某些异常
3)可throws被重写的方法上的异常的子类
但是不可以按照如下方式处理:
1)throws出额外的异常
2)throws被重新定义的方法上的异常的父类
File 文件类
java使用File类表示操作系统上文件系统中的文件或目录,我们可以使用File操作磁盘上的文件或目录。
File可以描述文件或目录的名字,大小等信息,但是不能对文件内容进行操作。
1)使用File类可以创建文件和目录,创建File实例时,要向构造方法传递路径参数(以字符串形式),路径可以是绝对路径,
也可以是相对路径。相对路径:“.”代表当前目录的路径,即本程序所在工程目录的路径。
eg: File file = new File("."+File.separator+"readme.txt");
2)由于windows和linux描述目录所用的分隔符不同,因此在描述路径时应该使用File.separator这个常量。
3)File类常用方法
a.exist()
检查file实例的文件或目录是否存在。
b.createNewFile()
在file实例的路径下创建新文件
c.mkdir()
在file实例路径下创建新目录(单级目录),只能在已有的目录基础上再创建一个目录
d.mkdirs()
与mkdir()方法对应,可以创建多级目录,可以在已有目录的基础上建立一个目录,并在此目录的基础上再创建一个目录..
可以创建很多级目录
e.File(File dir, String file)
新的构造方法,在已经创建的目录之上创建一个文件或目录
f.File[] listFiles()
返回目录下所有子目录及文件,如果调用过程中出错了,则会返回一个null
g.boolean delete()
删除文件及目录,返回删除成功与否。删除目录的前提:目录下不能有任何子项
h.toString()
返回文件或者路径名,会以全路径的方式返回
4)在写路径时,通常可以省略“./”,直接写文件或目录路径,这时File默认是在当前目录进行操作
java使用File类表示操作系统上文件系统中的文件或目录,我们可以使用File操作磁盘上的文件或目录。
File可以描述文件或目录的名字,大小等信息,但是不能对文件内容进行操作。
1)使用File类可以创建文件和目录,创建File实例时,要向构造方法传递路径参数(以字符串形式),路径可以是绝对路径,
也可以是相对路径。相对路径:“.”代表当前目录的路径,即本程序所在工程目录的路径。
eg: File file = new File("."+File.separator+"readme.txt");
2)由于windows和linux描述目录所用的分隔符不同,因此在描述路径时应该使用File.separator这个常量。
3)File类常用方法
a.exist()
检查file实例的文件或目录是否存在。
b.createNewFile()
在file实例的路径下创建新文件
c.mkdir()
在file实例路径下创建新目录(单级目录),只能在已有的目录基础上再创建一个目录
d.mkdirs()
与mkdir()方法对应,可以创建多级目录,可以在已有目录的基础上建立一个目录,并在此目录的基础上再创建一个目录..
可以创建很多级目录
e.File(File dir, String file)
新的构造方法,在已经创建的目录之上创建一个文件或目录
f.File[] listFiles()
返回目录下所有子目录及文件,如果调用过程中出错了,则会返回一个null
g.boolean delete()
删除文件及目录,返回删除成功与否。删除目录的前提:目录下不能有任何子项
h.toString()
返回文件或者路径名,会以全路径的方式返回
4)在写路径时,通常可以省略“./”,直接写文件或目录路径,这时File默认是在当前目录进行操作
良好的编程习惯:
1)在异常捕获机制的最后书写catch(Exception e)捕获未知的错误(或不需要针对处理的错误)
2)在自定义方法时,一定要在开头对传进来的参数做一个安全检查。
3)不到万不得已,尽量不要使用递归,因为这样非常小号资源。
其他方面的知识:
1)一说到工具类,就要知道其里面实现的都是静态方法,随时可以调取
2)对于try-catch-finally语句中存在return语句的总结。
a.三者之中都有return语句,则只执行finally中的return,且finally中的语句是在return之前完成的。
b.若finally中没有return语句,触发了异常就执行catch中的return语句,没有触发就执行try中的语return。
但是finally中的语句执行在return之前。
c.若finally语句中发生错误或者异常,则会直接退出程序,自然也执行不到return语句了
1)在异常捕获机制的最后书写catch(Exception e)捕获未知的错误(或不需要针对处理的错误)
2)在自定义方法时,一定要在开头对传进来的参数做一个安全检查。
3)不到万不得已,尽量不要使用递归,因为这样非常小号资源。
其他方面的知识:
1)一说到工具类,就要知道其里面实现的都是静态方法,随时可以调取
2)对于try-catch-finally语句中存在return语句的总结。
a.三者之中都有return语句,则只执行finally中的return,且finally中的语句是在return之前完成的。
b.若finally中没有return语句,触发了异常就执行catch中的return语句,没有触发就执行try中的语return。
但是finally中的语句执行在return之前。
c.若finally语句中发生错误或者异常,则会直接退出程序,自然也执行不到return语句了