Java中的异常和File类的使用
一、异常的概念
1、什么是异常?
通俗理解:异于平常,本来一件事情正常执行,可能中途会有特殊情况,导致当前事情无法正常执行而影响执行结果,这个中途特殊情况即异常。
例如:a/b这个操作,正常情况是没有任何问题,但是隐藏了一个问题,如果b为0,则这个除法操作将无法执行,则b为0的情况属于a/b这件事情的异常情况
通俗理解:异于平常,本来一件事情正常执行,可能中途会有特殊情况,导致当前事情无法正常执行而影响执行结果,这个中途特殊情况即异常。
例如:a/b这个操作,正常情况是没有任何问题,但是隐藏了一个问题,如果b为0,则这个除法操作将无法执行,则b为0的情况属于a/b这件事情的异常情况
2、Java异常
java异常是java程序运行过程中出现的非正常情况
异常在程序中如果不做处理,会导致程序中途瘫痪,不能正常完成特定功能
异常一般情况是需要通过java异常处理机制给屏蔽或者处理掉
3、Java异常特点
Java异常处理是面向对象处理方式
一旦代码出现异常问题,JVM底层则会创建一个异常类相关的对象
异常对象产生后,会根据代码对异常的处理机制进行操作,其中异常处理机制包括捕获异常和抛出异常两种,如果没有异常操作,则java程序会中断执行
Java异常处理是面向对象处理方式
一旦代码出现异常问题,JVM底层则会创建一个异常类相关的对象
异常对象产生后,会根据代码对异常的处理机制进行操作,其中异常处理机制包括捕获异常和抛出异常两种,如果没有异常操作,则java程序会中断执行
4、Java异常体系继承结构图
二、异常处理之捕获异常
1、 关键字try
catch
try{
//可能出现异常的代码部分
}catch(异常类型 异常变量){
//执行异常操作
}catch(异常类型 异常变量){
//执行异常操作
}…
finally{
//处理完try与catch操作后的收尾操作,异常统一出口
}
//可能出现异常的代码部分
}catch(异常类型 异常变量){
//执行异常操作
}catch(异常类型 异常变量){
//执行异常操作
}…
finally{
//处理完try与catch操作后的收尾操作,异常统一出口
}
2、 捕获异常注意事项:
catch定义,由上到下,异常类的范围必须由小到大或者同级别的
运行时异常,catch中可以随意定义类型,程序运行时,会根据catch参数自动匹配
非运行时异常,则catch中定义的异常,在try代码块中必须存在,如果没有类似异常存在,则不允许被定义。
finally关键字,在进行异常处理之后,在异常的处理格式中还有一个finally语句,此语句将作为异常的统一出口,不管是否产生异常, 最终都要执行此段代码
如果try中有return语句,则会先执行return语句,后执行finally,最后返回整个方法
运行时异常,catch中可以随意定义类型,程序运行时,会根据catch参数自动匹配
非运行时异常,则catch中定义的异常,在try代码块中必须存在,如果没有类似异常存在,则不允许被定义。
finally关键字,在进行异常处理之后,在异常的处理格式中还有一个finally语句,此语句将作为异常的统一出口,不管是否产生异常, 最终都要执行此段代码
如果try中有return语句,则会先执行return语句,后执行finally,最后返回整个方法
三、异常处理之抛出异常
1、关键字:throws
抛出异常处理机制:throws方法抛出异常
此异常主要是针对存在异常的代码块出现的异常问题,中止当前方法的执行
此方法把异常问题抛出给调用此方法的上一级函数当中,并调用出自行处理异常
格式如下:
此异常主要是针对存在异常的代码块出现的异常问题,中止当前方法的执行
此方法把异常问题抛出给调用此方法的上一级函数当中,并调用出自行处理异常
格式如下:
public void test() throws 异常类型{
//存在异常的代码块
}
//存在异常的代码块
}
测试代码:
package com.huaxin.zhou;
public class ExceptionTest {
public static void main(String[] args) {
ExceptionTest et = new ExceptionTest();
try {
et.b();
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("main方法执行完毕");
}
public void b() throws Exception{
this.a();
System.out.println("b方法执行完毕");
}
public void a()throws Exception{
int a=10;
int b=0;
int result =a/b;
System.out.println("a方法执行完毕");
}
}
执行结果:
原理分析:
2、抛出异常处理机制:throw抛出异常对象
此操作主要是对当前产生的异常对象进行抛出操作
此操作主要是对当前产生的异常对象进行抛出操作
常用的处理格式是结合try...catch和throws一起使用
public void test() throws 异常对象类型{
try{
//存在异常的代码块
}catch(异常类型 变量名){
throw 异常对象;
}
}
try{
//存在异常的代码块
}catch(异常类型 变量名){
throw 异常对象;
}
}
3、 throw异常对象注意
throw一般存在于catch语句当中,用于出现异常后的一种操作方式
捕捉的异常和抛出的异常不一定相同,可以不一样
throw抛出的异常对象如果是检测异常,则所在的方法必须要通过throws显性抛出
throw抛出的异常对象如果是非检测异常,则方法上可以选择性定义throws
四、File类的使用
1、java.io.File类
File类是java中提供给程序操作硬盘文件的方式,可以来获取当前关联硬盘文件的相关属性,包括文件名、路径、大小、修改日期等。
注意:File类不能直接读写文件中的内容,只能查看和操作文件本身
测试代码:
package com.huaxin.zhou;
import java.io.File;
import java.io.IOException;
public class FileTest1 {
public static void main(String[] args) {
File file = new File("C:/Users/Administrator/Desktop");
//1.判断当前文件是否存在
System.out.println(file.exists());
//2.判断是否为文件
System.out.println(file.isFile());
//3.判断是否为目录
System.out.println(file.isDirectory());
//4.获取文件的名字
System.out.println(file.getName());
//获取文件的绝对路径
System.out.println(file.getAbsolutePath());
System.out.println(file.length());
}
}
运行结果:
测试代码二:
package com.huaxin.zhou;
import java.io.File;
import java.io.IOException;
public class FileTest1 {
public static void main(String[] args) {
File file = new File("C:/Users/Administrator/Desktop");
//列出文件夹下的所有文件
if(file.isDirectory()){
//列出当前文件夹下的所有文件
File[] files = file.listFiles();
//遍历数组
for (int i = 0; i < files.length; i++) {
File f = files[i];
System.out.println(f.getAbsolutePath());
}
}
}
}
运行结果:
五、使用File类进行文件的遍历(文件搜索器)
里面详细讲解了File中list()和listFile()方法的区别,并有原代码;
六、总结:
1、通过这次的学习,对Java中的异常的理解又深入了一些;
2、我比较难理解的是try中有return时,先执行return方法,再执行finally方法;
3、throws和throw我刚开始学的时候,非常难懂;现在没那么难理解了,throws抛出的是异常类型;throw抛出的是具体的异常对象,并且一般结合自定义异常来使用;
4、文件File类,要搞清楚文件和目录(文件夹)的区别,以及File类的使用
5、在理解的前提下多动手,不理解的时候可以通过代码测试来加深理解;
6、共勉!