异常概述
在程序中,异常可能由程序员没有预料到的各种情况产生,也可能由超出了程序员可控制范围的环境因素产生,如用户的坏数据,试图打开一个根本不存在的文件等。在Java中,,这种在程序运行时可能出现一些错误称为异常。异常是一个在程序执行期间发生的事件,它中断了正在执行的程序的正常指冷流。
异常的抛出与捕捉
在Java中,如果某个方法抛出异常,既可以在当前方法中进行捕捉,而后处理该异常,也可以将异常向上抛出,交由方法调用者来处理。
自定义异常
使用Java内置的异常类可以描述在编程时出现的大部分异常类情况。除此之外,用户只需维承Execption类即可自定义异常类。在程序中使用自定义异常类,大体可分为以下步骤:
(1)创建自定义异常类。
(2)在方法中通过throw关键字抛出异常对象。
(3)如果在当前抛出异常的方法中处理异常,可以使用try-catch语句捕获并处理,否则方法的声明通过throw关键字指名要给出调用者的异常,继续进行下一步操作
在主方法中抛出异常
使用throw关键字抛出异常
throw关键字通常被应用在声明方法时,用来指定方法可能被抛出的异常。多个异常可使用逗号分隔。
使用匿名类时应该遵循以下原则:
1、匿名类不能写构造方法。
2、匿名类不能定义静态的成员。
3、如果匿名类创建的对象没有赋值给任何应用变量,会导致该对象用完一次就会被Java虚拟机销毁。
异常的使用原则
Java异常强制用户去考虑程序的强健性和安全性。异常处理不应用来控制程序的正常流程,其主要作用是捕获程序在运行时发生的异常并进行相应的处理。编写代码处理某个方法可能出现的异常时,可遵循以下几条原则:1、在当前方法声明中使用try-catch语句捕获异常。2、一个方法被覆盖时,覆盖它的方法必须抛出相同的异常或异常的子类。3、如果父类抛出多个异常,则覆盖方法必须抛出那些异常的一个子集,不能抛出新异常。
常见异常类
9.1代码
public class Baulk {
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
int result=3/0;
System.out.print(result);}
catch(ArithmeticException e) {
System.out.println("你好亲,出现算数异常");
}
finally {
System.out.println("程序结束");}
}
}
9.2代码
package app;
public class Thundering {
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
String str="lili";
System.out.println(str+"年龄是:");
int age=Integer.parseInt("20");//类型转换
System.out.print(age);
int result=3/0;
System.out.print(result);}
catch(NumberFormatException e) {
System.out.println("你好亲,出现数字格式异常");}
catch(ArithmeticException e) {
System.out.println("你好亲,出现算术异常");}
finally {
System.out.println("程序结束");}
}
}
9.3代码
package app;
public class Thundering {
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
String str="lili";
System.out.println(str+"年龄是:");
int age=Integer.parseInt("20");//类型转换
System.out.print(age);
int result=3/0;
System.out.print(result);}
catch(NumberFormatException e) {
System.out.println("你好亲,出现数字格式异常");}
catch(ArithmeticException e) {
System.out.println("你好亲,出现算术异常");}
finally {
System.out.println("程序结束");}
}
}
9.4代码
public class myException extends Exception{
public myException(String message) {
super(message);
}
}
9.5代码
public class Tran {
static int avg(int num1,int num2) throws myException{
if(num1<0||num2<0) {
// System.out.print("存在负数,无法计算");
throw new myException("存在负数,无法计算");}
if(num1>0||num2>0) {
throw new myException("大于一百,无法计算");}
return(num1+num2)/2;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
int result=avg(32,6);
System.out.println(result);
}
catch(myException e) {
System.out.println(e);
}
}
}
9.6代码
public class Shoot {
static void pop()throws NegativeArraySizeException{
int[]arr=new int[-3];
}
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
pop();
}
catch(NegativeArraySizeException e) {
System.out.println("pop()方法抛出的一场");
}
}
}
9.7代码
public class Myexception1 extends Exception {
String message;
public Myexception1(String ErrorMessagr) {
message=ErrorMessagr;}
public String getMessage() {
return message;
}
}
9.8代码
import java.awt.color.CMMException;
public class Captor{
static int quotient(int x,int y)throws Exception{ //定义方法抛出异常
if(y<0){ //判断
throw new Exception("除数不能是负数"); //异常信息
}
return x/y; //返回值
}
public static void main(String args[]){
try{ //try语句块包含可能发生异常的语句
int result=quotient(3,-1); //调用方法quotient()
}catch(myException e){ //处理自定义异常信息
System.out.println(e.getMessage()); //输出异常信息
}catch(ArithmeticException e){ //处理ArithmeticException异常
System.out.println("除数不能为0"); //输出提示信息
}catch(Exception e){ //处理其他异常
System.out.println("程序发生了其他异常"); //输出提示信息
}
}
}