异常:程序在运行的过程中出现了不正常的情况。
Throwable:
Error:严重的问题,比如内存异常。一般不需要处理。
Exception:
RuntimeException:运行时期异常,一定是我们的代码出问题了。
非RuntimeException:编译时期异常,必须要处理的,否则编译不能通过,报错。
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:运行时期异常可以处理,也可以不处理。
如果不处理,那么,程序还是不能继续执行。
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);
}
}
因为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(); // [],null
if (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());
}
}
}