1.异常的细节理论知识
1.1编译时异常还有其他名字: 受检异常:CheckedException 受控异常 1.2运行时异常还有其它名字: 未受检异常:UnCheckedException 非受控异常 1.3再次强调:所有异常都是发生在运行阶段的。
1.4Java语言中对异常的处理包括两种方式:
第一种方式:在方法声明的位置上,使用throws关键字,抛给上一级。 谁调用我,我就抛给谁。抛给上一级。
第二种方式:使用try..catch语句进行异常的捕捉。 这件事发生了,谁也不知道,因为我给抓住了。
举个例子: 我是某集团的一个销售员,因为我的失误,导致公司损失了1000元, “损失1000元”这可以看做是一个异常发生了。我有两种处理方式, 第一种方式:我把这件事告诉我的领导【异常上抛】 第二种方式:我自己掏腰包把这个钱补上。【异常的捕捉】 张三 –> 李四 —> 王五 –> CEO 思考:异常发生之后,如果我选择了上抛,抛给了我的调用者,调用者需要 对这个异常继续处理,那么调用者处理这个异常同样有两种处理方式。
1.5注意:Java中异常发生之后如果一直上抛,最终抛给了main方法,main方法继续 向上抛,抛给了调用者JVM,JVM知道这个异常发生,只有一个结果。终止java程序的执行。
2.对之前异常知识的实践
2.1运行时异常
public class Test03 {
public static void main(String[] agrs){
/*
* 程序执行到此处发生了ArithmeticException异常。
* 底层new了一个ArithmeticException异常对象,
* 然后抛出了,由于是main方法调用的 100 / 0 所以
* 这个异常ArithmeticException抛给了main方法,
* main方法没有处理,把这个异常抛给了JVM。JVM直接
* 终止了程序的运行,并且把异常输出到了控制台上
* **(重点)Arithmetic(算数)Exception异常是
* 一个运行时异常,继承自父类RuntimeException
* */
//Exception in thread "main" java.lang.ArithmeticException: / by zero
//at ExceptionTest01.Test03.main(Test03.java:5)
System.out.println(100 / 0);
//在这里"Hello World!!!"程序并未执行
System.out.println("Hello World!!!");
}
}
2.2编译时异常
package ExceptionTest01;
public class Test04 {
public static void main(String[] args){
/*
* main方法中调用了doSome()方法
* 因为doSome()方法的声明位置上有throws ClassNotFoundException
* 在调用doSome()方法的时候,这个ClassNotFoundException会被抛给
* main()方法.我们得对这个doSome()方法进行预处理,如果不处理,编译器会报错
* java: 未报告的异常错误java.lang.ClassNotFoundException; 必须对其进行捕获或声明以便抛出
* */
doSome();
}
public static void doSome() throws ClassNotFoundException{
/*
*doSome()方法在声明位置上使用了:throws ClassNotFoundException
*这个代码表示了在doSome方法执行的过程中有可能会出现ClassNotFoundException
*异常。我们把这个异常叫做:类没找到异常。这个异常是一个编译时异常,需要我们
* 程序员对这个异常进行预处理。
* */
System.out.println("我是doSome()!!!!!");
}
}
3.对异常的处理(简单实践)
package ExceptionTest01;
public class Test05 {
public static void main(String[] args){
//第一种方式:在方法声明位置上继续使用throws,继续往上抛出,抛给调用者
//上抛throws类似于推卸责任(继续把异常传给调用者)
/*
* public static void main(String[] args) throws ClassNotFoundException
* {
doSome();
}
* */
//第二种处理方式:try.....catch....
//捕捉等于把异常拦下了,然后对异常进行处理.异常真正的解决了,调用者不知道
//我这么写尖括号因为看的清,我视力不好,大家敬请谅解
try
{
doSome();
}
catch (ClassNotFoundException e)
{
e.printStackTrace();
}
}
public static void doSome() throws ClassNotFoundException{
/*
*doSome()方法在声明位置上使用了:throws ClassNotFoundException
*这个代码表示了在doSome方法执行的过程中有可能会出现ClassNotFoundException
*异常。我们把这个异常叫做:类没找到异常。这个异常是一个编译时异常,需要我们
* 程序员对这个异常进行预处理。
* */
System.out.println("我是doSome()!!!!!");
}
}
本站声明:
1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/java/293859.html