第一章 异常与异常处理
1-1 Java异常简介
2、异常处理:将出现的异常提示给编程人员与用户,使原本将要中断的程序继续运行或者退出。并且能够保存数据和释放资源。
二、异常体系结构
1、所有异常都继承于Throwable类,其下有两大子类:
(1)Error类:错误,一般编程人员不太接触,如虚拟机错误、线程死锁。硬伤:使程序崩溃
(2)Exception类:异常,编码、环境、用户输入等问题,其子类主要有:
·非检查异常(运行时异常RuntimeException):【由java虚拟机自动捕获】如空指针NullPointer、越界ArrayIndexOutofBounds、错误类型转换ClassCast、算数异常Arithmetic等
·检查异常CheckException:【需要手动添加捕获和处理语句】文件异常IO等
1-2 Java中使用try...catch.finally实现异常处理
处理异常
try-catch以及try-catch-finally try {
System.out.print("请输入你的年龄:");
Scanner input =new Scanner(System.in);
int age =input.nextInt();
System.out.println("十年后你"+(age + 10)+"岁")
} catch (InputMismatchException e) {
System.out.println("你应该输入整数!!!");}
System.out.println("程序结束啦");
顺序问题:
1-3 Java中通过案例学习try...catch.finally
package com.imooc.test;
public class TryCatchTest{
**/
@param args
public static void main(String[] args) {
// TODO Auto-generated method stub
/**
*divider(除数):*result(结果):
*try-catch捕获while循环
*每次循环,divider减一,result=result+100/divider
*如果:捕获异常,打印输出”抛出异常了!!!“,返回-1
*/
TryCatchTest tct=new TryCatchTest();
int result=tct.test();
System.out.println("test()方法,执行完毕!返回值为:"+result);
}
public int test(){
int divider=10;
int result=100;
try{
while(divider>-1){
divider--;
result=result+100/divider;
}
}catch(Exception e){
e.printStackTrace();
System.out.println("循环抛出异常了!!!");
}
return -1;
}
}
public class TryCatchTest {
public static void main(String[] args) {
TryCatchTest tct=new TryCatchTest();
int result=tct.test();
System.out.println("test()方法,执行完毕!返回值为:"+result);
int result2=tct.test2();
System.out.println("我想大声告诉你!test2()执行完毕!!");
}
public int test(){
int divider=10;
int result=100;
try{
while(divider>-1){
divider--;
result=result+100/divider;
}
}catch(Exception e){
e.printStackTrace();
System.out.println("循环抛出异常了!!!");
}
return -1;
}
public int test2(){
int divider=10;
int result=100;
try{
while(divider>-1){
divider--;
result=result+100/divider;
}
}catch(Exception e){
e.printStackTrace();
System.out.println("循环抛出异常了!!!");
}finally{
System.out.println("这是finally!!哈哈!!");
System.out.println("我是Result!!我的值是:"+result);
}
return result=999;
}
}
public class TryCatchTest {
public static void main(String[] args) {
TryCatchTest tct=new TryCatchTest();
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()执行完毕!!");
}
public int test(){
int divider=10;
int result=100;
try{
while(divider>-1){
divider--;
result=result+100/divider;
}
}catch(Exception e){
e.printStackTrace();
System.out.println("循环抛出异常了!!!");
}
return -1;
}
public int test2(){
int divider=10;
int result=100;
try{
while(divider>-1){
divider--;
result=result+100/divider;
}
}catch(Exception e){
e.printStackTrace();
System.out.println("循环抛出异常了!!!");
}finally{
System.out.println("这是finally!!哈哈!!");
System.out.println("我是Result!!我的值是:"+result);
}
return result=999;
}public int test3(){
int divider=10;
int result=100;
try{
while(divider>-1){
divider--;
result=result+100/divider;
}
}catch(Exception e){
e.printStackTrace();
System.out.println("循环抛出异常了!!!");
}finally{
System.out.println("这是finally!!哈哈!!");
System.out.println("我是Result!!我的值是:"+result);
}
System.out.println("我是test3!我运行完了!表想我!!!~");
return result=999;
}
}
1-4 练习题
1-5 Java中的异常抛出以及自定义异常
package com.imooc.test;
public class DrunkException extends Exception{
public DrunkException(){
public DrunkException(String message){
super(message);
}
1-6 练习题
1-7 Java中的异常链
package com.imooc.test;
public class ChainTest{
/**
*test1():抛出“喝大了”异常
*test20):调用test1(,捕获“喝大了”异常,并且包装成运行时异常,继续抛出*main方法中,调用test20),尝试捕获test20)方法抛出的异常
*/
public static void main(String[]args){
ChainTest ct=new ChainTest();
try{
ct.test2();
}catch(Exception e){
e.printStackTrace();
}
}
public void test1() throws DrunkException{
throw new DrunkException("喝车别开酒!");
}
public void test2(){
try {
test1();
} catch (DrunkException e) {
// TODO Auto-generated catch block
RuntimeException newExc=new RuntimeException("司机一滴酒,亲人两行泪~~")
newExc.initCause(e);
throw newExc;
}