Day8 Java—异常

Day 8

1. 异常

  • 即非正常情况,即程序出现的错误

  • 在这里插入图片描述

  • 异常(Exception):合理的应用程序可能需要捕获的问题,可被解决,举例:NullPointerException(空指针引用,当一个空引用调用对应方法时)

    • 运行时异常:异常子类继承的直接父类RunTimeException,发生概率较小,可处可不处
    • 编译时异常:异常子类继承的直接父类不是RunTimeException,发生概率较大,开发人员必须处理
  • 错误(Error):JVM系统内部错误、资源耗尽等严重问题,不可解决,合理的应用程序不应该试图捕获的问题,举例:StackOverFlowError

  • JVM默认处理异常的方式:在控制台打印错误信息,并终止程序

  • 开发中异常的处理方式

    • try···catch(finally):捕获,自己处理

      • 处理完异常之后,程序会继续执行
      • finally
        • 以后开发中,如果想关闭一些消耗系统资源的变量,就把关闭代码写在finally中
    • throws:抛出,交给调用者处理

public class Test {
    public static void main(String[] args) {
        try{
            int a=10/0;     //被除数不能为0的异常,ArithmeticException
            System.out.println("a:"+a);
        }catch(Exception e){      //catch后的括号里是被检测代码可能出现的异常名称,Exception是最大的异常类总名称,这里也可写成(ArithmeticException ae)
            e.printStackTrace();    //打印异常信息            
            System.out.println("异常!被除数不能为0,具体异常为:"+e.getMessage());
            return;
        }finally {
            System.out.println("程序执行完成");     //finally中的代码一定会被执行
        }
        System.out.println("后续程序执行代码");
    }
}

/**
异常!被除数不能为0
程序执行完成
*/
public class Test {

    public static void main(String[] args) throws Exception{
        //抛出异常解决方案
        //方案一,接着抛出异常给JVM
        show();
    }

    public static void show() throws Exception{
        int a=10/0;
        System.out.println("a:"+a);
    }
}

/**
Exception in thread "main" java.lang.ArithmeticException: / by zero
	at com.zj.Day10.note.Test.show(Test.java:12)
	at com.zj.Day10.note.Test.main(Test.java:9)

*/
public class Test {

    public static void main(String[] args) {
        //抛出异常解决方案
        //方案二,捕获异常
        try {
            show();
        } catch (Exception e) {      //可写多个catch
            System.out.println("代码出问题了");
        }
    }

    public static void show() throws Exception{
        int a=10/0;
        System.out.println("a:"+a);
    }
}
/**
代码出问题了
*/
  • 自定义异常

    需求:学生年龄小于0时抛出异常

/*
自定义异常类
*/
public class AgeException extends Exception{
    public AgeException(String message) {
        super(message);
    }
}
/*
测试类
*/
public class Test {
    public static void main(String[] args)throws AgeException{
        Student s1=new Student();
        s1.setAge(-2);
        if(s1.getAge()<0){
            throw new AgeException("年龄不合法");
        }
    }
}
/*
Exception in thread "main" com.zj.Day12.AgeException: 年龄不合法
	at com.zj.Day12.test.main(test.java:8)
*/

2. IO流

  • 按数据流分向:

    • 输入流
    • 输出流
  • 按操作方式分:

    • 字节流

      • InputStream

        • FileInputStream
        • BufferedInputStream
      • OutputStream

        • FileOutputStream
        • BufferedOutputStream
    • 字符流

      • Reader

        • FileReader
        • BufferedReader
      • Writer

        • FileWriter
        • BufferedWriter

2.1 File类

  • 文件,文件夹,一个File对象代表磁盘上的某个文件或文件夹

  • 构造方法

    • File(String pathname)
    • File(String parent,String child)
    • File(File parent,String child)
  • 成员方法

    • createNewFile():创建文件
    • mkdir()mkdirs():创建目录
    • isDirectory():判断File对象是否为目录
    • isFile():判断File对象是否为文件
    • exists():判断File对象是否存在
public class Test {

