Java异常处理的简单总结+文件操作

本文深入探讨JVM默认的异常处理机制,包括空指针、数组越界等常见异常的处理方式,以及try-catch-finally、throws等异常处理语法的使用。同时,讲解自定义异常类的创建及finally语句块的特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JVM默认是如何处理异常的
* main函数收到这个问题时,有两种处理方式:
    a:自己将该问题处理,然后继续运行
    b:自己没有针对的处理方式,只有交给调用main的jvm来处理
* jvm有一个默认的异常处理机制,就将该异常进行处理,
并将该异常的名称,异常的信息.异常出现的位置打印在了控制台上,同时将程序停止运行





NullPointerException                //空指针异常
ArrayIndexOutOfBoundsException            //数组索引越界异常
ArithmeticException                //违反算术运算原则




* A:异常处理的两种方式
    * a:try…catch…finally
        * try catch
        * try catch finally
        * try finally 
    * b:throws
* B:try...catch处理异常的基本格式
    * try…catch…finally        




基本格式:try{}catch(Exception e){}    





//JDK7如何处理多个异常
try{}catch(ArithmeticException | ArrayIndexOutOfBoundsException e){}        //用|来分隔




try {} 
catch (Exception e) {                      //Exception e = new ArithmeticException("/ by zero");
    System.out.println(e.getMessage());        //获取异常信息
    System.out.println(e);                 //调用toString方法,打印异常类名和异常信息
    e.printStackTrace();                //jvm默认就用这种方式处理异常
}





public (static) void function() throws Exception{    //在可能发生异常的函数后面先抛出异常
    ...
    throw new Exception("这里是打印异常信息");
}




public (static) void function() throws zidingyiException{    //当抛出的异常想要自己定义时
    ...
    throw new zidingyiException("这里是打印异常信息");
}
class zidingyiException extends Exception {            //创建自定义异常类继承Exception类
    public AgeOutOfBoundsException() {
        super();
        
    }
    public AgeOutOfBoundsException(String message) {
        super(message);                    //同样是打印异常信息
        
    }
}




finally的特点
    * 被finally控制的语句体一定会执行
    * 特殊情况:在执行到finally之前jvm退出了(比如System.exit(0))
try{
    ...
}
catch(Exception e){
    ...
}
finally{
    ...    //千万不要在finally里面写返回语句,因为finally的作用是为了释放资源,是肯定会执行的
}




* final,finally和finalize的区别
* final可以修饰类,不能被继承
    * 修饰方法,不能被重写
    * 修饰变量,只能赋值一次
* finally是try语句中的一个语句体,不能单独使用,用来释放资源
* finalize是一个方法,当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。





练习题
public static void main(String[] args) throws Exception {
    Scanner sc = new Scanner(System.in);
    System.out.println("请输入一个整数:");
    while(true) {
        String line = sc.nextLine();                        //将键盘录入的结果存储在line中
        try {
            int num = Integer.parseInt(line);                //将字符串转换为整数
            System.out.println(Integer.toBinaryString(num));//将整数转换为二进制
            break;                                            //跳出循环
        }catch(Exception e) {
            try {
                new BigInteger(line);                        //如果不能转换为BigInteger,继续报异常
                System.out.println("录入错误,您录入的是一个过大整数,请重新输入一个整数:");
            }catch (Exception e2) {                            //alt + shif + z (try catch快捷键)
                try {
                    new BigDecimal(line);                    //如果不能转换为BigDecimal,继续报异常
                    System.out.println("录入错误,您录入的是一个小数,请重新输入一个整数:");
                } catch (Exception e1) {
                    System.out.println("录入错误,您录入的是非法字符,请重新输入一个整数:");
                }
            }                
        }
    }
}




File file=new File("C:\\Users\\Administrator\\Desktop\\新建文件夹\\新建文本文档.txt");//根据一个路径得到File对象
file.exists();                //判断文件或目录是否存在
File file=new File("新建文本文档.txt")    //默认的路径是在本类的class文件夹下
String parent = "C:\\Users\\Administrator\\Desktop\\新建文件夹";
String child = "新建文本文档.txt";
File file = new File(parent,child);    //根据一个目录和一个子文件/目录得到File对象
File parent = new File("C:\\Users\\Administrator\\Desktop\\新建文件夹");
String child = "新建文本文档.txt";
File file = new File(parent, child);    //根据一个父File对象和一个子文件/目录得到File对象




file.createNewFile();            //创建文件 如果存在这样的文件,就不创建了,返回true
File dir1 = new File("aaa");
dir1.mkdir();                //创建文件夹 如果存在这样的文件夹,就不创建了
File dir3 = new File("ccc\\ddd");
dir3.mkdirs();                //创建多级目录




File file1 = new File("ooo.txt");
File file2 = new File("xxx.txt");
System.out.println(file1.renameTo(file2));    
* 如果路径名相同,就是改名。
* 如果路径名不同,就是改名并剪切。
file1.delete();                //删除文件或者文件夹,如果删除一个文件夹,那么文件夹必须是空的




File file = new File("zzz");
file.isDirectory();            //判断是否是文件夹
file.isFile();                //判断是否是文件
file.setReadable(false);        //其实没什么用,因为windows系统认为所有的文件都是可读的
file.canRead()                //判断是否可读
file.setWritable(true);            //设置文件是否可写
file.canWrite();            //判断是否可写
file.isHidden();            //判断是否隐藏





File file = new File("ccc.txt");
file.getAbsolutePath();            //获取绝对路径
file.getPath();                //获取路径
file.getName();                //获取文件或文件夹的名字
file.length();                //获取文件的字节数
file.lastModified();            //获取文件的最后修改修改时间
String[] arr = file.list();        //取指定目录下的所有文件或者文件夹的名称数组
File[] subFiles = dir.listFiles();    //获取指定目录下的所有文件或者文件夹的File数组




String[] arr = file.list(new FilenameFilter() {            //文件名过滤器
    public boolean accept(File dir, String name) {
        File file = new File(dir, name);
        return file.isFile() && file.getName().endsWith(".jpg");    //一些过滤的文件特征
    }
});

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值