异常
异常:是Java程序在运行过程中出现的错误。
分类:编译时异常: 非RuntimeException、运行时异常: RuntimeException
Java默认异常处理方式:
1、自己将该问题处理,然后继续运行
2、自己没有针对的处理方式,只有交给调用main的jvm来处理
try…catch…finally
捕获异常:使用 try 和 catch 关键字捕获异常
try
{
// 程序代码
}catch(ExceptionName e1)
{
//Catch 块
}
多重捕获:一个 try 代码块后面跟随多个 catch 代码块
try{
// 程序代码
}catch(异常类型1 异常的变量名1){
// 程序代码
}catch(异常类型2 异常的变量名2){
// 程序代码
}catch(异常类型2 异常的变量名2){
// 程序代码
}finally{
释放资源;
}
throws/throw 关键字
throws:
1、用在方法声明后面,跟的是异常类名,可以跟多个异常类名,用逗号隔开;
2、表示抛出异常,由该方法的调用者来处理;
3、throws表示出现异常的一种可能性,并不一定会发生这些异常
throw:
1、用在方法体内,跟的是异常对象名,只能抛出一个异常对象名;
2、这个异常对象可以是编译期异常对象,可以是运行期异常对象;
3、表示抛出异常,由方法体内的语句处理,执行throw则一定抛出了某种异常
import java.io.*;
public class className
{
public void withdraw(double amount) throws RemoteException,
InsufficientFundsException
{
// Method implementation
}
//Remainder of class definition
}
声明自定义异常:
1、所有异常都必须是 Throwable 的子类。
2、写一个检查性异常类,需要继承 Exception 类。
3、写一个运行时异常类,需要继承 RuntimeException 类
class MyException extends Exception{
}
final、finally和finalize的区别:
1、final: 是状态修饰符, 可以用来修饰类 , 变量 , 成员方法.;被修饰的类不能被子类继承, 修饰的变量是一个常量不能被再次赋值,修饰的方法不能被子类重写
2、finally:用在try…catch…语句中 , 释放资源 ,始终被执行(JVM不能退出)
3、inalize: Obejct类中的一个方法,用来回收垃圾
异常注意事项:
1、子类重写父类方法时,子类的方法必须抛出相同的异常或父类异常的子类,不抛出异常也可以;
2、父类抛出了多个异常,子类重写父类时,子类不能抛出父类没有的异常,不抛出异常也可以;
3、被重写的方法没有异常抛出,则子类的方法不可以抛出异常;此时子类方法内有异常发生,那么子类只能try,不能throws
File类
构造方法:
1、File(String parent, String child):根据一个目录和一个子文件/目录得到File对象
2、File(File parent, String child):根据一个父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 File getParentFile() 返回此抽象路径名父目录的抽象路径名;如果此路径名没有指定父目录,则返回 null。
public long getTotalSpace() 返回此抽象路径名指定的分区大小。 返回总容量 单位字节
public long getFreeSpace() 返回此抽象路径名指定的分区中未分配的字节数。返回剩余容量 单位字节
public String getName(): 获取名称
public long length(): 获取长度。字节数
public long lastModified(): 获取最后一次的修改时间,毫秒值
public String[] list(): 获取指定目录下的所有文件或者文件夹的名称数组
public File[] listFiles(): 获取指定目录下的所有文件或者文件夹的File数组
程序小练习:
1、需求:从银行取钱,发现钱不够,通过自定义异常给出提示。
public class test {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入金额");
int money=1000;
int n=sc.nextInt();
if (n>money){
throw new yuebuzuException("余额不足哦");
}else {
money-=n;
System.out.println("还剩"+money+"元");
}
}
}
class yuebuzuException extends RuntimeException{
public yuebuzuException(String message) {
super(message);
}
}
2、需求: 修改指定目录下 所有文件的名称
如:
E:\resource\各种专治\[www-itcast-cn]专治各种疼痛01.mp4
E:\resource\各种专治\[www-itcast-cn]专治各种疼痛02.mp4
E:\resource\各种专治\[www-itcast-cn]专治各种疼痛03.mp4
....
修改成
E:\resource\各种专治\专治各种疼痛01.mp4
E:\resource\各种专治\专治各种疼痛02.mp4
E:\resource\各种专治\专治各种疼痛03.mp4
...
public class test1 {
public static void main(String[] args) throws IOException {
File file = new File("C:\\resource");
remove(file);
}
private static void remove(File file) {
File[] files = file.listFiles();
for (File f1 : files) {
if (f1.isFile()&&f1.getName().endsWith("mp4")) {
System.out.println(f1.getPath());
String s=f1.getName().substring(f1.getName().lastIndexOf("专"));
System.out.println(s);
File file1 = new File("C:\\resource\\各种专治\\"+s);
f1.renameTo(file1);
} else {
remove(f1);
}
}
}
}
package com.file.cn;
import java.io.File;
public class test1 {
public static void main(String[] args) {
3、需求:判断E盘demo目录下是否有后缀名为.jpg的文件,如果有将他们的后缀名,改成 .png
File file = new File("D:\\demo");
File[] files = file.listFiles();
System.out.println(files.length);
for (File file1 : files) {
if (file1.isFile()&&file1.getName().endsWith("jpg")){
int n=file1.getName().length()-3;
String a=file1.getName().substring(0,n)+"png";
File file2 = new File("D:\\demo\\"+a);
file1.renameTo(file2);
System.out.println(file1.getName().substring(0,n)+"png");
}
}
}
}