JAVA------异常

异常

JAVA------异常_第1张图片

  • 异常的处理方式:
  • try…catch…finally
  • 格式:
  •  try{
    
  •    被检测的代码
    
  •    可能出现异常的代码
    
  •  }catch(异常类名 变量){
    
  •     异常的处理方式
    
  •     循环,判断,调用方法,变量
    
  •  }finally{
    
  •     必须要执行代码
    
  •  }
    

try…catch…

JAVA------异常_第2张图片
/*

  • 多catch写在一起
  • 细节:
  • catch小括号中,写的是异常类的类名
  • 有没有顺序的概念,有
  • 平级异常: 抛出的异常类之间,没有继承关系,没有顺序(因为下面这三行首个单词之间都没有相互继承的关系,所以属于平辈关系。)
  •  NullPointerException extends RuntimeException
    
  •  NoSuchElementException extends RuntimeException
    
  •  ArrayIndexOutOfBoundsException extends IndexOutOfBoundsException extends RuntimeException
    
  • 上下级关系的异常
  •  NullPointerException extends RuntimeException extends Exception
    
  •  越高级的父类,写在下面
    

*/

运行异常

/*

  • 异常分为编译异常和运行时期异常
  • 编译异常: 调用了抛出异常的方法,不处理编译失败 (try throws)
  • 运行异常: 抛出的异常是RuntimeException类,或者是他的子类
  • 运行异常的特点:
  • 方法内部抛出的异常是运行异常, new XXXException
    
  • 方法的声明上,不需要throws语句,调用者,不需要处理
    
  • 设计原因:
    
  •    运行异常,不能发生,但是如果发生了,程序人员停止程序修改源代码
    
  •    运行异常: 一旦发生,不要处理,请你修改源代码, 运行异常一旦发生,后面的代码没有执行的意义
    

*/
运行异常案例
public class RuntimeExceptionDemo {
public static void main(String[] args) {
double d = getArea(1);
System.out.println(d);
}

/*
 *  定义方法,计算圆形的面积
 *  传递参数0,或者负数,计算的时候没有问题
 *  但是,违反了真实情况
 *  参数小于=0, 停止程序,不要在计算了
 */
public static double getArea(double r){
	if(r <= 0)
		throw new RuntimeException("圆形不存在");
	return r*r*Math.PI;
}

}

运行异常一旦出现,说明代码错误,需要直接改代码。

/*

  • 继承后,在子类重写父类方法的时候,异常处理
  • 结论:
  • 父类的方法,如果抛出异常,子类重写后
  •  可以不抛出异常
    
  •  也可以抛出异常,但是,如果子类要抛,抛出的异常不能大于父类的异常(平级也不行)
    
  •    大于,都指的是继承关系
    
  • 原因在于:多态调用。
  • 父类的方法,没有异常抛出,子类重写后
  •   也不能抛出异常
    
  •   如果子类中调用了抛出异常的方法,别无选择,只能try..catch处理
    

/
/

  • Throwable类中的方法
  • 三个方法,都和异常的信息有关系
  • String getMessage() 对异常信息的详细描述 异常了!
  • String toString() 对异常信息的简短描述 java.lang.Exception: 异常了!
  • void printStackTrace() 将异常信息追踪到标准的错误流 异常信息最全,JVM默认调用方法也是这个方法
    */

自定义异常

 /*
 *  自定义异常
 *    继承Exception,或者继承RuntimeException
 *    构造方法中,super将异常信息,传递给父类
 */
public class FuShuException extends RuntimeException{
	public FuShuException(String s){
		super(s);
	}
	
	public FuShuException(){}
}
public class ExceptionDemo {
	public static void main(String[] args) {
		
		int avg = getAvg(50,60,-70,80);
		System.out.println(avg);
		
	}
	/*
	 * 传递成绩,计算成绩的平均数
	 * 成绩没有负数,需要抛出异常,停止运算
	 */
	public static int getAvg(int...source){
		int sum = 0 ;
		for(int s : source){
			if( s < 0){
				throw new FuShuException("成绩错误 "+s);
			}
			sum = sum + s;
		}
		return sum/source.length;
	}
}

你可能感兴趣的:(java,开发语言)