/* 异常体系:java.lang.Throwable:异常体系的根父类,继承于Object
* 有两个子类1:java.lang.Error(错误JVM发生严重问题,不编写代码进行处理StackOverflowError,OutOfMemoryError)
* 2:java.lang.Exception(可以编写针对性代码处理)(含编译时异常和运行时异常)
* 数组角标越界,空指针异常
* 异常处理方式1:try-catch-finally
* 异常处理方式2:throws+异常类型
*
*
* */
public class throwableTest {
public static void main(String[] args) {
// try{
// //语句1
// //语句2//异常抛出异常对象
// //语句3
// //一旦进入异常语句,就不在执行try后面的代码,try中声明的对象在try之外不能使用
// }catch(NullPointerException e){//catch捕捉异常对象进行匹配
// e.getMessage();
// }catch(e){//如果声明了多个catch结构,不同异常类型之间不存在子父类下。谁声明
// //在上面和下面没有关系,如果同异常类型之间存在子父类关系,将父类类型写在第一个catch语句
// //若还存在异常,就不会执行除finally 以外的语句
// }catch(e){//1:可以写自己的处理方式
// //2:调用方法(推荐)
// e.printStackTrace();//打印异常详细信息
// //3
// e.getMessage(e);//获取异常发生的原因
// }finally {
// //即使上面try或者catch中是否还有return 语句
// //一定要被执行的代码
// //优先执行finally语句的内容
// //++sum;注意没return 此时sum是局部变量
// }
// }
//
//--------------处理方式2:
// public void methon() throws //异常处理1,异常处理2{
// //编译异常
// }//没解决,抛给他的调用者,一直抛,如果到main中就要被解决(try catch)
//-----------------------------------手动抛出异常-------------------
Student s1 = new Student();
s1.setId(10);
System.out.println(s1);
// s1.setId(-10);手动抛出异常
//异常语句下不执行
//-----------------手动抛出自定义异常
//throw + 自定义异常名(该异常类型应该继承于异常类)
//自定义异常类
//1:一般继承于RuntimeException / Exception
//2:通常提供几个重载的构造器
//3:提供一个全局常量,声明为static final long seriaVersionUID=
}
}
class Student {
private int id;
public void setId(int id){
if(id>0)
this.id=id;
// else
// System.out.println("");
//手动抛出异常
else{
throw new RuntimeException("输入非法");//异常后其下面语句不执行,无s
}
}
@Override
public String toString() {
return "Student{" +
"id=" + id +
'}';
}
}