程序的异常:Throwable
error:这种问题是一个严重问题,一般出现这种问题,需要一起解决(程序员只能避免严重问题),比如:内存溢出(OutOfMemory);
Exception:异常:
编译时期异常:如果程序员不管这个,根本没有办法运行;需要去解决
运行时期异常(RuntimeException):只要不是编译时期异常,都属于异常异常;一般情况,是因为们的代码不够严谨.
1.
如果一个程序出现异常了,他会将异常的信息打印在控制台.
运行时期异常如何解决:
1) try...catch..finally :捕获异常
2) thorws:抛出异常
try{
可能出现问题的代码;
}catch(异常类名 变量名){
输出语句;
}fianll{
释放资源;
}
可能出现问题的代码如果和catch里面的异常类名能匹配,则打印输出语句
变形方式
try{
可能出现问题的代码;
}chatch(异常类名 变量名){
//提示
}
try...catch...
try..catch...catch
try...catch..catch..finally (开发中使用)
2.
处理异常:
1) try...catch....finally
2) throws:抛出异常
面试题:
throws和throw的区别?(100%会问到!)
throws:用法:一般在方法声明上抛出(多用)
抛出的是一个异常类名,可以抛出多个异常,中间用逗号隔开
throws表示抛出异常,这段代码可能会抛出异常( 指的是抛出异常的可能性)
一般情况:throws用的比较多
throw:一般在方法中进行抛出
抛出的是一个异常对象(匿名对象的方式)
throw:表示抛出:肯定的抛出异常(具体异常),走到这块代码,一定会执行throw中的异常
2.
try...catch....finally
执行的代码的顺序
try{
可能出现错误的代码
}catch(异常类名 变量名){
处理异常;
}finally{
释放资源;
}
final,finalize,finally三者之间的区别?(100%问到)
final:最终的,终态的
final修饰类:该类不能被继承
final修饰成员变量:该变量是自定义常量
final修饰成员方法:该方法不能被重写
finalize :和垃圾回收期有关系:运行垃圾回收器的方法:gc().调用gc(),实质是调用了通过重写了Object中的finalize方法
finally :出现在IO流中或者数据中,用来释放资源的!
注意:1)finally中的代码是一定会执行的,一般用在IO流中和数据库中;
2)如果在执行finally中的代码之前,JVMjava虚拟机退出了,那么finally中的释放资源是不会执行的
error:这种问题是一个严重问题,一般出现这种问题,需要一起解决(程序员只能避免严重问题),比如:内存溢出(OutOfMemory);
Exception:异常:
编译时期异常:如果程序员不管这个,根本没有办法运行;需要去解决
运行时期异常(RuntimeException):只要不是编译时期异常,都属于异常异常;一般情况,是因为们的代码不够严谨.
1.
如果一个程序出现异常了,他会将异常的信息打印在控制台.
运行时期异常如何解决:
1) try...catch..finally :捕获异常
2) thorws:抛出异常
try{
可能出现问题的代码;
}catch(异常类名 变量名){
输出语句;
}fianll{
释放资源;
}
可能出现问题的代码如果和catch里面的异常类名能匹配,则打印输出语句
变形方式
try{
可能出现问题的代码;
}chatch(异常类名 变量名){
//提示
}
try...catch...
try..catch...catch
try...catch..catch..finally (开发中使用)
public class ExceptionDemo {
public static void main(String[] args) {
//定义变量
int a = 10 ;
int b = 0 ;
try{
System.out.println(a/b);
}catch(ArithmeticException ae){//给具体的异常类 而不是Exception
System.out.println("除数不能为0");
}
}
}
2.
处理异常:
1) try...catch....finally
2) throws:抛出异常
面试题:
throws和throw的区别?(100%会问到!)
throws:用法:一般在方法声明上抛出(多用)
抛出的是一个异常类名,可以抛出多个异常,中间用逗号隔开
throws表示抛出异常,这段代码可能会抛出异常( 指的是抛出异常的可能性)
一般情况:throws用的比较多
throw:一般在方法中进行抛出
抛出的是一个异常对象(匿名对象的方式)
throw:表示抛出:肯定的抛出异常(具体异常),走到这块代码,一定会执行throw中的异常
public class ExceptionDemo {
public static void main(String[] args) throws Exception {
// method1();
method2();
}
public static void method1() throws Exception{//可能会抛出异常
//定义两个变量
int a = 10 ;
int b = 0 ;
if(b==0){
throw new ArithmeticException();//代码走到这块:表示一定会执行这个异常
}else{
System.out.println(a/b);
}
}
public static void method2() throws Exception{
int a = 10 ;
int b = 0 ;
if(b==0){
throw new Exception();//直接指定的异常:大方向的异常
}else{
System.out.println(a/b);
}
}
}
2.
try...catch....finally
执行的代码的顺序
try{
可能出现错误的代码
}catch(异常类名 变量名){
处理异常;
}finally{
释放资源;
}
final,finalize,finally三者之间的区别?(100%问到)
final:最终的,终态的
final修饰类:该类不能被继承
final修饰成员变量:该变量是自定义常量
final修饰成员方法:该方法不能被重写
finalize :和垃圾回收期有关系:运行垃圾回收器的方法:gc().调用gc(),实质是调用了通过重写了Object中的finalize方法
finally :出现在IO流中或者数据中,用来释放资源的!
注意:1)finally中的代码是一定会执行的,一般用在IO流中和数据库中;
2)如果在执行finally中的代码之前,JVMjava虚拟机退出了,那么finally中的释放资源是不会执行的
public class FinallyDemo {
public static void main(String[] args) {
//定义字符串类型
String s = "2018-6-20" ;
//创建对象
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss") ;
//定义了一个变量
Date d = null ;
try {
d = sdf.parse(s) ;
} catch (ParseException e) {
e.printStackTrace();
System.exit(0);//jvm退出!
}finally{
System.out.println("这里的代码是必须执行的,用来释放资源");
}
System.out.println("d:"+d);
}
}