try cath finally 块
try{
System.out.println(divisor / dividend);//ArithmeticException 算数异常
}catch (Exception e){
e.printStackTrace();
System.out.println("捕获到一个异常");
}finally {
System.out.println("不管怎
样都会执行这个代码");
}
1:如果try块所有语言正常执行完毕,不会发生异常,南无catch所有语句将被忽略
2:如果try块执行中遇到异常且这个异常与catch异常类型匹配,那么try其余代码将被忽略catch块会被执行
3:如果try语句在执行中遇到异常,而抛出异常没有在catch中声明,程序会立刻退出
抛出异常throws和throw
package edu.xcdq;
/**
* @qvthor liuwenzheng
* @date 2021/4/27 15:31
*/
public class Demo03 {
public static void main(String[] args) throws Exception{ //继续向上声明,不处理
/*try {
steSex("双性人");
}catch (Exception e){
e.printStackTrace();
System.out.println("非男非女");
}*/
steSex("afwarf");
}
public static void steSex(String sex) throws Exception{ //声明异常
if (!(sex.equals("男")|| sex.equals("女"))){
throw new Exception("处理不了的异常,扔出去"); //抛出异常
}
}
}
throw和throws区别
1作用不同:throw用于在程序中抛出异常;throw用于声明在该方法内抛出异常
2使用位置不同:throw位于方法内部可以做反复语句使用;throws必须跟在方法参数后面,不能单独使用
3内容不同:throw抛出一个异常对象,而且只能是一个,throws后面跟异常类,而且可以跟多个异常类
自定义异常
package edu.xcdq;
/**
* @qvthor liuwenzheng
* @date 2021/4/27 15:46
*/
public class Demo04 {
public static void main(String[] args){
try {
steSex("双性人");
}catch (Exception e){
System.out.println("调用者说处理过了");
}
}
public static void steSex(String sex) throws SexException{ //声明异常
if (!(sex.equals("男")|| sex.equals("女"))){
throw new SexException("发现一个不对劲的"); //抛出异常
}
}
}
package edu.xcdq;
/**
* @qvthor liuwenzheng
* @date 2021/4/27 15:44
*/
public class SexException extends Exception {
public SexException(){
}
public SexException(String message){
System.out.println(message);
System.out.println("自定义的异常,知道非男飞女,但是没办法处理");
System.out.println("..........");
}
}
注意
1:自定义异常类一般是以Exception结尾
2:自定义异常类,必须继承Exception或RuntimeException
2.1:继承Exception,那么自定义的异常类就是一个编译期异常,如果方法内部抛出了编译期异常,就不许处理这个异常,要么throws,要么try···caych
2.2:继承RuntimeException,那么自定义的异常类就是一个运行期异常,无需处理,交给虚拟机处理