JVM默认是如何处理异常的
main函数有两种处理方式:
1、自己处理该异常然后继续运行
2、自己没有针对的处理方式,只有交给main的jvm进行处理
jvm默认的异常处理机制,就将异常进行处理
并将该异常的名称,异常的信息,异常的出现位置打印只控制台,并将程序停止运行
常见异常 ArithmeticException算数异常
------------------------------------------------------
try检测异常 catch捕获异常 finally释放资源:
try catch 处理问题后,后续代码可以继续执行(try catch可以跟多个)如果第一个catch处理完,后面的catch不再检测了
try catch finally
try finally
注意 如果第一个写了Exception后,后面的不能在写ArithmeticException,没有意义
JDK1.7如何处理多个异常
catch(ArithmeticException|ArrayIndexOutOfBoundsException e)
-------------------------------------------------------
编译期异常和运行期异常
运行时异常,所有RuntimeException都属于运行时异常,
编译时异常,必须显示处理,否则无法通过编译
--------------------------------------------------------
Throwable常见方法
getMessage()获取错误信息
toString() 返回异常类型和异常信息
printStackTrace()获取异常类名和异常信息,以及异常出现在程序中的位置,返回值void
-------------------------------------------------------
throw方式处理异常
如果某一个属性满足条件,则使用语句终止
public void xx() throws Exception{
throw new Exception("xxx");
}
方法中如果抛出RuntimeException 则无需再处理该异常,在方法上无需声明
编译时异常的抛出,必须对其进行处理
运行时异常的抛出,可以处理,也可以不处理
throw在功能方法内部,程序不能运行就进行跳转,后面紧跟随异常对象
throws 用在方法声明后面,跟异常类名,可以用多个异常类名,表示抛出异常,用该放着调用者处理
-----------------------------------------------------------
finally
被finally控制的语句体一定会执行,特殊情况,System.exit(0);直接退出java虚拟机
用于释放资源,常见于数据库和IO流
方法结束前要检查是否要执行finally方法
final finally finalize的区别
final 可以修饰类 不能被继承,修饰方法 不能被重写,修饰变量 只能赋值一次,
finally是 try catch中的语句体,不能单独使用,用来释放资源
finalize 是一个方法,当垃圾回收器确定不会有该对象更多的引用,用对象垃圾回收器将其释放掉
finally return是建立了一个返回路径,然后再检测finally语句,虽然finally中执行了操作,但是打包好的值不能再改变
千万不要再finally中写返回语句,因为finally作用是为了释放资源,是肯定会执行的,如果在这里存放返回语句,那么try和catch结果都会被改变。
--------------------------------------------------------------
子类重写父类方法,子类方法必须抛出相同的异常和父类异常的子类
如果父类抛出多个异常,子类重写父类是,必须抛出相同异常和它的子集
如果重写的方法没有抛出异常,那么子类方法只能try,不能抛throw
异常处理:
如果该功能内部可以将问题处理,用try,如果处理不了,交由调用者处理,这里用throw
后续程序需要继续运行就用try:有异常并不会停止程序
后续程序不需要继续运行就用throws
alt+shift+z try catch快捷键
--------------------------------------------------------------
File类 (路径:文件路径或者文件夹路径)
路径分为绝对路径和相对路径
绝对路径是固定路径,从盘符开始
相对路径是相对于某个位置 Eclipse中指当前项目,而dos下指当前路径
FileInputStream fis = new FileInputStream("xxx.txt");
dos下指代当前路径
File file = new File("F://xxx.txt");//注意考虑转义字符
bool flg = file.exists();文件是否存在
File file2 = new File("xxx.txt");
File parent =new File("F://父类路径");
String child = "子类路径格式";
File file = new File(parent,child);
----------------------------------------------------------------
File类的创建过程
File file = new File("");
bool flg = file.createNewFile();//如果存在该文件,就不创建
没有后缀也能创建文件
file.mkdir();创建文件夹
File file2 = new File("bb.txt");
file2.mkdir();创建了一个带后缀的文件名称
File file3 = new File("bbb//ccc");
file2.mkdirs();创建多级文件
file.mkdirs();
----------------------------------------------------------------
File类重命名和删除功能
File file1 = new File("xxx.txt");
如果路径相同,就是改名,不相同就是改名+剪切
File file2 = new File("ooo.txt");
file1.renameTo(file2);
File file = new File("xxx.txt");
file.delete();
如果要删除文件夹,如果有嵌套文件夹,则不能删除父类文件夹
File file2 = new File("aaa");
注意:Java删除不走回收站
---------------------------------------------------------------------
Filel类的判断方法
File file = new File("");
file.isDirectory()判断是否是目录,文件夹
file.isFile()判断是否是文件
file.exists()判断是否存在
file.canRead()判断是否可读
file.setReadable(false)设置是否可读 windows认为所有文件都是刻度的
file.canWrite()判断是否可写
file.setWritable(false)可以设置不可写
file.isHidden()判断是否可以隐藏
--------------------------------------------------------------
File的获取功能
file.getAbsoulutePath()和获取绝对路径
file.getPath()获取路径//传相对路径获取相对路径,传绝对获取绝对路径
file.getName()获取名称
file.length()获取文件字节数
file.lastmodified()获取最后一次修改时间
String[] strs = file.list();获取指定目录下所有文件和文件夹的名称
File[] files = file.listFiles();获取指定目录下的所有文件或者文件夹
-----------------------------------------------------------------
输出指定目录下的指定后缀名
File dir = new File("E:\\");
String[] arr = dir.list();
for(String string :arr){
if(String string :arr){
if(string.endsWith(".jpg"));}
}
File[] fileList = dir.listFiles();
for(File subFile : subFiles){
if(subFile.isFile()&&subFile.getName().endsWith(".jpg"))
}
-----------------------------------------------------------------------
File文件名称过滤器啊
String[] arr = dir.list(new FilenameFilter{
public boolean accept(File dir,String name){
dir 是封装路径 name是文件名称
File file = new File(dir,name);
return file.isFile()&&file.getName().endsWith("opg");
}
});