黑马程序员_异常处理

            ------ android培训java培训、java基础学习技术总结、期待与您交流! ---------- 

 

异常:就是程序在运行时出现不正常情况
      异常的由来:问题也就是现实生活中一个具体的事物,也可以通过java的类的形式进行描述,并封装成对象。
       其实就是java对不正常情况进行描述后的对象体现;
                  
      对于问题的划分:两种:一种是严重的问题,一种是非严重的问题‘’
      对于严重的,java通过Error类进行描述。
      对于Error一般不编写针对性的代码对其进行处理
      对于非严重的,java通过Excetion类进行描述。
          对于Exception可以使用针对性处理方式进行处理。
          无论Error或者Exception都具有共同的行为
          Throwable是java语言中Error或者Exception的父类。
          ArithmeticException
          java用面向对象的思想,对一些常见的问题进行封装,把问题变成对象
          2.异常的处理
          java提供了特有的语句进行处理。
          try{
              需要检测的代码;
          }
          catch(类 变量){
                  异常处理
          }
          finally{
          }
          3.对捕获到的异常对象进行常见的方法操作。
         对多异常的处理
         1.声明异常时,建议声明更为具体的异常,这样可以处理的更具体。
         2.对方声明几个异常,就对应有几个catch块。
           如果多个catch块中的异常出现继承关系,父类异常catch块放在最下面。
           建立在进行catch处理时,catch中一定要定义具体的处理方式。
           不要简单的定义一句e.printStacktrace()
           不要写简单的输出语句。   
           项目中会出现特有的问题,
           而这些问题并未被java所描述并封装对象。
           所以对于这些特有的问题可以按照java对问题封装的思想。
           将特有的问题。进行自定义的异常封装。
           自定义异常
           需求:在本程序中,对于除数是-1,也视为是错误的是无法进行的运算的。
           那么就需要对这个问题进行自定义的描述。
           自定义的异常需要继承Exception
           当在函数内部出现了throw抛出一场对象,那么就必须要给对应的处理动作。
           要么的内部try catch处理,要么在函数上声明让调用者处理
           一般情况在,函数内出现了异常,函数上需要声明。    
           发现打印的结果中只有异常的名称,却没有异常的信息。
           因为自定义的异常并未定义所属信息。
           如何自定义异常信息呢?
           因为父类中已经把异常信息的操作都完成了。
           所以子类只要在构造时,将异常信息传递给父类通过suer语句。
           那么就可以直接通过getMessage方法获取自定义的异常信息。
           必须是自定义类继承Exception
           继承Exception原因
           异常体系有一个特点,异常类和异常对象都被抛出。
           他们都具有可抛性。这个可抛性是Throwable这个体系中独有特点
           只有这个体系中的类和对象才可以被Throws和throw操作。
           throws和throw的区别
           throws使用在函数上,throw使用在函数内
           throws后面跟的是异常类,可以跟多个,用逗号隔开。
           throw后跟的是异常对象。

代码1示例如下:

       此程序会报除零异常

class Demo{
	int div(int x,int y){
		return x/y;
	}	
}
public 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"); 
	}
}

 代码示例2如下:

class Demo2
{
	int div(int a,int b)throws Exception{//在功能上通过throws的关键字声明有可能出现问题。
		return a/b;
	}
} 
public class ExceptionDemo2 {
	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("除零了!");
			System.out.println(e.getMessage());
			System.out.println(e.toString());
			e.printStackTrace(); // jvm默认的异常处理机制,打印异常的堆栈信息
		}
		System.out.println("over");
	}
}

 代码示例3如下:

class Demo3
{
	int div(int a,int b)throws Exception
	{
		return a/b;
	}
}
public class ExceptionDemo3 {
	public static void main(String[] args) throws Exception {
		Demo3 d = new Demo3();
		int x = d.div(4, 0);
		System.out.println("x+" + x);
		System.out.println("over");
	}
}

 代码示例4如下:

class Demo4{
	int div(int a,int b)throws ArithmeticException,ArrayIndexOutOfBoundsException{
		int arr[]=new int[a];
		System.out.println(arr[4]);
		return a/b;
	}  
}
public class ExceptionDemo4 {
	public static void main(String[] args) {
     Demo4 d=new Demo4();
     try{
    	 int x=d.div(4, 0);
    	 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("hhhaa:"+e.toString());
      }*/     
     System.out.println("over");  
	}
}

 代码示例5如下:

class FuShuException extends Exception{
	private String msg;
	private int value;
	FuShuException(String msg,int value){
		super(msg);
		this.value=value;
	}
	public int getValue(){
		return value;
	}
	/*public String toString(){
		return msg; 
	}*/
}
class Demo5{
	int div(int a,int b)throws FuShuException {
		if(b<0)
			throw new FuShuException("除数为负数!",b);
		return a/b;
	}
}
public class ExceptionDemo5 {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
            Demo5 d=new Demo5();
            try{
            	int x=d.div(4, -1);
            	System.out.println("x+"+x);
            }catch(FuShuException e){
            	System.out.println(e.toString());
            	System.out.println("除数出现负数啦!"+e.getValue());  
            }
	}
}

 

            ------ android培训java培训、java基础学习技术总结、期待与您交流! ----------

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值