异常
runtimeexception
JVM如何处理异常
main函数收到问题,自己处理,然后继续运行
自己没有处理方法,交给调用main的JVM来处理
JVM有默认的异常处理机制,将异常处理并将异常信息输出到控制台,停止程序
try :检测异常
catch:捕获异常
finally:释放资源
try catch
try catch finally
try finally
当通过try catch将问题处理了程序会继续执行
编译器异常:JAVA程序必须显示处理,否则程序会发生错误无法通过编译
运行时异常 :RuntimeException类及其子类的实例称为运行时异常,其他异常就是编译时异常
运行时异常可以不用再方法上抛出
编译时异常的抛出必须对其进行处理
throw : 在功能方法内部出现的某种情况,程序不能继续运行,需要进行跳转时,就用throw把异常抛出
throws 在方法声明后, 跟的是异常类名,可以跟多个异常类名,用逗号隔开,表示抛出异常,由该方法的调用者处理抛给虚拟机
throw:在方法体内, 跟的是异常对象名,表示抛出异常,由方法内部语句处理,只能跟一个异常对象.
finally:被finally控制的语句一定会执行
自定义异常取决于名字,方便查找错误
运行时异常可以不用抛出
子类抛出的异常只能是父类有的或者是父类异常的子类,不能抛出父类没有的异常,如果有可以try catch
File对应的是路径,
File dir = new File("C:\\Users\\Administrator.USER-20160117MQ\\Desktop");
String[] arr1 = dir.list(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
File file = new File(dir,name);
return file.isFile() && file.getName().endsWith(".png");
}
});
for (String string : arr1) {
System.out.println(string);
}
public String[] list(FilenameFilter filter) { //参数是接口类型,用匿名内部类.重写accept方法.
String names[] = list();
if ((names == null) || (filter == null)) {
return names;
}
List<String> v = new ArrayList<>();
for (int i = 0 ; i < names.length ; i++) {
if (filter.accept(this, names[i])) { //调用匿名内部类重写的accept方法,父类引用指向子类对象.this对应dir,name[i]对应文件名,返回true添加
v.add(names[i]);
}
}
return v.toArray(new String[v.size()]);
}