一、异常
1、异常分类:
Throwable:Throwable类是 Java 语言中所有错误或异常的超类。它只有两个子类
Error:属于严重问题,只能避免;如内存溢出(OutOfMemory)
Exception:可以解决的异常问题
编译时期异常:在写代码期间遇到的异常,不处理没办法运行;
运行时期异常(RuntimeException):在程序运行时期遇到的异常,一般情况不是编译时期异常就是运行时期异常;
2、异常处理:
1)捕获异常:try-catch-finally
A:格式:try{
有可能出现问题的代码
}catch(异常类名 变量名){ //若try中的代码与该异常类相符合,便执行catch中的代码
问题处理
}finally{ //finally{}没有必要可以不写
一定会执行的代码,一般用于释放资源
}
若一段代码有多个异常
方式一:
try{
}catch(){ //小异常类先catch
}chtch(){ //大异常类后catch
}finally{
}
方式二:
try{
}catch(异常类名1 | 异常类名2 | 异常类名3 变量名){
}finally{
}
B:Throwable常用方法:用于异常处理
如果try中代码出现异常,jvm会自动生成一个异常对象用来与catch的参数异常类(只能比可能出现的异常大或者相等)作比较,如果相匹配那么便执行catch中的代码;
public string getMessage():返回的是一个异常的消息字符串
public String toString():返回的是一个简单的描述信息
public void printStackTrace():描述异常信息,以及出现的具体位置在哪里(开发中常用)
egg: import java.util.ArrayList;
public class ThrowableDemo {
public static void main(String[] args) {
demo1(); //by zero
demo2(); //java.lang.ArrayIndexOutOfBoundsException: 4
demo3(); /*java.lang.NullPointerException
at org.westos.exception.ThrowableDemo.demo3(ThrowableDemo.java:17)
at org.westos.exception.ThrowableDemo.main(ThrowableDemo.java:9)*/
}
private static void demo3() {
ArrayList<String> al = null;
try {
System.out.println(al.get(0));
} catch (NullPointerException e) { //空指针异常
e.printStackTrace();
}
}
private static void demo2() {
try {
int[] arr = {1,2,3};
System.out.println(arr[4]);
} catch (ArrayIndexOutOfBoundsException e) { //数组下角标越界异常
String string = e.toString();
System.out.println(string);
}
}
private static void demo1() {
try {
System.out.println(9/0);
} catch (ArithmeticException e) { //运算异常
String message = e.getMessage();
System.out.println(message);
}
}
}
C:final,finally,finalize区别:
final:最终的,修饰类 类不可被继承;修饰成员方法 方法不能重写;修饰成员变量 常量
finally:现在IO流中或者数据中,用来释放资源;在try-catch中属于必须执行的
finalize():是Object的方法,与垃圾回收器有关,调用System.gc()实际上是调用了重写了Object的finalize()方法
D:catch中含有return的情况
当catch中需要返回值,最终返回的值便是它,无论后面finally中是否对该值有没有修改
finally中修改的只是该值,返回值还是由catch中return决定,若finally中也有return就另说;
egg: public class FinallyDemo {
public static void main(String[] args) {
System.out.println("返回值 = " + getint()); //返回值 = 20
}
public static int getint(){
int a = 10;
try {
System.out.println(a/0);
} catch (ArithmeticException e) {
a = 20;
return a; ////这里面形成了一种回路径
} finally {
a = 30;
System.out.println("a = " + a); //a = 30
}
return a;
}
}
2)抛出异常:throws
A:格式:在方法上抛出
public static void show() throws 异常类名{} //同样抛出异常只能往大里抛,最好和可能出现的异常相同
注意;不建议在main()方法上抛出异常
B:throws和throw的区别
throws:一般在方法声明上抛出
抛出的是一个异常类名,可以抛出多个异常,中间用逗号隔开
throws表示抛出异常,这段代码可能会抛出异常
一般情况:throws用的比较多
throw:一般在方法中进行抛出
抛出的是一个异常对象(匿名对象的方式)
throw:表示抛出:肯定的抛出异常(具体异常),走到这块代码,一定会执行throw中的异常
在语句中进行处理
egg: public static void method() throws Exception{
int a = 10;
int b = 0;
if(b == 0){
throw new Exception();//直接指定的异常:大方向的异常
}else{
System.out.println(a/b);
}
}
C:注意事项:
如果子类重写的父类的方法有异常抛出,那么子类重写的方法只能抛出比父类方法小的异常,或者一样;
如果父类的方法没有异常抛出,那么,子类重写的方法也不能抛出异常,只能进行异常捕获
3、自定义异常类
自定义异常类:
1)必须继承Exception或者RuntimeException
2)必须有构造方法,以便jvm生成自定义异常类对象
3)可有有一些自己的异常处理方法
二、File类
1、概述:文件和目录路径名的抽象表示形式;可以把一个文件或者目录封装成一个对象;
2、构造方法:
File(String pathname):将该路径名称的文件或者目录封装成了一个File实例(常用)
File(String parent, String child):将parent目录里面的child文件封装成一个File实例
File(File parent, String child):将File类型的parent目录里得child文件封装成一个File实例
egg: File file = new File("e:\\Demo\\a.txt"); // 绝对路径
File file = new File("a.txt"); //相对路径;在该项目下
3、常用方法
public boolean createNewFile throws IOException():表示创建文件,返回true,若文件存在返回false创建失败
public boolean mkdir():创建文件夹/目录,如果存在该文件夹,就不需要创建
public boolean mkdirs():创建多个文件夹/目录,只要路径上了目录不存在就创建
egg: File file = new File("e:\\a\\b\\c\\d\\e");
file.mkdirs(); //就会创建a b c d e目录
public boolean delete():删除此抽象路径名表示的文件或目录
//一次只能删除一个最顶层的文件或目录,且不能删除有文件或者目录的目录;
//该输出方式不经过回收站,不能找回;
public boolean renameTo(File dest):重命名
//两个文件路径一致,只会重命名
//两个文件路径不一致,不仅重命名,还会剪切,将前者移动到renameTo参数所在的目录下;
判断功能:
public boolean isAbsolute():判断该路径是否是绝对路径
public boolean isFile()判断此文件是否为一个标准文件
public boolean isHidden():判断此抽象路径表示的文件是否是一个隐藏文件
public boolean canRead():是否可读
public boolean canWrite():是否可写
获取功能:
public String getAbsolutePath():获取绝对路径
public STring getPath():获取相对路径
public String getName():获取文件或者目录的名称
public long length():获取文件的长度
public long lastModified():返回次抽象路径文件最后一次被修改的时间,返回的修改时间的一个毫秒值
//使用Date SimpleDateFormat类可以将其转换成String类型
egg: File file = new File("e:\\demo\\a.txt");
Date date = new Date(file.LastModified());
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String s = sdf.format(date);
System.out.println(s);
public String[] list():获取指定盘符下的所有的文件以及文件夹的名称数组
public File[] listFiles():获取指定盘符下的所有文件以及文件夹的File对象数组(常用)
egg:
4、文件名称过滤器 —— FilenameFileter接口
public File[] listFiles(FileFilter filter)
public String[] list(FilenameFilter filter)(常用)
egg: