一、笔记
1.异常
1.在程序运行时发生的错误
2.异常是一个对象throwable
异常的体系结构:
Throwable类:Java 语言中所有错误或异常的超类
Error :严重的错误,一般是jvm报的错, 需要修改源代码
Exception:这个不是很严重的异常,这种异常必须解决
RuntimeException:运行是异常,开发人员不需要去处理,是由jvm来给其处理
jvm 自带处理异常:
1.第一种(位置,时间,异常的信息)打印出来
2.程序进行终止
jvm 处理异常:
如果程序发生了异常,,没有任何方法或者是类来处理这个异常,最后就有jvm来处理
手动处理异常:
1.抛出异常,让调用值去处理 (捕获异常)
2.自己来处理
处理异常的五个关键字: try catch finally throw throws
自己处理异常的第一种方法 语法格式:
try {
有可能发生异常代码
}catch (异常的类型 的申明,比如控制针异常,算术异常等等){
发生异常之后执行 这里面的代码
}
常见的异常:
ArithmeticException 算术异常:
ParseException 格式转化异常错误
java.lang.NullPointerException 空指针异常
执行的流程:
没有发生异常的流程==>执行try里的代码==>执行完毕(不执行catch)
发生异常存在两种情况:
第一种也就是 catch 申明的异常,满足发生的异常 ==>就会正常执行catch {} 里的代码,如果不满足就不执行
第一种方式处理多个异常:
try {
有可能发生异常代码
}catch (异常的类型1的申明){
发生异常类型1之后执行 这里面的代码
}catch (异常的类型1的申明){
发生异常类型2之后执行 这里面的代码
}
注意点:
1. catch 里的代码必须与进行匹配,才能满足条件,走 catch 代码块
2. 多个 catch 异常的时候,必须先写小的异常,再写大异常
处理异常的第二种方式: 最常用
try {
有可能发生异常代码
}catch (异常的类型1的申明){
发生异常类型1之后执行 这里面的代码
}catch (异常的类型1的申明){
发生异常类型2之后执行 这里面的代码
}finally {
不管发生不发生异常都会执行这里面代码
}
注意点:
1.如果遇到return 关键字,先执行完finally里的代码,然后再return ,只有这种方式杀死jvm(System.exit(0))
2作用: 关闭与释放资源(一般是对流资源)
3.在jdk1.7 之后是catch 申明是可以存在多个异常 用|连接
4. 在开发中,如果有多个异常:最后都会捕获一个最大是异常也是Exception
5.捕获异常,如果具体到某一种类型的异常,尽量具体一点:方便解决问题
第三种方式:
(不常用) try {
可能发生异常的代码, 并没有具体去捕获
}finally {
不管发生不发生异常都会执行这里面代码
}
好处: 让代码进行分离,结构更加清晰
异常的分类 :
编译时异常: 也就是在运行之前就报错(编译时异常 的父类是Exception
运行时异常 :RuntimeException 或者是它的子类
编译异常必须进行处理, 运行时异常 可以暂时不处理 (jvm)
异常对象一些方法 :
Throwable子类没有什么特别的方法
public StackTraceElement[] getStackTrace() 打印其堆栈信息,(也就异常信息)
public String getMessage() 返回此 throwable 的详细消息字符串。
public String toString() 返回此 throwable 的简短描述
在继承中的异常:
父类是什么异常,子类跟着写什么异常(不会产生一些不必要的错误)
throw:异常的声明或者是定义(声明)
声明异常的格式: throw new NullPointerException(); throw(关键字)+ 具体的异常
好处:可以在方法里声明自己想声明的异常
注意点:
1. 声明的异常必须写在方法里
2. 声明的异常必须是Exception 是子类或者是自己
3. 声明的异常如果是运行时异常可以不做处理,其它的都要做处理
throws: 抛出异常
好处: 自己不处理,让调用这去处理
语法: throws Exception 也就是 throws 加上具体的异常
注意点:
1.必须写在方法的小括号后面
2.声明的异常必须是Exception 是子类或者是自己
在异常的处理方式,1.抛出异常 2.捕获
throw 与 throws的区别:
1 throw 是异常的申明 2.throws 用于异常抛出
2. throw 确实会发生异常 throws 异常不一定会出现
3.throw 后面只能够跟 一个 throws 可以跟多个
4.throw 与 throws 搭配使用
自定义异常:
继承父类一般分为两种情况
第一个是继承 RuntimeException
第二种是 Exception(常用)
一般自定义异常的名字是:xxxException 以Exception 进行结尾
一般也就是重写其构造:
2.File类
一个文件对象 文件和目录路径名的抽象表示形式 导包是java.io.File;
路径:
-
绝对路径 也就是根路劲(也就是到具体的盘符)
-
相对路径 (也就是有参照物)
Windows: 根路径也就是其盘符 UNIX: 表示一个斜杠
注意点:File 类的实例是不可变的;也就是说,一旦创建,File 对象表示的抽象路径名将永不改变
File 对象的构造方法:
public File(String pathname) 通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例
public File(String parent,String child) parent 表示父级目录路径(字符串), child 表示子目录(字符串)
public File(File parent,String child) 表示父级目录路径(文件对象),child 表示子目录(字符串)
注意点: 只要有父子关系,必须父目录存在
创建 :
创建文件的方法:createNewFile()
创建一个文件夹 public boolean mkdir() 创建一个文件夹
public boolean mkdirs() 如果父目录不存在,一同创建父目录
删除:
public boolean delete() 删除一个文件 包括空的文件夹
注意点: 不会进电脑垃圾回收站
重命名文件: public boolean renameTo(File dest)
注意点:如果在同一个目录下,是修改其名字,如果不在同一个的目录下是剪切+修改名字
判断类型:
public boolean exists() 判断这个文件是否存在
public boolean isDirectory() 判断是否是文件夹
public boolean isFile() 是否是一个文件
获取:获取路径
public String getAbsolutePath() 获取文件的其绝对路径
public String getPath() 获取构造方法传递的那个参数的路径 new File("d:\\1.txt")
public String getName() 获取文件的名称
public String getParent() 返回上一级目录
public long length() 文件内容的的长度(字节数)
public String[] list() 返回的是改目录下的第一级的所有文件包括文件夹
3.递归
所谓递归就是方法自己调用自己。
二、总结
第十七天的学习,今天学习了异常、file类以及递归,递归主要掌握他的思想。