------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
今天学习异常.
一.异常
1.异常就是java程序在运行过程中出现的错误.
2.异常的分类
通过API查看Throwable.
a.Errow
b.Exception
--RuntimeException(运行时异常)
二.JVM默认如何处理异常
1.main函数有两种处理方式
a.自己将该问题处理,然后继续运行
b.自己没有针对的处理方式,就交给JVM
四.try,catch处理异常2
1.可以有多个catch.大异常必须放后面.
2.安卓,客户端开发,如何处理异常?try{}catch(Exception e){},全部抓进去
javaee,服务端开发,一般都是底层开发,从底层向上抛
六.Throwable的几个常见方法
1.getMessage()
获取异常信息
2.toString()
获取异常类名和异常信息
3.printStackTrace()
获取异常类名和信息以及出现位置
JVM默认就用这种方法处理异常
七.throws的方法处理异常
1.throws的方式处理异常
a.定义功能方法时,需要暴露问题
b.通过throws在方法上标识
2.案例演示
编译时异常必须对其进行处理,
运行时异常可以不处理.
十.finally关键字的面试题
1.final,finally,finalize的区别
a.final
final可以修饰类,不能被继承,修饰方法,不能被重写,修饰变量,只能赋值一次.
b.finally
finally是try语句中的一个语句体,不能单独使用,用来释放资源
c.finalize
finalize是当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法.
2.如果catch里面有return语句,请问finally的代码还会执行吗?如果会,是在return前还是return后.
会,执行return之后会创建一个返回路径,然后再执行finally,但是返回路径中的东西是不变的.不要在finally里面写返回语句.因为finally的作用是为了释放资源,是肯定会执行的.
十一.自定义异常
自定义一个异常,然后写一个参数构造函数就可以了.
class AbcException extends Exception{
public AbcException(String s){
super(s);
}
}
可以通过资源列表C快速创建.
十二.异常注意事项
1.注意事项
a:子类重写父类方法时,子类的方法必须抛出相同的异常或父类异常的子类。(父亲坏了,儿子不能比父亲更坏)
b:如果父类抛出了多个异常,子类重写父类时,只能抛出相同的异常或者是他的子集,子类不能抛出父类没有的异常
c:如果被重写的方法没有异常抛出,那么子类的方法绝对不可以抛出异常,如果子类方法内有异常发生,那么子类只能try,不能throws
2.如何使用异常处理
原则:如果该功能内部可以将问题处理,用try,如果处理不了,交由调用者处理,这是用throws
区别:
后续程序需要继续运行就try
后续程序不需要继续运行就throws
如果JDK没有提供对应的异常,需要自定义异常.
十三.练习
键盘录入一个int类型的整数,对其求二进制表现形式.
如果整数过大,给予提示,录入的整数过大
如果是小数,提示录入的是小数
如果是其他字符,提示是非法字符
分析:
1.创建键盘录入对象
2.将键盘录入的结果存储在String类型的字符串中,存储int类型中如果有不符合条件的直接报错,无法进行后续判断
3.键盘录入的结果转换成int类型的数据,是正确的还是错误的
4.正确的直接转换
5.错误的要进行对应判断
Scanner sc=new Scanner(System.in);
String line=sc.nextLine();
int num=Integer.parseInt(line);
sysout(Integer.toBinaryString(num));
思路就是:
先抓一个错误,不管是什么,我就new一个BigInteger,把这个line放进去,如果这个line不是大的整数的话,那么肯定还会出错,那么我就再new一个BigDecimal,把line放进去,如果这个line不是小数的话,依然会出现其他异常,现在就不管是什么异常了,直接说他是非法字符.
十四.File类
1.File更应该叫做一个路径,而不是文件.
a.绝对路径和相对路径
从盘符开始是绝对路径.
相对路径是相对于某个位置.
2.查看API
是java.io包下的
3.构造
因为\是转译,所以要2个.
File f=new File("F:\\a\\b\\001.avi");
sysout(f.exists());
返回boolean.
String parent="F:\\a\\b";
String child="001.avi";
File f=new File(parent,child);
十五.File类的创建功能
1.boolean createNewFile()创建文件
2.boolean mkdir()创建文件夹
3.boolean mkdirs()创建文件夹,包括父文件夹
十六.File类重命名和删除功能
1.重命名和删除
boolean renameTo()重命名为指定的文件路径
boolean delete()删除文件或文件夹
2.注意
如果路径名相同,就是改名
如果路径名不同,就是改名并剪切
java中的删除不走回收站
要删除文件夹里面不能有文件
十七.File类的判断功能
?public boolean isDirectory():判断是否是目录
?public boolean isFile():判断是否是文件
?public boolean exists():判断是否存在
?public boolean canRead():判断是否可读
?public boolean canWrite():判断是否可写
?public boolean isHidden():判断是否隐藏
十八.File类的获取功能
?public String getAbsolutePath():获取绝对路径
?public String getPath():获取路径
?public String getName():获取名称
?public long length():获取长度。字节数
?public long lastModified():获取最后一次的修改时间,毫秒值
?public String[] list():获取指定目录下的所有文件或者文件夹的名称数组
?public File[] listFiles():获取指定目录下的所有文件或者文件夹的File数组
十九.输出指定目录下指定后缀的文件名
二十.文件名称过滤器
1.FilenameFilter
里面只有一个方法boolean accept(File dir,String name),测试指定文件是否应该包含在某一文件列表中.
String[] arr=dir.list(
new FilenameFilter(){
public boolean accept(File dir,String name){ return true;}
}
);
用匿名内部类
for(String s:arr){
sysout(s);
}