    public static void main(String[] args) throws IOException {
        //创建File对象
        //方式一
        File file1=new File("D:\\ProgramFile\\IO\\file1.txt");
        boolean flag0=file1.createNewFile();    //防止路径异常,所以这边需要抛出异常
        System.out.println(flag0);

        //方式二
        File file2=new File("D:\\ProgramFile\\IO\\","file2.txt");
        boolean flag4=file2.createNewFile();    //防止路径异常,所以这边需要抛出异常
        System.out.println(flag4);

        //方式三
        File file3=new File("D:\\ProgramFile\\IO\\file3");
        File file4=new File(file3,"file3.txt");
        boolean flag5=file3.mkdir();    //防止路径异常,所以这边需要抛出异常
        boolean flag6= file4.createNewFile();   //防止路径异常,所以这边需要抛出异常
        System.out.println(flag5+" "+flag6);

        //创建file4.txt
        File file5=new File("D:\\ProgramFile\\IO\\file4.txt");
        boolean flag1=file5.createNewFile();    //防止路径异常,所以这边需要抛出异常
        System.out.println(flag1);

        //创建文件夹
        File file6=new File("D:\\ProgramFile\\IO\\dir1");
        boolean flag2=file6.mkdir();
        System.out.println(flag2);

        //创建多层文件夹
        File file7 =new File("D:\\ProgramFile\\IO\\dir1\\dir2");
        boolean flag3=file7.mkdirs();
        System.out.println(flag3);

        System.out.println("测试file6文件是不是文件夹:"+file6.isDirectory());
        System.out.println("测试file2文件是不是文件:"+file2.isFile());
        System.out.println("测试文本file1(file1.txt)是否存在:"+file1.exists());
        System.out.println("测试文本file2(file2.txt)是否存在:"+file2.exists());
        System.out.println("测试文件file3是否存在:"+file3.exists());
        System.out.println("测试文本file4(file3.txt)是否存在:"+file4.exists());
        System.out.println("测试文本file5(file4.txt)是否存在:"+file5.exists());
    }
}

/**
true
true
true true
true
true
true
测试file6文件是不是文件夹:true
测试file2文件是不是文件:true
测试文本file1(file1.txt)是否存在:true
测试文本file2(file2.txt)是否存在:true
测试文件file3是否存在:true
测试文本file4(file3.txt)是否存在:true
测试文本file5(file4.txt)是否存在:true
*/

在这里插入图片描述

  • 成员方法
    • getAbsolutePath():获取绝对路径,绝对路径:以盘符开头的路径

      • 例如:D:/1.txt
    • getPath():获取文件的相对路径,相对路径:一般是相对于当前项目路径来讲的

      • 例如:1.txt
    • getName():获取文件名

    • list():获取指定目录下所有文件(夹)名称数组

    • listFiles():获取指定目录下所有文件(夹)File数组

 public class Test {

    public static void main(String[] args) throws IOException {
        File file1 = new File("D:\\ProgramFile\\IO\\file4.txt");
//        boolean flag1 = file1.createNewFile();    //防止路径异常,所以这边需要抛出异常
//        System.out.println(flag1);                //文件创建成功之后会返回一个true

        //获取file1的绝对路径
        String ap = file1.getAbsolutePath();
        System.out.println(ap);

        //获取file6的相对路径
        String pa = file1.getPath();
        System.out.println(pa); //从项目的路径开始

        //获取文件名
        String filename = file1.getName();
        System.out.println(filename);

        //获取指定目录下所有文件(夹)名称数组
        File file2 = new File("D:\\ProgramFile");
        String[] filelist = file2.list();
        for (String s : filelist) {
            System.out.println(s+" ");
        }

        System.out.println();

        //获取指定目录下所有文件(夹) File数组
        File[] files = file2.listFiles();
        for (File file : files) {
            System.out.println(file.getAbsolutePath());
        }
    }
}

/**
D:\ProgramFile\IO\file4.txt
D:\ProgramFile\IO\file4.txt
file4.txt
09.IO流.pdf 
debug.log 
demo1 
demo1改 
idea 
IO 
jdk8 
notepad 
projectidea 
shop_demo 
student_demo.rar 
typora 
video2021 
video2022 
参考集合1 
毕设 
集合案例(1).doc 
集合案例(2).docx 

D:\ProgramFile\09.IO流.pdf
D:\ProgramFile\debug.log
D:\ProgramFile\demo1
D:\ProgramFile\demo1改
D:\ProgramFile\idea
D:\ProgramFile\IO
D:\ProgramFile\jdk8
D:\ProgramFile\notepad
D:\ProgramFile\projectidea
D:\ProgramFile\shop_demo
D:\ProgramFile\student_demo.rar
D:\ProgramFile\typora
D:\ProgramFile\video2021
D:\ProgramFile\video2022
D:\ProgramFile\参考集合1
D:\ProgramFile\毕设
D:\ProgramFile\集合案例(1).doc
D:\ProgramFile\集合案例(2).docx
*/

2.2 字符流

  • 字符流读取,按字符读取

  • 字符流读取,按字符数组读取

  • 字符流读取,按字符数组读取,用while循环优化

  • 字符流写数据

  • IO流拷贝文件


  • 字符缓冲流拷贝文件的标准代码

  • 字符缓冲流一次读写一行的方式

2.3 字节流

  • 一次读取一个字节的字节流

  • 一次读取一个字节数组的字节流

  • 字节缓冲流拷贝文件的标准代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值