前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java基础学习_IO流01_异常、File类_day19总结

java基础学习_IO流01_异常、File类_day19总结

作者头像
黑泽君
发布2018-10-11 14:39:54
3810
发布2018-10-11 14:39:54
举报
文章被收录于专栏:黑泽君的专栏黑泽君的专栏

 java基础学习_IO流01_异常、File类_day19总结

代码语言:javascript
复制
=============================================================================
=============================================================================
涉及到的知识点有:
  1:异常(理解)
        (0)讲解IO流之前为什么先讲解异常和File类呢?
        (1)异常的概述
        (2)异常的由来
        (3)异常的体系
        (4)异常的处理
        (5)异常的面试题
        (6)finally关键字的特点及其面试题
        (7)自定义异常类
        (8)异常的注意事项
    2:File类(掌握)
        (1)File类的概述
        (2)File类的构造方法
        (3)File类的功能
        (4)File类的案例
=============================================================================
=============================================================================
1:异常(理解)
    (0)讲解IO流之前为什么先讲解异常和File类呢?
        因为File类表示的是IO流将来要操作的文件类,所以我们需要学习File类。
        而操作文件无非就是上传文件和下载文件,在这个操作的过程中可能会出现问题,
        出现问题后,我们需要对对应的代码进行处理。所以我们需要先学习异常。
    (1)异常的概述
        异常就是Java程序在运行过程中出现的错误。
    (2)异常的由来
        问题也是现实生活中一个具体事务,也可以通过Java的类的形式进行描述,并封装成对象。
        其实就是Java对不正常情况进行描述后的对象体现。
    (3)异常的体系
        Java中的异常被分为两大类:编译时异常和运行时异常。所有的RuntimeException类及其子类的实例被称为运行时异常,其他的异常就是编译时异常。
        Throwable 类是 Java 语言中所有错误或异常的超类。直接已知子类:Error, Exception。
        Throwable类
            |--Error类        严重错误问题,我们不处理。这种问题一般都是很严重的,我们一般处理不了,比如说内存溢出。
            |--Exception类
                |--RuntimeException类         运行期异常,这种问题我们也不处理,因为是你写代码的问题,而且这个问题出现肯定是我们的代码不够严谨,需要修正代码的。
                |--非RuntimeException类       编译期异常,必须进行处理的,因为你不处理,编译就不能通过。
---------------------------------------
    (4)异常的处理
        A:JVM的默认处理
            如果程序出现了问题,我们没有做任何处理,最终JVM会做出默认的处理。
            把异常的名称、原因及出现的位置等信息输出在控制台。同时会结束程序。
            
            但是呢,其余没有问题的程序就不能继续执行了。
            所以感觉JVM的默认处理不够好,既然不好那我们就自己来处理呗!那么如何自己处理呢?
        B:自己处理
            异常的处理方案
                a:try...catch...finally...
                    自己编写处理的代码,后面没有问题的程序可以继续执行。
                b:throws
                    把自己处理不了的异常,在方法上声明,告诉调用者,这里有问题。
---------------------------------------
    (5)异常的面试题
        A:编译期异常和运行期异常的区别?
            编译期异常:必须要显示处理的,否则编译不通过。
            运行期异常:可以显示处理,也可以显示了不处理;或者直接抛出,告诉调用者,这里有问题。
        B:throw和throws的区别
            throw:
                在方法体中,后面跟的是异常对象名,并且只能是一个,
                throw抛出的是一个异常对象,说明这里肯定有一个异常产生了。
            throws:
                在方法声明上,后面跟的是异常类名,可以是多个,用逗号隔开,
                throws是声明方法有异常,是一种可能性,这个异常并不一定会产生。
---------------------------------------
    (6)finally关键字的特点及其面试题
        A:finally用于释放资源,它的代码永远会执行。
            特殊情况:如果在执行到finally之前jvm退出了,比如System.exit(0),则就不能执行了finally控制的语句体了。
        B:面试题
            a:final,finally,finalize的区别?
                final:最终的意思,可以修饰类、成员变量、成员方法
                    修饰类,类不能被继承。
                    修饰变量,变量是常量。
                    修饰方法,方法不能被重写。
                finally:是异常处理的一部分,用于释放资源。
                    一般来说,代码肯定会执行,特殊情况:如果在执行到finally之前jvm退出了,比如System.exit(0),则就不能执行了finally控制的语句体了。
                finalize:是Object类的一个方法,用于垃圾回收。
            b:如果catch里面有return语句,请问finally里面的代码还会执行吗?
                如果会执行,请问是在return前,还是return后。
                会。前。(相对于最后一个能执行到的return语句来说)
                准确的说,应该是在中间。
        C:try...catch...finally...的格式变形
            a:try...catch...finally...
            b:try...catch...
            c:try...catch...catch...
            d:try...catch...catch...catch...finally...
            e:try...finally...
                这种做法的目前是为了释放资源但是异常没有处理。
