异常处理语法:
为了处理JAVA中的异常,我们必须使用以下关键字。他们是try, catch, finally, throws 和 throw.
try { Block of statements which are to be monitored by JVM at run time (or problematic errors); } catch (Type_of_exception1 object1) { Block of statements which provides user friendly messages; } catch (Type_of_exception2 object2) { Block of statements which provides user friendly messages; } . . . catch (Type_of_exception3 object3) { Block of statements which provides user friendly messages; } finally { Block of statements which releases the resources; }
Try块:
- 这是我们编写在运行时要通过JVM监视的语句块的块,即尝试块必须包含在运行时导致问题的语句。
- 如果发生任何异常,则控制将自动跳转到适当的Catch块。
- 如果在尝试块执行中进行任何异常,则将终止,并且尝试块中的其余语句根本不会执行,并且控件将转到捕获块。
- 对于每个尝试块,我们必须至少有一个Catch块。强烈建议为"n"的捕获量写入'n'的问题语句。
Catch块:
- 这用于通过捕获系统错误消息来提供用户友好消息。
- 在Catch中,我们必须声明适当的执行类的对象,每当采取适当情况时,它将在内部引用JVM。
- 如果我们编写'n'捕获数量作为Java程序的一部分,那么只有一个捕获将在任何时候都执行。
- 执行适当的Catch块后,即使我们在Catch块中使用Return语句,控件也不会尝试块。
Finally块:
- 这是执行强制执行异常是否正在发生的块。
- 此块包含相同的语句,该语句释放在尝试块中获得的资源(资源是打开文件,打开数据库等)。
- 写入终于块是可选的。
例如:
class Ex1 { public static void main (String [] args) { try { String s1=args[0]; String s2=args[1]; int n1=Integer.parseInt (s1); int n2=Integer.parseInt (s2); int n3=n1/n2; System.out.println ("DIVISION VALUE = "+n3); } catch (ArithmeticException Ae) { System.out.println ("DONT ENTER ZERO FOR DENOMINATOR..."); } catch (NumberFormatException Nfe) { System.out.println ("PASS ONLY INTEGER VALUES..."); } catch (ArrayIndexOutOfBoundsException Aioobe) { System.out.println ("PASS DATA FROM COMMAND PROMPT..."); } finally { System.out.println ("I AM FROM FINALLY..."); } } };
Throws块:这是一个关键字,它给出调用函数的指示,以便在尝试和捕获块中保持被叫功能。
语法:
<返回类型>方法名称(如果有的话)抛出异常类型1,异常类型2,......异常的类型;
throws块示例
(CALLED FUNCTION) package ep; public class Ex2 { public void div (String s1, String s2) throws ArithmeticException, NumberFormatException { int n1=Integer.parseInt (s1); int n2=Integer.parseInt (s2); int n3=n1/n2; System.out.println ("DIVISOIN = "+n3); } }; (CALLING FUNCTION) import ep.Ex2; class Ex3 { public static void main (String [] args) { try { String s1=args [0]; String s2=args [1]; Ex2 eo=new Ex2 (); eo.div (s1,s2); } catch (ArithmeticException Ae) { System.out.println ("DONT ENTER ZERO FOR DENOMINATOR"); } catch (NumberFormatException Nfe) { System.out.println ("PASS INTEGER VALUES ONLY"); } catch (ArrayIndexOutOfBoundsException Aioobe) { System.out.println ("PASS VALUES FROM COMMAND PROMPT"); } } };
如何在java运行时环境中发生异常
- 每当我们向JAVA程序传递不相关的输入时,JVM就不能处理不相关的输入。
- 由于JVM无法按用户输入进行处理,因此它可以联系JRE以获取适当的异常类。
- JRE联系java.lang.Throwable以查找异常类型。
- Throwable决定异常的类型,并将消息传递给JRE。
- JRE将异常类型传递给JavaAPI。
- [6.1&6.2]从JAVA API中,JAVA.lang.Error类或JAVA.lang.Exception类将找到一个适当的子类异常。
- java.lang.Error类或java.lang.Exception类为JRE提供适当的异常类。
- JRE将为JVM提供适当的异常类。
- JVM将创建一个从JRE获得的适当异常类的对象,并生成系统错误消息。
- 为了使程序非常强大(健壮),JAVA程序员必须使用异常处理的概念将系统错误消息转换成用户友好的消息。
用户友好的消息被普通用户有效地理解,因此我们的程序是健壮的。
java.class.Object是所有java类的超类。
在JAVA中,我们有两种类型的异常:预定义异常和用户或自定义异常。
1.预定义的异常是由SUN micro system开发并作为JDK的一部分提供以处理通用问题的异常。一些普遍的问题是被零除、数字格式无效、数组反弹无效等。
异常分为两种类型。它们是异步异常和同步异常。
异步异常是那些总是处理硬件问题的异常。为了处理异步异常,有一个名为java.lang.Error的预定义类。Error类是所有异步异常的超类。
同步异常总是处理程序错误。为了处理同步异常,我们必须使用名为java.lang.Exception class的预定义类。
Exception是所有同步异常的超类。同步异常分为两种类型。它们是检查异常和未检查异常。
-checked异常总是处理有关未找到类和未找到接口的编译时错误。
-Unchecked异常是指那些总是处理程序运行时错误的异常,如算术异常、NumberFormatException、ArrayIndexOutOfBoundsException等。
异常是在运行时发生的对象,它描述了消息的性质。消息的性质可以是系统错误消息或用户友好消息。
Java查看异常详细信息的方法:
在Java中,有三种方法可以找到异常的详细信息。
它们使用了java.lang.exception类的对象,使用公共void printstacktrace方法并使用公钥GetMessage方法。
使用java.lang.Exception的对象:
异常类的对象打印异常的名称和信息
例如:
try { int x=Integer.parseInt ("10x"); } catch (Exception e) { System.out.println (e); //java.lang.NumberFormatException : for input string 10x } name of the exception nature of the message
使用PrintStacktrace方法:
这是java.lang.lang.lang.throwable类中定义的方法,它被继承为java.lang.error类和java.lang.exception类。
此方法将显示出现异常的消息和行号的异常的名称。
例如:
try { ......; int x=10/0; ......; } catch (Exception e) { e.printStackTrace (); //java.lang.ArithmeticException :/by zero : at line no: 4 } name of the exception nature of the message line number
使用getMessage方法:
这也是java.lang.lang.lang.lang.lang.throwable类中定义的方法,它被继承成错误和异常类。
此方法仅显示消息。
例如:
try { ......; int x=10/0; ......; } catch (Exception e) { System.out.println (e.getMessage ()); }