黑马程序员——基础学习(十二)异常(Throwable)类、文件(File)类及递归
来源:互联网 发布:淘宝分销受骗例子 编辑:程序博客网 时间:2024/04/30 05:14
异常类(Throwable)
异常:程序在运行的过程中出现了不正常的情况。
异常的分类:
Throwable:
Error:严重的问题,比如内存异常。一般不需要处理。
Exception:
RuntimeException:运行时期异常,一定是我们的代码出问题了。
非RuntimeException:编译时期异常,必须要处理的,否则编译不能通过,报错。
JVM对于异常的默认处理方案
A:把异常的名称,原因以及错误的位置信息等输出在控制台
B:程序从这里停止。
编写处理方案:
try...catch...finally
try...catch...
try...catch...catch...
try...catch...finally...
try...catch...catch...finally...
try...finally...
a:如果是一个异常,可以try...catch.../try...catch...finally...
b:如果是多个异常,可以try...catch...catch.../try...catch...catch...finally...
c:JDk7的新特性:多个异常必须是平级关系
try...catch(Exception1 | Exception2 | Exception3 ... e) {...}
编译时期异常和运行时期异常的区别
A:编译时期异常是必须要进行处理的,否则编译不能通过。
B:运行时期异常可以处理,也可以不处理。
如果不处理,那么,程序还是不能继续执行。
throw和throws的区别
A:throw 用在方法体中,后面跟的是异常对象
如何后面跟的对象属于RuntimeException,那么,在方法上,可以没有throws
如果后面跟的对象属于非RuntimeException,那么,在方法上,必须有throws
B:throws 用在方法声明上,后面跟的是异常类名
我们是如何选择异常处理的呢?
一般来说,异常处理,都是针对编译时期异常做的。
建议:能自己处理的,就自己处理,如果实在处理不了的就抛出。
自定义异常:
A:如果我们出现的问题,是API没有提供对应的异常,那么我们需要自定义异常。
B:怎么着让类才算是一个异常类呢?
a:继承自Exception
b:继承自RuntimeException
C:如何实现异常类的代码呢?
a:如果不想给出任何信息,什么都不用写。
b:如果要给出信息,那么,建议写一个无参构造和一个带参数构造
super(message);
异常细节
A:父类的方法有异常,子类重写父类的方法的异常不能比父类异常更大。
B:父类的方法有多个异常,子类重写父类的方法异常也不能比父类的多或者大。
C:父类的方法如果没有异常,子类重写父类的方法是不能抛出异常的,有异常,也只能try进行处理。
自我体会:
以后看到调用方法的时候,有问题出现,点击鼠标,看到throws或者try...catch任选一种即可。
我的代码
public class Test {public static void main(String[] args) {Teacher t = new Teacher();try {t.checkScore(-20);} catch (MyException e) {e.printStackTrace();}}}public class Teacher {public void checkScore(int score) throws MyException {if (score < 0 || score > 100) {throw new MyException("分数越界");} else {System.out.println("分数正常");}}}public class MyException extends Exception {public MyException() {}public MyException(String message) {super(message);}}
文件类(File)
因为IO流操作大部分都是针对文件或者目录的操作,所以,为了方便表示文件或者目录,java就提供了File类供我们使用。
构造方法:
A:File file = new File("D:\\a.txt");
B:File file = new File("D:\\","a.txt");
C:File file = new File("D:\\");
File file2 = new File(file,"a.txt");
成员方法
A:创建功能
public boolean creatNewFile() throws IOException
B:删除功能
public boolean delete()
C:重命名功能
public boolean renameTo(File dest)需要传递的是一个重命名后的路径名称
D:判断功能
public boolean isDirectory():判断该File对象是否是目录
public boolean isFile():判断该File对象是否是文件
public boolean exists():判断该File对象是否存在
public boolean canRead():判断该File对象是否可读
public boolean canWrite():判断该File对象是否可写
public boolean isHidden():判断该File对象是否隐藏
E:基本获取功能
public String getAbsolutePath():获取绝对路径
public String getPath():获取相对路径
public String getName():获取名称
public long length():获取大小,以字节为单位
public long lastModified():获取最后一次修改时间的毫秒值
F:高级获取功能
public String[] list():返回指定目录下的所有文件或者目录的名称(String)数组。
public File[] listFiles():返回指定目录下的所有文件或者目录的File对象数组。
G:带过滤器的获取功能
public String[] list(FilenameFilter filter)
public File[] listFiles(FilenameFilter filter)
案例:
获取指定目录下的指定后缀名的文件名称。
以d盘目录下的jpg文件为例
我的代码:
import java.io.File;import java.io.FilenameFilter;public class FilenameFilterDemo {public static void main(String[] args) {// 封装目录。File srcFolder = new File("D:");// 获取该目录下所有文件和目录的File数组。String[] strArray = srcFolder.list(new FilenameFilter() {public boolean accept(File dir, String name) {return new File(dir, name).isFile() && name.endsWith("jpg");}}// 遍历for (String str : strArray) {System.out.println(str);}}}
递归
方法定义中调用方法本身的现象
注意事项:
A:递归一定要有出口,否则就是死递归
B:递归次数不能过多,否则内存溢出
C:构造方法不能递归调用
我的代码:
public static void main(String[] args) {// show();show();}public static void show() {show();}}
案例:
A:递归求阶乘
public class DiGuiDemo {public static void main(String[] args) {System.out.println(jc(5));}public static int jc(int n) {if (n == 1) {return 1;} else {return n * jc(n - 1);}}}
B:递归删除带内容的目录
import java.io.File;public class DeleteFolderDemo {public static void main(String[] args) {// 封装目录File srcFolder = new File("test");deleteFolder(srcFolder);}private static void deleteFolder(File srcFolder) {// 获取该目录下所有文件或者目录的File数组File[] fileArray = srcFolder.listFiles(); // [],nullif (fileArray != null) {// 遍历该File数组,得到每一个File对象for (File file : fileArray) {// 判断该File是文件还是目录if (file.isDirectory()) {deleteFolder(file);} else {// 就直接删除。System.out.println(file.getName() + "---" + file.delete());}}System.out.println(srcFolder.getName() + "---" + srcFolder.delete());}}}
我的感悟
- 黑马程序员——基础学习(十二)异常(Throwable)类、文件(File)类及递归
- 黑马程序员-基础-IO流(概念,File类,递归)
- 黑马程序员————java基础--------IO输入输出之异常、File类和递归
- 黑马程序员---Java基础---异常、File类和递归
- 黑马程序员《java基础总结(十二)》(IO流<File类、打印流>)
- Java异常类(Throwable)
- 黑马程序员_java基础——异常及递归
- 黑马程序员----java基础之异常和File文件类
- 黑马程序员------Throwable及常见异常
- 黑马程序员——java基础学习(异常)
- 黑马程序员: File类、递归的学习
- 黑马程序员——异常,File类
- 黑马程序员——异常、File类
- 黑马程序员---IO3(File类、递归、IO其他类)
- 黑马程序员——Java基础(八)之异常处理、递归、IO流
- JavaSE---IO流基础(异常、File类、递归)
- 黑马程序员_Java(异常类,file类,递归,字节流)
- 黑马程序员_JAVA之异常、File类、递归
- 例题3-4 猜数字游戏的提示(Master-Mind Hints)
- 1576 最长严格上升子序列
- UNIX环境高级编程学习笔记(十)为何 fork 函数会有两个不同的返回值
- C++宏中的“#”与“##”用法
- Area - POJ 1265 Pick定理
- 黑马程序员——基础学习(十二)异常(Throwable)类、文件(File)类及递归
- IOS模拟器点击fieldText 不弹出软键盘
- C语言学习(第一天)
- Gifview的使用
- 如何在struts2的action返回结果之后再来进行费时的数据库操作呢?
- Android初学习 - 明暗度,窗体透明等的设置技巧
- poj 3414 Pots(BFS)(简单题)
- Monkey log异常分析说明
- CodeForces 546A Soldier and Bananas