您的位置:首页 > 编程语言 > Java开发

JAVA学习代码——异常

2016-08-12 21:45 190 查看
1.异常处理:try-catch-final

2.异常链

3.自定义异常

异常处理:try-catch-finalpackage 异常及处理;

/**----http://blog.csdn.net/junlixxu/article/details/6096266
* 1.java.lang.Throwable作为所有异常的超类。异常类分为两大类,错误Error和异常Exception。
* #Exception又分为运行时异常(RuntimeException)和非运行时异常. 这两种异常有很大的区别,也称之为不检查异常(Unchecked Exception) 和检查异常(Checked Exception)
* # Error是程序无法处理的错误,比如OutOfMemoryError、ThreadDeath等。这些异常发生时, Java虚拟机(JVM)一般会选择线程终止
* 2..java.lang.Exception类是Java中所有异常的直接或间接父类。即Exception类是所有异常的根类
* 3. Java异常处理涉及到五个关键字,分别是:try、catch、finally、throw、throws
* 4..什么是异常?异常是在程序运行过程中所发生的破坏了正常的指令流程的事件。软件和硬件错误都可能导致异常的产生。
* 5. Exception类异常 http://www.cnblogs.com/mengdd/archive/2013/02/03/2890923.html *
* 6.先子类后父类先小后大(顺序写错会报错),有try时,需要添加try-catch可只添加catch,finally:善后工作
*
* 7.异常打印打控制台的位置会稍微不同,看谁抢先线程
*
* 8..空指针异常:java.lang.NullPointerException是空指针异常,出现该异常的原因在于某个引用为null,但却调用了它的某个方法,这时就会出现该异常。
*
* 9.try不能独立存在,只能与catch或finally共同存在
* 10.throws异常抛出 ,在方法名后抛出给上级:public void A throws Exception
* 11.自定义异常 格式: class 自定义异常类 extends 异常类型{} 如:public class DrunkException extends Exception{}
*
* 12.异常链:把捕获的异常包装成一个新的异常,然后在新的异常里面添加对原始异常的引用,再把新异常抛出,就像链式反应一样一个导致另一个(见ChainTest类)
*/
public class TryCatchTest {
public static void main(String[] args) {
TryCatchTest tct = new TryCatchTest();//new对象,创建实例对象
int result = tct.test();//调方法
System.out.println("test()方法执行完了,返回值为:"+result);
int result2=tct.test2();
System.out.println("test2执行完毕");
int result3=tct.test3();
System.out.println("我想大声告诉你,test3执行完毕,返回值--:"+result3);
}

/**test1():try-catch
* divider:除数 result:结果 try-catch捕获while循环
* 每次循环。divider减一,result=result+100/divider 如果捕获异常,打印输出“抛出异常了!!!!”,返回-1
* 否则返回result
*/
public int test() {
int divider = 10;
int result =100;
try {
while(divider>-1){
divider--;//divider为0,异常
result =result+100/divider;
}
return result;//没有抛出异常,返回result作为结果
} catch (Exception e) {
System.out.println("循环出现异常了!!!");
e.printStackTrace();//打印输出异常具体信息
return -1;
}
}

/**test2():try-catch-finally
* divider:除数 result:结果 try-catch捕获while循环
* 每次循环。divider减一,result=result+100/divider
* 如果捕获异常,打印输出“抛出异常了!!!!”,返回result =999
* 否则返回result
* finally:打印输出 这是finally!哈哈 同时打印输出result的值
*/
public int test2() {
int divider = 10;
int result =100;
try {
while(divider>-1){
divider--;//divider为0,异常
result =result+100/divider;
}
return result;//没有抛出异常,返回result作为结果
} catch (Exception e) {
System.out.println("循环出现异常了!!!");
e.printStackTrace();//打印输出异常具体信息
return result=999;
}finally{
System.out.println("这是finally!哈哈");
//result为最后运行结果
System.out.println("我是result,我的值为:"+result);
}
}
/**test3():try-catch-finally
* divider:除数 result:结果 try-catch捕获while循环
* 每次循环。divider减一,result=result+100/divider
* 如果捕获异常,打印输出“抛出异常了!!!!”
* 否则返回result
* finally:打印输出 这是finally!哈哈 同时打印输出result的值
* 最后返回result为1111作为结果
*
* 如果try-catch语句内没有任何return语句,就会调用这三个语句块之外的return语句
*/
public int test3() {
int divider = 10;
int result =100;
try {
while(divider>-1){
divider--;//divider为0,异常
result =result+100/divider;
}
} catch (Exception e) {
System.out.println("循环出现异常了!!!");
e.printStackTrace();//打印输出异常具体信息
}finally{
System.out.println("这是finally!哈哈");
System.out.println("我是result,我的值为:"+result);
}
//在方法结尾添加输出语句
System.out.println("我是test3,我执行完毕");
return 1111;
}
}


异常链
package 异常及处理;

//异常链
public class ChainTest {
/**
* -----异常链----- test1():抛出“喝大了"异常
* test2():调用test(),捕获”喝大了“异常,并且包装为运行时异常,继续抛出
* main方法中,调用test2(),尝试捕获test2()方法抛出的异常
*/
public static void main(String[]args) {
ChainTest ct=new ChainTest();//创建ChainTest实例
try {
ct.test2();
} catch (Exception e) {
e.printStackTrace();
}
}

/*
* public void test1(){ throw new DrunkException("喝车别开酒");
* 抛出了一个新的“喝大了”异常,必须在test1()后面声明将要抛出这种异常
*/
public void test1() throws DrunkException {
throw new DrunkException("喝车别开酒");
}

public void test2(){
//调用test1
// test();//报错:因为test1抛出了一个DrunkException,而这里没有做任何处理,用try-catch包围
try {
test1();

} catch (Exception e) {
// RuntimeException newExc = new RuntimeException("司机一滴酒,情人两行泪");//@方法一
RuntimeException newExc = new RuntimeException(e);
// newExc.initCause(e);//调用newExc的initCause()方法,并将捕获的DrunkException传递进去//@方法一
throw newExc;//抛出这个新异常
}
}
}


自定义异常
package 异常及处理;
//自定义异常
public class DrunkException extends Exception{
public DrunkException(){

}
//添加一个构造方法,和无参的构造方法
public DrunkException(String message){
super(message);//调用父类Exception的构造方法
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: