何为Io流?
IO流用来处理设备之间的数据传输,上传文件和下载文件。
1.异常类
(1)Throwable类
Throwable类的常用方法 | 概述 |
---|---|
getMessage() | 获取异常信息,返回字符串。 |
toString() | 获取异常类名和异常信息,返回字符串 |
printStackTrace() | 获取异常类名和异常信息,以及异常出现在程序中的位置。返回值void。 |
(2)异常处理的两种方式
- try…catch…finally自己捕获处理
try {
可能出现问题的代码 ;
}catch(异常名 变量名){
针对问题的处理 ;
}finally{
释放资源;
}
- throws 抛给调用者
使用Alt+Enter万能纠错
注意:多个异常之间只能是平级的关系,不能出现子父类的继承关系
- java中的异常发生之后如果一直往上抛,抛给main,会调用JVM终止程序
- 对异常没有捕捉,采用上报的方式,此方法的后续代码不执行
- catch写多个的时候,从上到下,必须遵守从小到大
- JDK8之后,catch可以采用或的方式: catch(异常|异常|异常 e)
(3)throw与throws之间的区别
- throws
用在方法声明后面,跟的是异常类名
可以跟多个异常类名,用逗号隔开
表示抛出异常,由该方法的调用者来处理
throws表示出现异常的一种可能性,并不一定会发生这些异常 - throw
用在方法体内,跟的是异常对象名
只能抛出一个异常对象名
这个异常对象可以是编译期异常对象,可以是运行期异常对象
表示抛出异常,由方法体内的语句处理
throw则是抛出了异常,执行throw则一定抛出了某种异常
(4)final,finally和finalize之间的区别
- final:是一个状态修饰符, 可以用来修饰类 , 变量 , 成员方法.
修饰的类不能被子类继承
修饰的变量其实是一个常量不能被再次赋
修饰的方法不能被子类重写 - finally:用在try…catch…语句中 , 作用: 释放资源 . 特点: 始终被执行(JVM不能退出)
- finalize: Obejct类中的一个方法,用来回收垃圾
注意:
被finally控制的语句体一定会执行(前提 jvm没有停止),如果jvm虚拟机在finally之前停止,那便不会执行(比如System.exit(0))
(5)自定义异常:生活中我们无法描述的异常
注意:需要将我们自定义的异常类纳入到我们的异常体系中
继承自Exception
继承自RuntimeException
例如:银行取钱
public class MyTest {
public static void main(String[] args) {
int num = 100;
Scanner scanner = new Scanner(System.in);
System.out.println("请输入你的取款金额");
int money = scanner.nextInt();
if (money <= num) {
num -= money;
} else {
throw new NoMoneyException("余额不足");
}
}
}
public class NoMoneyException extends RuntimeException{
public NoMoneyException(String msg) {
super(msg);
}
}
(6)finally面试题分析
public class ExceptionText {
public static void main(String[] args) {
int m = m();
System.out.println(m);
}
public static int m(){
int i=100;
try {
return i;
}finally {
i++;
}
}
}
运行结果为:100
因为java遵循自上而下的运行规则,还遵守return语句一旦执行,方法结束的原则,为了使代码遵守这两个规则,在编译时进行了更改
经过反编译的代码是:
int i=100;
int j=i;
i++;
System.out.println(j);
所以:运行结果为100
2.File类:文件和目录路径名的抽象表示形式
(1)File类的功能
File类的方法 | 概述 |
---|---|
public boolean createNewFile() | 创建一个新的文件 |
public boolean mkdir() | 创建单级文件夹 |
public boolean mkdirs() | 创建多级文件夹 |
public boolean delete() | 删除文件或者文件夹 |
public boolean renameTo(File dest) | 把文件夹重命名 |
public boolean isDirectory() | 判断是否是目录 |
public boolean isFile() | 判断是否是文件 |
public boolean exists() | 判断是否存在 |
public boolean canRead() | 判断是否可读 |
public boolean canWrite() | 判断是否可写 |
public boolean isHidden() | 判断是否隐藏 |
public boolean isAbsolute() | 判断是否用的绝对路径 |
public String getAbsolutePath() | 获取绝对路径 |
public String getPath() | 获取相对路径 |
public String getParent() | 返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回 null。 |
public long lastModified() | 获取最后一次的修改时间,毫秒值 |
public String getName() | 获取名称 |
public String[] list() | 获取指定目录下的所有文件或者文件夹的名称数组 |
public File[] listFiles() | 获取指定目录下的所有文件或者文件夹的File数组 |
public File getParentFile() | 返回此抽象路径名父目录的抽象路径名;如果此路径名没有指定父目录,则返回 null。 |
(2)File类的文件名称过滤器的概述和使用
public String[] list(FilenameFilter filter) 返回String类型
public File[] listFiles(FilenameFilter filter) 返回File类型
举例:
判断E盘目录下是否有后缀名为.jpg的文件,如果有,就输出该文件名称
import java.io.File;
import java.io.FileFilter;
public class Home {
public static void main (String[] args) {
File file =new File("c:\\Users\\文帝\\Desktop");
File []a= file.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
if (pathname.getName().endsWith(".jpg")){
return true;
}else {
return false;
}
}
});
for (File file1 : a) {
System.out.println(file1.getName());
}
}
}