Exception 异常

/*异常
              Throwable
         ---------+--------
         |                |
       Error           Exception
         |                 |
       ......           ...  RuntimeException
    1.Error是系统错误,程序员无法处理这些异常
    2.Exception是程序员可以捕获并处理的异常
    3.RuntimeException的子类异常是你可以处理也可以不处理的异常
    4.凡是继承自Exception但又不是RuntimeException子类的异常我们都必须的捕捉并进行处理
*/
class A
{
int divide(int a, int b)
{
int m;
m = a/b;
System.out.printf("1111\n");
return m;
}
}
public class TestExcep
{
public static void main(String[] args)
{
A aa = new A();
try
{
aa.divide(6,0);//写可能异常的语句
}
catch(ArithmeticException e)//e用来接收18行抛出的异常
{
e.printStackTrace();//可以简单理解为输出该异常的具体信息
System.out.printf("除零错误,你的程序出错了,除数不能为零\n");
}


        //aa.divide(6,0); //error
        System.out.printf("世界和平\n");
}

}

------------------------------------------------------------------------------------------------

import java.util.Scanner;
import java.util.InputMismatchException;
public class TestExcep2
{
public static void main(String[] args)
{
int i;
Scanner sc = new Scanner(System.in);//System.in表示键盘

try
{
i = sc.nextInt();
System.out.printf("i = %d",i);

}
catch (InputMismatchException e)
{
System.out.printf("输入数据不合法,程序被终止\n");
}

}
}

-------------------------------------------------------------------------------------------

class A
{
int divide(int a, int b)
{
return a/b;
}
public void f()
{
g();
}
public void g()
{
divide(6,0);
}
}
public class TestExcep3
{
public static void main(String[] args)
    {
    try
    {
    new A().f();
    }
    catch(Exception e)
    {
    e.printStackTrace();//打印堆栈路径,也就是把出错信息的详细路径显示出来,调示错误用
    }
   
   
    }
}

------------------------------------------------------------------------------------------

import java.io.*;
class A
{
public void f() throws IOException//表示本方法不处理,让这被调用者来处理,因为不处理,在main中如果用aa.f()就会报错误
{
throw new IOException();//该异常是Exception的子类,必须进行处理,否则会报错
//throw 抛出异常
}
public void g()
{
throw new ArithmeticException();//该异常是runtimeException的子类,可处理也可不处理
}
}
public class TestExcep4
{
public static void main(String[] args)
{
A aa = new A();
}
}

------------------------------------------------------------------------------------

/*Finally的作用
1.无论try所指向的程序块中是否抛出异常,也无论catch语句的异常类型是否与所抛弃的类型一致,finally中所代表的代码一定会得到执行
2.finally语句为异常处理提供一个统一的出口,使得在控制流程转到程序的其它部分以前,能够对程序的状态作统一的管理
3.通常在finally语句中可以进行资源的清除工作,如关闭打开的文件,删除临时文件等
*/


class A
{
int divide(int a, int b)
{
int m = 0;
m = a/b;
return m;
}
}
public class TestExcep5
{
public static void main(String[] args)
{
try
{
new A().divide(6,0);
}
catch(ArrayIndexOutOfBoundsException e)
{
System.out.printf("6666\n");
e.printStackTrace();
}
finally
{
System.out.printf("哈哈\n");
}
}
}

-------------------------------------------------------------------------------------

/*  throw
 void f() throws A
 {
   .....
   .....
 }
 1.throw A表示调用f方法时f方法可能会抛出A类异常,建议你调用f方法时最好对f方法可能抛出的A类异常进行捕捉
 2.throws A 不表示f方法一定会抛出A类异常
   throws A,f方法也可以不抛出A类异常
 3 3.throws A 不表示调用f方法时,必须的对A异常进行捕捉
   
 --1.假设A是RuntimeException子类异常
 --2.由于RuntimeException的子类异常可以处理也可以不处理,所以编译器允许你调用f方法时,对f方法抛出的RuntimeException子类异常不进行处理
 4.强烈建议你
 --1.对throws出的所有异常进行处理
 --2.如果一个方法内部已经对A异常进行了处理,则就不要再throws A
*/  
import java.io.*;
class DivisorIsZeroException extends Exception//异常类才可以抛出
{
public DivisorIsZeroException(String name)
{
super(name);//调用Exception里面=的构造函数
}
}
class A
{
    public int divide(int a,int b) throws DivisorIsZeroException
    {
    int m;
    if(0 == b)
    throw new DivisorIsZeroException("除数不能为零");//抛出异常对象
    else
    m = a/b;
    return m;
    }
}
public class TestExcep6
{
public static void main(String[] args)
{
A aa = new A();
try
{
aa.divide(6,0);
}
catch(Exception e)
{
e.printStackTrace();
}
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值