java学习day8

异常

程序中一些程序处理不了的特殊情况

异常类 Exception

见过的异常: NullPointerException ArrayIndexOutOfBoundsException

异常的分类:

        检查型异常(编译异常):在编译时就会抛出的异常(代码上会报错)

                需要在代码中编写处理方式(和程序之外的资源访问)直接继承Exception

        运行时异常:在代码运行阶段可能会出现的异常,可以不用明文处理,可

                以通过代码避免异常的发生,继承Exception

当程序中出现异常就会中断程序,代码不会继续运行

处理异常两种方式:

        try…catch…finally…

        声明抛出throws

        try{

                try块尝试捕捉异常 其中可能是会抛出异常的代码

        }catch(异常参数){

                捕捉到异常后要处理的代码

        }finally{

                无论是否出异常,都会执行的代码块

                一般用在关闭资源

        }

        例:

        声明一个文件对象和字节流输入流对象时会有FileNotFoundException异常,是检查型异常

        通过try-catch-finally处理异常

        

        当需要处理多种异常时,有以下几种处理方式

        例:

        12/0会出现ArithException异常

        将Object strA=""强制转换成Integer类型会出现ClassCastException异常

        获取FileInputStream对象会出现FileNotFoundException异常

        需要处理多种异常

        1.try处理多种异常

        try{

        }catch(异常参数1){

        }catch(异常参数2){

        }catch(异常参数3){

        }finally{

        }

        

        2.catch合并处理

        一个catch块捕捉多种异常

        使用|声明多种异常

        try{

        }catch(异常参数1|异常参数2|异常参数3){

        }

        

        3.catch块声明父类异常,捕捉所有子类异常

        try{

        }catch(Exception e){

        }

        

        当catch捕捉多个异常时,其异常捕捉的顺序:子类异常有限处理,父类异常后置处理

        例如:

        出现IndexOutOfBounds异常、ArrayIndexOutOfBounds异常和StringIndexOutOfBounds

        异常时要先捕捉后两者

        因为ArrayIndexOutOfBounds异常和StringIndexOutOfBounds异常都继承于                                    IndexOutOfBounds异常

        

        如果catch块抛出了异常:如果没有finally就会中断程序

                                              如果有finally,就会运行finally,并且正常返回,此方法正常运行结                                                束

        try块不能单独存在,必须有其他语句块

        

        try块中没有检查型异常,不能在catch块中随意捕捉

        

自定义异常

继承Exception或RuntimeException

两个构造方法

throws 声明方法中可能抛出的异常

throws 声明抛出多种异常

运行时异常可以不throws

方法重写:子类对父类中继承过来的方法进行重新定义

约束:返回值类型 方法名 参数列表都不能变

访问权限只能更开放

抛出的异常只能更精确(范围更小),不能扩大

File

java中对文件的处理 java.io包

声明文件

方法

exists()

f.exists()

搜索计算机是否存在该文件,存在返回true,不存在返回false

createNewFile()

f.createNewFile()

在f的路径上创建文件,创建成功返回true,失败返回false

delete()

f.delete()

删除f文件,删除成功返回true,失败返回false

isFile()

f.isFile()

获取f是否是文件,是返回true,不是返回false

isDirectory()

f.isDirectory()

获取f是否是文件夹,是返回true,不是返回false

mkdir()

f.mkdir()

根据相对路径创建目录,只会在原有的目录里面创建,如果上面一级的目录xxdir不存在,则这次创建便会失败返回false, 报xxxdir这个目录找不到的异常

mkdirs()

f.mkdirs()

根据绝对路径新建目录,如果上一级目录不存在,则会将上一级目录创建完后,再创建后面一级的目录

length()

f.length()

返回f文件的内容的长度,返回值是long类型

使用createNewFile()方法时需要处理IOException异常

I/O

输入流/输出流

流动的是数据 二进制数据

流的分类:

        根据流动的方向不同:输入流、输出流

        根据流动的介质(单位)不同:字符流、字节流

                字符流只能读取文本 .txt .xml .properties .html

                字节流可以读取所有的文件类型

        根据功能不同或根据作用不同:节点流、工具流(打印流、数据流、对象流)

        

        D:\\easy.txt

        

        字节输出流

        

        

        字节输入缓冲流

        

        

        字节输入流

        

        

        将内存对象转换成序列(流)的过程叫作序列化

        这个对象必须是可序列化的

        该对象必须实现Serializable接口

        

        序列化

        

        

        将对象序列读入程序,转换成对象的方式叫反序列化

        反序列化会创建新的对象

        反序列化

        

        

总结创建对象的方式

        1.new

        2.克隆

        3.反序列化

        4.反射

  • 22
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值