序言:异常的处理——-(存在异常——>解决方案处理)
1.异常:程序中出现无法执行的代码段。
package com.Example.Charpter07;
/**
* @author Administrator
* @date : 2017年4月2日 上午11:47:01
* @function : 了解异常
*/
public class Introduction {
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
int c=1/0;
System.out.println(c);//可能出现异常的语句
} catch (Exception e) {
// TODO: handle exception
//异常匹配成功后的异常处理
e.printStackTrace();
}finally{
System.out.println("异常处理结束");
}
}
}
控制台消息:
因为在数学处理中,0作为被除数,结果为无穷大!在内存中怎么表示????当然就是内存被占满。后续程序当然无法继续执行;
总结:异常分为:(1)程序执行时出现的错误;(2)JVM出现的错误;
2.解决异常方案
一般情况下就是直接限定好初步条件,防止出现问题;
这样极大的占用了资源,使得程序运行效率变低;
Java提供了自己的异常处理机制,try——catch语句;
try {
int c=1/0;
System.out.println(c);//可能会出现异常的语句
} catch (Exception e) {
// TODO: handle exception
//异常匹配成功后的异常处理
e.printStackTrace();
}finally{
System.out.println("异常处理结束");//异常处理的统一出口;
}
具体的底层数据流动:
step1.
try的代码体中是可能出现异常的代码段;
step2.
出现异常java自己实例化异常类去和catch中异常类匹配,再进去具体代码段执行异常处理;
step3.
finally是异常处理的统一出口;
3.异常类
Error:是指JVM中的错误,程序所不能解决的;
Exception:程序中出现的错误;
4.catch语句体中需要注意的点
catch是相当于捕获异常;一般可以直接使用Exception捕获异常;
打印错误信息的时候就是
//第一种方法
System.out.println(e);
//第二种方法
e.printStackTrace();
5.throws和throw关键字
1.throws关键字
package com.Example.Charpter07;
public class ThrowsDemo {
public void errorDemo() throws Exception{
System.out.println("出现异常"+(1/0));
}
public static void main(String[] args) {
ThrowsDemo throwsdemo=new ThrowsDemo();
try{
throwsdemo.errorDemo();
}catch(Exception e){
e.printStackTrace();
}
}
}
个人理解:此处可能存在异常,在方法体中定义try—catch语句好像没有看见到吧,这块存有疑问!try—-catch语句在方法体中直接使用!(个人猜测,是异常类需要实例化),所以通过标识throws需要在主方法中添加Java的异常处理机制。
2.throw关键字
手动抛出异常但是有时候有些错误在jvm看来不是错误,比如说
很正常的整形变量赋值,但是在我们眼中看来就不正常,谁的年龄会是负的呢。所以我们需要自己手动引发异常,这就是throw的作用
int age = 0;
age = -100;
if(age<0)
{
Exception e = new Exception();//创建异常对象
throw e;//抛出异常
}
System.out.println(age);
6.自定义异常类