Java 异常

Java异常

在编译Java源文件的时候,每次或多或少都会出现各种各样的异常,如:NullPointerException(空指针异常),ArrayIndexOutOfBoundsException(数组角标越界异常),等等一些。出现这些情况的时候往往无法正常编译,有时编译通过但在运行的过程中却发生错误,程序便会终止运行。这便是异常。

异常和错误:

  • 异常:程序在运行期间发生了异常,通常可以有针对性的处理方式的。
  • 错误:程序在运行期间发生了错误,通常不会有针对性的处理方式。错误的的发生往往都是系统级别的问题,都是 jvm所在系统发生的并反馈给jvm的。无法针对处理,只能修正代码。

异常体系:

声明异常:

当方法内不能自己解决该异常时便需要将异常声明

捕获异常:

便是解决异常,使用try-catch

异常出现的案例:

public class Main {
	public static void main(String[] args) {
		
		int[] a=new int[10];
		int index=10;
		show(a,index);    //如果出现异常,程序便会终止
		System.out.println("over");
		System.out.println(10/0);    //如果执行到这里会报算数运算异常,没捕获该异常,由jvm直接抛出
		
	}
	public static void show(int[] a,int index){
		try{    //尝试运行
			System.out.println(a[index]);
                        //如果出现角标越界就捕获该异常
		}catch(ArrayIndexOutOfBoundsException e){
			System.out.println(a[0]);
		}
	}
}

什么时候捕获
    如果函数内部能够解决这个问题则捕获
什么时候声明
    函数内部解决不了,就要向调用者提示且声明
    如果抛出的异常一直被声明直到JVM都没人解决,那么直接报错
运行时异常可不可以被捕获或声明?
    可以,但是没必要,看具体需求

在捕获异常时,没有必要将大段的代码放入try语句中,只需要将可能出现问题的代码放入即可,否则会导致一些和异常不相关的代码被跳过

在继承中,异常是什么样的特点
1.如果父类函数没有声明异常(编译时)
则子类重写的函数也不可以声明异常(编译时)    
2.如果父类函数声明异常
则子类重写的函数可以声明父类异常的子类或子集

自定义异常:

package p4.异常;

public class Main2 {
	public static void main(String[] args)  {
		try{
			sleep(900);
		}catch(TimeBigerExcetion e){
			System.out.println("问题处理了!");
		}
		System.out.println("over");
	}
        //时间大于100或小于0则出现异常
	public static void sleep(int time) throws TimeBigerExcetion {
		
		if(time<0){//时间过小
			throw new TimeSmallerException("时间小于0,不能睡!");
		}
		if(time>100){//时间过大,创建异常对象
			throw new TimeBigerExcetion("时间太长了,死了!");
		}
		System.out.println("我睡了"+time+"天");
	}
}
class TimeSmallerException extends RuntimeException{    //自定义一个运行时异常
	public TimeSmallerException(String s){
		super(s);
	}
}
class TimeBigerExcetion extends Exception{    //自定义一个编译时异常
	public TimeBigerExcetion(String s){
		super(s);
	}
}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值