一、异常

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: