异常
概述:
运算异常示例:
class Demo
{
int div(int a,int b)
{
return a/b;
}
}
class ExceptionDemo
{
public static void main(String[] args)
{
Demo d= new Demo();
int x = d.div(4,0);
System.out.println("x="+x);
System.out.println("over");
}
}
class Demo
{
int div(int a,int b)
{
return a/b;
}
}
class ExceptionDemo
{
public static void main(String[] args)
{
Demo d= new Demo();
try
{
int x = d.div(4,0);
System.out.println("x="+x);
}
catch (Exception e)//Exception e = new ArithmeticException();
{
System.out.println("除0了");
System.out.println(e.getMessage()); //by zero;
System.out.println(e.toString()); //异常名称:异常信息
e.printStackTrace();//异常名称,异常信息,异常出现的位置
//其实jvm默认的异常处理机制,就是在调用printStackTrace
//方法。 打印异常的堆载信息
}
System.out.println("over");
}
}
概述
例:
class Demo
{
int div(int a,int b)throws Exception//在功能上通过throws的关键字声明了该功能有可能会出现问题
{
return a/b;
}
}
class ExceptionDemo1
{
public static void main(String[] args)
{
Demo d= new Demo();
try
{
int x = d.div(4,0);
System.out.println("x="+x);
}
catch (Exception e)
{
System.out.println(e.toString());
}
System.out.println("over");
}
}
例:
class Demo
{
int div(int a,int b)throws ArithmeticException,ArrayIndexOutOfBoundsException//在功能上通过throws的关键字声明了该功能有可能会出 现问题
{
int[] arr = new int[a];
System.out.println(arr[4]);
return a/b;
}
}
class ExceptionDemo1
{
public static void main(String[] args)
{
Demo d= new Demo();
try
{
int x = d.div(4,1);
System.out.println("x="+x);
}
catch (ArithmeticException e)
{
System.out.println(e.toString());
System.out.println("被除零了!!");
}
catch(ArrayIndexOutOfBoundsException e)
{
System.out.println(e.toString());
System.out.println("角标越界啦!!");
}
catch(Exception e)
{
System.out.println("haha"+e.toString());
}
System.out.println("over");
}
}
自定义异常
例:
class FuShuException extends Exception
{
private int value;
FuShuException()
{
super();
}
FuShuException(String msg,int value)
{
super(msg);
this.value=value;
}
public int getValue()
{
return value;
}
}
class Demo
{
int div(int a,int b)throws FuShuException
{
if(b<0)
throw new FuShuException("出现了除数是负数的情况 / by fushu",b);//手动通过throw关键字抛出一个自定义异常对象
return a/b;
}
}
class ExceptionDemo3
{
public static void main(String[] args)
{
Demo d= new Demo();
try
{
int x = d.div(4,-1);
System.out.println("x="+x);
}
catch (FuShuException e)
{
System.out.println(e.toString());
//System.out.println("除数出现负数了");
System.out.println("错误的负数是:"+e.getValue());
}
System.out.println("over");
}
}
/*
class Throwable
{
private String message;
Throwable(String message)
{
this.message=messaage;
}
public String getMessage()
{
return message;
}
}
class Exception extends Throwable
{
Exception(String message)
{
super(message);
}
}
*/
throw和throws的区别
RuntimeException
异常练习
class LanPingException extends Exception
{
LanPingException(String message)
{
super(message);
}
}
class MaoYanException extends Exception
{
MaoYanException(String message)
{
super(message);
}
}
class NoPlanException extends Exception
{
NoPlanException(String message)
{
super(message);
}
}
class Computer
{
private int state = 3;
public void run()throws LanPingException,MaoYanException
{
if(state ==2)
throw new LanPingException("蓝屏了");
if(state ==3)
throw new MaoYanException("冒烟了");
System.out.println("电脑运行");
}
public void reset()
{
state = 1;
System.out.println("电脑重启");
}
}
class Teacher
{
private String name;
private Computer cmpt;
Teacher(String name)
{
this.name = name;
cmpt = new Computer();
}
public void prelect()throws NoPlanException
{
try
{
cmpt.run();
}
catch (LanPingException e)
{
cmpt.reset();
}
catch (MaoYanException e)
{
test();
throw new NoPlanException("课时无法继续"+e.getMessage());
}
System.out.println("讲课");
}
public void test()
{
System.out.println("练习");
}
}
class ExceptionTest
{
public static void main(String[] args)
{
Teacher t = new Teacher("毕老师");
try
{
t.prelect();
}
catch (NoPlanException e)
{
System.out.println(e.toString());
System.out.println("换老师或者放假");
}
}
}
可是当冒烟发生后,出现剑客进度无法继续。
异常-finally
try
{
连接数据库;
数据库操作;//throw new SQLException();
}
catch(SQLException e)
{
会对数据库进行异常处理;
throw new NoException();
}
finally
{
关闭数据库;//该动作,无论数据操作是否成功,一定要关闭资源。
}
异常-处理语句其他格式
第一个格式:
try
{
}
catch()
{
}
try
{
}
catch()
{
}
finally
{
}
try
{
}
finally
{
}
例:
class Demo
{
public void method()
{
try
{
throw new Exception();
}
catch (Exception e)
{
try
{
throw e;
}
catch ()
{
}
}
}
}
异常-覆盖时的异常特点
class AException extends Exception
{
}
class BException extends AException
{
}
class CException extends Exception
{
}
class Fu
{
void show()throws AException
{
}
}
class Test
{
void function(Fu f)
{
try
{
f.show();
}
catch (AException e)
{
}
}
}
class Zi extends Fu
{
void show()throws BException
{
}
}
class ExceptionDemo7
{
public static void main(String[] args)
{
Test t = new Test();
t.function(new Zi());
}
}
异常练习
class NoValueException extends RuntimeException
{
NoValueException(String message)
{
super(message);
}
}
interface Shape
{
void getArea();
}
class Rec implements Shape
{
private int len,wid;
Rec(int len,int wid)//throws NoValueException
{
if(len<=0 || wid<=0)
throw new NoValueException("出现非法值");
else
{
this.len = len;
this.wid = wid;
}
}
public void getArea()
{
System.out.println(len*wid);
}
}
class Circle implements Shape
{
private int radius;
public static final double PI=3.14;
Circle(int radius)
{
if(radius<=0)
throw new NoValueException("非法");
this.radius = radius;
}
public void getArea()
{
System.out.println(radius*radius*PI);
}
}
class ExceptionTest1
{
public static void main(String[] args)
{
Rec r = new Rec(3,4);
r.getArea();
Circle c = new Circle(-8);
System.out.println("over");
}
}
运行结果:
总结
try
{
需要被检测的代码;
}
catch()
{
处理异常的代码;
}
finally
{
一定会执行的代码;
}
class MyEception extends Exception
{
MyException(String message)
{
super(message);
}
}
try
{
throw new AException();
}
catch (AException e)
{
throw e;
}
try
{
throw new AException();
}
catch (AException e)
{
//对AException处理。
throw new BException();
}