异常机制(Exception)概述
异常的概述:
异常就是Java程序在运行过程中出现的错误
代码中的异常举例
1 .空指针异常(NullPointerException)
2.下标越界异常(IndexOutOfBoundsException)
3.算数异常(ArithmeticException)
异常处理的方式
处理异常的方式有两种,自己处理或者由上级处理,main函数在接受到异常后,由上级来处理,由于main函数是JVM调用的,所以main函数的上级是JVM,JVM接受到异常后,采用默认的异常处理方式处理:1.打印错误位置;
2打印错误信息;
3终止程序。异常处理的类
Throwable(所以异常的父类)
Error(系统崩溃 数据库崩溃)
Exception(异常)
RunTimeException(运行时异常)
编译时异常自己处理异常
try{
}catch{
}finally{
}
try 指的是要被测试的代码(有可能发生异常的代码)
catch指的是要捕获的异常
finally指的是异常处理后要执行的代码多catch的异常处理
由上至下进行匹配 匹配上一个剩下的catch都不走了 捕获时使用的类 要由小到大书写finally
finally中的代码 一定会被执行 finally一般关闭资源 关闭数据库 关闭流
final finally finalize之间的区别:
三者之间没有关系 ,final 修饰类 修饰方法 修饰变量, finally 异常处理中关键字 可以关闭资源 一定会被执行的 ,finalize 是Object类的方法 用来垃圾回收 可以将内存中没有任何引用的垃圾空间回收。
系统调用try—catch捕获异常流程:
1.某个方法 出现了异常
2.产生一个异常对象
3.这个异常对象要返回给方法的调用者
4.调用者接到这个异常 进行处理 :
方式一:抛给上级去处理 抛给JVM处理 调用JVM的默认处理机制 程序被停止
方式二:自己处理 try—catch处理 接到异常后 使用catch进行匹配 , 匹配成功后 执行catch中的语句 ,并且没有终止程序 程序继续运行继承中的异常 ,如果父类没有抛出异常,子类也不可以抛出异常,只能同过try–catch来处理异常,如果父类抛出了异常,子类可以用try–catch处理,也可以抛出异常。
自定义异常
为什么需要自定义异常:
因为在以后的开发过程中,我们可能会遇到各种问题,
而Jdk不可能针对每一种问题都给出具体的异常类与之对应.
为了满足需求,我们就需要自定义异常.
举例:考试成绩必须在0-100之间,不满足就产生异常。
自定义异常概述 需要将我们自定义的异常类纳入到我们的异常体系中
继承自Exception
继承自RuntimeException
案例演示: 自定义异常的基本使用
// 判断成绩范围
if(score > 100 || score < 0){
// 抛出一个异常对象
//注意 自定义异常类 提供有参数构造
throw new MyException("成绩不在有效的范围内(0~100)....") ;
}else {
System.out.println("成绩合法.....................");
}
代码:
自定义异常类
public class MyException extends Throwable {
public MyException(String s) {
super(s);
}
}
测试代码:
public class Test {
public static void main(String[] args) throws MyException {
System.out.println("请输入你的成绩");
Scanner sc = new Scanner(System.in);
int score=sc.nextInt();
if(score > 100 || score < 0){
throw new MyException("成绩不在有效的范围内(0~100)....") ;
}{
System.out.println("输入成功");
}
}
}
File类的学习
File类是io包中唯一代表磁盘文件本身的对象。File类定义了一些与平台无关的方法来操作文件,可以通过调用File类中的方法,实现创建、删除、重命名文件等。File类的对象主要用来获取文件本身的一些信息,如文件所在目录、文件的长度、文件读写权限等。数据流可以将数据写入到文件中,而文件也是数据流最常用的数据媒体。
1、文件的创建与删除
可以使用File类创建一个文件对象,File类构造方法:
(1)File(String pathname)
该构造方法通过将给定路径名字字符串转换为抽象路径来创建一个新File实例。
new File(String pathname)
pathname:是指路径名(包含文件名)
File file = new File(“D:/test.txt”)或者 File file =new File(“D:\test.txt”)
(2)File(String parent ,String child)
该构造方法根据定义的父路径和子路径字符串(包含文件名)创建一个新的File实例。
(3)File(File f ,String child)
该构造方法根据parent抽象路径名和child路径名字符串创建一个新File实例。
使用File类创建一个文件对象:File file = new File(“D:/myword”,“word.txt”);
如果D:/myword目录中没有名称为word的文件,File类对象可通过调用createNewFile()方法创建一个名称为word.txt的文件;如果word.txt文件存在,可以通过文件对象的delete()方法将其删除。
import java.io.File;
import java.io.IOException;
public class FileTest {
public static void main(String[] args) {
File file = new File("D:\\test","test6.txt");
if(file.exists()){
file.delete() ;
System.out.println("文件已删除!");
}else {
try {
file.createNewFile() ;
System.out.println("文件已创建!");
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
2、获取文件信息
File类提供了很多用于获取文件本身的一些信息,常用方法:
File类常用方法
方法 | 描述 |
---|---|
String getName() | 获取文件的名称 |
boolean canRead() | 判断文件是否是可读的 |
boolean canRead()判断文件是否是可读的 | |
boolean canWrite() | 品判断文件是否可被写入 |
boolean exits() | 判断文件长度是否存在 |
int length() | 获取文件的长度(以字节为单位) |
String getAbsolutePath() | 获取文件的绝对路径 |
String getParent() | 获取文件的父路径 |
boolean isFile() | 判断此抽象路径名表示的文件是否为普通文件 |
boolean isDirectory() | 判断此抽象路径名表示的是否是一个目录 |
boolean isHidden() | 判断文件是否是隐藏文件 |
long lastModified() | 获取文件最后修改时间 |
Boolean canExecute() | 测试应用程序是否可以执行此抽象路径名表示的文件。 |
boolean createNewFile() | 当且仅当具有该名称的文件尚不存在时,原子地创建一个由该抽象路径名命名的新的空文件。 |
boolean delete() | 删除由此抽象路径名表示的文件或目录。 |
File[] listFiles() | 返回一个抽象路径名数组,表示由该抽象路径名表示的目录中的文件。 |
String[] list() | 返回一个字符串数组,命名由此抽象路径名表示的目录中的文件和目录。 |
boolean mkdirs() | 创建由此抽象路径名命名的目录,包括任何必需但不存在的父目录。可创建多层文件包 |
boolean mkdir() | 创建由此抽象路径名命名的目录。只能创建一层文件包 |
boolean reNameTo(File dest) | 重命名由此抽象路径名表示的文件。 |
boolean setReadOnly() | 标记由此抽象路径名命名的文件或目录,以便只允许读取操作。 |
boolean setWritable(boolean writable) | 一种方便的方法来设置所有者对此抽象路径名的写入权限。 |