---------------------------------------
    (7)自定义异常类
        java不可能对所有的情况都考虑到,所以,在实际的开发中,我们可能需要自定义异常类。
        而我们自己随意的写一个类,是不能作为自定义异常类来看待的,要想你的类能是一个自定义的异常类,就必须继承自Exception类或者RuntimeException类。
            两种方式:
                A:自定义异常类继承自Exception类           需要检查编译期异常和运行期异常
                B:自定义异常类继承自RuntimeException类    只需要检查运行期异常
        即:自定义异常类继承自Exception类或者RuntimeException类,只需要在自定义异常类中提供无参构造和一个带参构造即可。
    (8)异常的注意事项
        A:子类重写父类方法时,子类的方法必须抛出相同的异常或父类异常的子类。(父亲坏了,儿子不能比父亲更坏)
        B:如果父类抛出了多个异常,子类重写父类时,只能抛出相同的异常或者是父类异常的子集,子类不能抛出父类没有的异常。
        C:如果被重写的方法没有异常抛出,那么子类的方法绝对不可以抛出异常,如果子类方法内有异常发生,那么子类只能try,不能throws。
-----------------------------------------------------------------------------
2:File类(掌握)
    (1)File类的概述
        是文件和目录(文件夹)路径名的抽象表示形式。仅仅是一个路径的表示,不代表具体的事物一定是存在的。
        IO流操作中大部分都是对文件的操作,所以Java就提供了File类供我们来操作文件。(在java.io包下)
    (2)File类的构造方法
        A:public File(String pathname) 根据一个路径得到File对象
            File file = new File("e:\\demo\\a.txt"); // 把e:\\demo\\a.txt封装成一个File对象
            
        B:public File(String parent, String child) 根据一个父目录和一个子文件/目录得到File对象
            File file = new File("e:\\demo", "a.txt");
            
        C:public File(File parent, String child) 根据一个父File对象和一个子文件/目录得到File对象
            File file = new File("e:\\demo");
            File file2 = new File(file, "a.txt");
            
            以上三种方式其实效果一样。
---------------------------------------
    (3)File类的功能
        A:创建功能
            public boolean createNewFile() 创建文件,如果存在这样的文件,就不创建了,返回false(该方法会抛异常)
            public boolean mkdir()         创建文件夹,如果存在这样的文件夹,就不创建了,返回false(该方法不会抛异常)
            public boolean mkdirs()        创建文件夹,如果父文件夹不存在,会帮你创建出来,如果存在这样的文件,就不创建了,返回false(该方法不会抛异常)
                注意:
                    到底要创建文件还是文件夹,调用者最清楚,所以方法不要调用错了。
        B:删除功能
            public boolean delete() 删除文件或文件夹(该方法不会抛异常)
                注意:
                    a:如果你创建文件或者文件夹忘了写盘符路径,则默认在Java的项目路径下。
                    b:Java中的删除不走回收站。
                    c:要删除一个文件夹,请注意该文件夹内不能包含有文件或者文件夹。
        C:重命名功能
            public boolean renameTo(File dest) 给文件/文件夹重命名(该方法不会抛异常)
                如果路径名相同,就是改名。
                如果路径名不同,就是改名并剪切到其他目录。
                注意:
                    路径以盘符开始:绝对路径    c:\\a.txt
                    路径不以盘符开始:相对路径  a.txt
        D:判断功能
            public boolean isDirectory()    判断是否是目录
            public boolean isFile()         判断是否是文件
            public boolean exists()         判断是否存在
            public boolean canRead()        判断是否可读
            public boolean canWrite()       判断是否可写
            public boolean isHidden()       判断是否隐藏
        E:基本获取功能
            public String getAbsolutePath() 获取绝对路径
            public String getPath()         获取相对路径
            public String getName()         获取名称
            public long length()            获取长度,单位为字节数
            public long lastModified()      获取最后一次的修改时间,单位为毫秒值
        F:高级获取功能
            public String[] list()          获取指定目录下的所有文件或者文件夹的名称数组(返回的是字符串对象数组)
            public File[] listFiles()       获取指定目录下的所有文件或者文件夹的File数组(返回的是文件对象数组)
                注意:获取的是指定目录下的所有文件或者文件夹,不包括文件夹下的文件和文件夹!!!
        G:过滤器功能(文件名称过滤器,是接口)
            public String[] list(FilenameFilter filter)
            public File[] listFiles(FilenameFilter filter)
---------------------------------------
    (4)File类的案例
        A:判断E盘目录下是否有后缀名为.jpg的文件,如果有,就输出此文件的名称。
            思路a:先获取所有的,在遍历的时候进行判断,再输出。(即:先获取所有的文件或者文件夹的File数组,然后遍历该File数组,得到每一个File对象,依次判断,如果满足条件就输出。)
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-03-31 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档