一、异常概念

Throwable类是Java中所有错误或异常的超类。

1.只有当对象是此类(或其子类)的实例时,才能通过Java虚拟机或着Java throw语句抛出。 
    2.只有此类或其子类才可以是catch字句中的参数类型。 
    3.有两个直接子类:Error和Exception 
        Error--指应用程序不应该去处理捕获的一种严重问题,常表示系统级的错误,如内存溢出 
       Exception--指程序需要捕获,需要处理的异常,是一种设计或实现方面的问题。 
            Exception分为两类:RuntimeException和CheckedException 
               RuntimeException--运行时异常,由程序员错误导致,不需要捕获处理,直接由 
                            虚拟机接管,层层上抛,记录日志,程序员应尽量避免此种异常。 
                CheckedException--一般异常,需要进行catch,如IO异常和SQL异常等。 
                 
        注:Error是不需要程序员关心的,属于系统级的错误 
             RuntimeException需要程序员注意逻辑和编码上的谨慎,尽量避免此种错误发生 
             CheckedException需要进行捕获处理

二、常见的RuntimeException异常:

1.ArithmeticException 算数异常--如最常见的除数为0 
    
    2.ArrayindexOutOfBoundsException 数组下标越界异常,但需要遍历数组时,用foreach或者ArraryList可避免此异常。 
    
    3.ClassCastException 强制转换异常 
    
    4.ClassNotFoundException 找不到指定类异常,此类异常常发生于以下几种情况, 
                                          如:Class类中的forName方法 
                                               ClassLoader类中的findSystemClass方法 
                                               ClassLoader类中的loadClass方法 
                                
    5.NullPointException 空指针异常,当应用程序试图在需要对象的地方使用null时,抛出此异常: 
                                  如:调用null对象的实例方法 
                                       访问或修改null对象的字段 
                                       将null作为一个数组,获得其长度 
                                       将null作为一个数组,访问或修改其元素值 
                                       将null作为Throwable值抛出 
                                  要避免此类异常可在定义引用类型变量就对其初始化,或者在使用此变量进行是否为空判断。 
    
    6.ArrayStoreException 数组存值异常--即元素类型不一致时抛出此异常,但若数组引用类型为Object则不会抛出此异常。

四、对异常的处理

throw: 
    使用throw关键字可以在方法体中抛出异常。该异常既可以使系统预定义异常,也可是用户自定义异常; 
    throw总是出现在函数体中,用来抛出一个具体异常。程序会在throw语句后立即终止,它后面的语句执 
    行不到,然后在包含它的所有try块中(可能在上层调用函数中)从里向外寻找含有与其匹配的catch子 
    句的try块: 
    
        throw 异常对象; 
        此时要抛出异常必须要应用在方法体中。

throws: 
    使用throws关键字可能会抛出异常;该异常既可以使系统预定义异常,也可是用户自定义异常; 
    throws总是出现在一个函数头中,用来标明该成员函数可能抛出的各种异常。对大多数Exception 
    子类来说,Java 编译器会强迫你声明在一个成员函数中抛出的异常的类型。如果异常的类型是 
    Error或 RuntimeException, 或它们的子类,这个规则不起作用, 因为这在程序的正常部分中 
    是不期待出现的。 如果你想明确地抛出一个RuntimeException,你必须用throws语句来声明它的 
    类型。 
    
        [<修饰符>]<返回值类型><方法名>([<参数列表>])[throws<异常类>] 
       注:异常类可以声明多个,用逗号分割。 
    
    
throw和throws的区别: 
    1.前者在方法体中使用,是一个语句,用于抛出具体的异常;后者在声明方法时使用,是一个方法,用于声明可能抛出的异常。 
    2.前者不能单独使用,要么和try-catch-finally配套,要么和throws配套;后者可单独使用。 
    3.使用前者,则一定会抛出异常,使用后者则可能会抛出异常 
    4.程序会在throw语句后立即终止,它后面的语句执行不到,然后在包含它的所有try块中(可能在上层调用函数中)从里向外寻 
      找含有与其匹配的catch子句的try块。    
      
为预定于异常添加提示信息: 
    
    对于系统预定义的异常,一般而言至少有两个构造函数,即有参构造和无参构造。程序员可以使用有参构造方法来添加提示 信息。

代码实例:

package com.xhj.exception;

/**
* 为预定于异常添加提示信息:
*
* @author XIEHEJUN
*
*/
public class AddExceptionMessage { public static void throwException() {
throw new UnsupportedOperationException("没有任何数据");
} public static void main(String[] args) {
try {
AddExceptionMessage.throwException();
} catch (Exception e) {
System.out.println(e.getMessage());
}
} }

用户自定义异常:

虽然Java本身定义的异常类已经十分的丰富齐全,但是在实际应用当中,需求总是千变万化的。 
    当需求需要而Java预定义异常类中却没有时,编程人员可通过自定义异常类来满足开发需求。 
    
    要编写一个自定义的异常类很简单,只需要继承Exception类或其子类,然后实现其构造方法即可。 
       public class MyException extends Exception{} 
        
   代码实例:

package com.xhj.exception;

/**
* 自定义异常
*
* @author XIEHEJUN
*
*/
public class MyDefinedException extends Exception { public MyDefinedException(String message) {
super(message); } public static void main(String[] args) throws MyDefinedException { String[] str = { "1", "2", "3", "4", "5", "6" };
for (String string : str) {
if (string.equals("6")) {
throw new MyDefinedException("此数据不能大于其字节长度!");
}
} } }

捕获异常:

当遇到异常,我们一般有两种解决方案:一种当然是将异常抛出;另外一种就是将异常捕获。 
抛出异常是一个很简单的行为,但是这个简单的行为将会让程序直接退出。而在实际需求当中, 
并不是什么异常都能抛出的,因为不管怎么样,我们总是要保持程序处于运行状态的,不然也就没有什么意义了。

异常的捕获要通过try--catch--finally语句块来完成:

1.try是不可缺少额语句块,主要用来放置可能出现异常的语句; 
    2.catch和finally两者至少要有一个1个与try配套; 
    3.catch块是用来放置异常发生后的处理语句; 
    4.finally里放置的则是无论发生异常与否都会执行的语句。 
    
    注:对异常进行捕获会占用很高的内存,因此try块中的语句要尽量少。 
    
   try--catch--finally的执行顺序: 
    
    实例代码:

package com.xhj.exception;

/**
* 认识try--catch--finally的执行顺序
*
* @author XIEHEJUN
*
*/
public class ExecuteExceptionShort { public static void main(String[] args) {
String[] strs = new String[5];
try {
int i = strs.length;
System.out.println("----进入try代码块----");
System.out.println("String数组大小为:" + i);
String str = "我是丑小鸭!";
strs[5] = str;
System.out.println("strs[5] = " + strs[5]);
System.out.println("----离开try代码块----");
} catch (Exception e) {
System.out.println("----进入catch代码块----");
System.out.println("异常为: " + e.toString());
System.out.println("----离开catch代码块----");
} finally {
System.out.println("----进入finally代码块----");
strs[4] = "我是美丽的白天鹅";
System.out.println(strs[4]);
System.out.println("----离开finally代码块----");
} } }


注:try--catch--finally语句块可捕获多个异常,但是在捕获多个异常的时候一定要注多个catch的执行顺序, 
所要捕获的异常一定要从小到大排列。当然也可直接通过所有异常的父类Exception,来简单处理。

WebDriver 异常处理

1.Exception NoSuchElementException:
  解决方法:
  1)检查目标element的locator
  2)如果locator是正确的,尝试在查找element之前等待页面的加载
  3)如果等待了很久也一直没有找到element,尝试使用另外一个locator
2.Exception NoSuchWindowException
  解决方法:
  1)检查窗口的locator
  2)在找窗口之前,等到页面的加载
3.Exception NoAlertPresentException
  解决方法:
  1)确认alert(javascript 顶层的窗口,不是最新的)是当前的
  2)在操作alert之前等待页面的加载
4.Exception NoSuchFrameException
  解决方法:
  1)检查frame的locator
  2)检查这个frame是否有一些父frame(如果有父frame的话,应该先转换到父frame)
  3)在转换到目标frame之前,确认转换到了默认的content(仅有一个frame)
  4)在转换frame之前等待页面的加载
5.Exception UnhandledAlertException
  解决方法:
  try catch
6.Exception UnexpectedTagNameException
  解决方法:
  try catch
7.Exception StaleElementReferenceException
  解决方法:
  try catch
8.Exception TimeoutException
  解决方法:
  try catch

java异常处理解决方案的更多相关文章

  1. 《转载》Java异常处理的10个最佳实践

    本文转载自 ImportNew - 挖坑的张师傅 异常处理在编写健壮的 Java 应用中扮演着非常重要的角色.异常处理并不是功能性需求,它需要优雅地处理任何错误情况,比如资源不可用.非法的输入.nul ...

  2. java异常处理机制 (转载)

    java异常处理机制 本文来自:曹胜欢博客专栏.转载请注明出处:http://blog.csdn.net/csh624366188 异常处理是程序设计中一个非常重要的方面,也是程序设计的一大难点,从C ...

  3. Java—异常处理总结

    异常处理是程序设计中一个非常重要的方面,也是程序设计的一大难点,从C开始,你也许已经知道如何用if...else...来控制异常了,也许是自发的,然而这种控制异常痛苦,同一个异常或者错误如果多个地方出 ...

  4. “崩溃了?不可能,我全 Catch 住了” | Java 异常处理

    前言 今天我们来讨论一下,程序中的错误处理. 在任何一个稳定的程序中,都会有大量的代码在处理错误,有一些业务错误,我们可以通过主动检查判断来规避,可对于一些不能主动判断的错误,例如 RuntimeEx ...

  5. 基础知识《十一》Java异常处理总结

    Java异常处理总结           异常处理是程序设计中一个非常重要的方面,也是程序设计的一大难点,从C开始,你也许已经知道如何用if...else...来控制异常了,也许是自发的,然而这种控制 ...

  6. Java异常处理的10个最佳实践

    本文作者: ImportNew - 挖坑的张师傅 未经许可,禁止转载! 异常处理在编写健壮的 Java 应用中扮演着非常重要的角色.异常处理并不是功能性需求,它需要优雅地处理任何错误情况,比如资源不可 ...

  7. Java异常处理只有Try-Catch吗?

    今天,我们将讨论一个非常重要的主题-Java 中的异常处理.尽管有时可能会对此主题进行过多的讨论,但并非每篇文章都包含有用且相关的信息. Java 中最常见的异常处理机制通常与 try-catch 块 ...

  8. 《Java基础知识》Java异常处理详解

    1. Java 中的异常 前言:Java 中的异常处理是处理程序运行错误时的强大机制之一,它可以保证应用程序的正常流程. 首先我们将了解java异常.异常的类型以及受查和非受查异常之间的区别. 1.1 ...

  9. Java异常处理总结Exception\Error

    Java异常处理总结Exception\Error 2012-12-28 08:17:17|  分类: JAVA |  标签:java  |举报|字号 订阅   Java异常处理总结          ...

随机推荐

  1. mysql出现unblock with 'mysqladmin flush-hosts'

    朋友发来消息,说一个系统应用登录的时候提示连接超时,让帮忙处理一下.问他应用和数据库是否都正常,回复说数据库好像没有问题,但是应用日志报无法连接数据库. 数据库版本是:5.5.53 让他telnet数 ...

  2. Centos7.4 安装Docker

    一.安装docker yum install -y docker 二.启动docker服务 systemctl start docker 三.设置成开机启动docker服务 systemctl ena ...

  3. git ssh 22 端口不可用时通过https 443 端口配置git ssh

    Using SSH over the HTTPS port Sometimes, firewalls refuse to allow SSH connections entirely. If usin ...

  4. csproj文件中copy指令的使用方式

    实际开发中有很多项目需要引用第三方的dll或者资源文件,且文件比较多,在运行时这些文件需要被拷贝到BIN目录. 使用VS自带的"复制到输出目录",似然方便,但是比较不零活,经过多次 ...

  5. vue 实站技巧总结

    多个页面都使用的到方法,放在 vue.prototype上会很方便 刚接触 vue的时候做过一件傻事,因为封装了一个异步请求接口post,放在 post.js文件里面,然后在每个需要使用异步请求的页面 ...

  6. [转]kindeditor隐藏上传图片框网络图片或本地上传的功能

    原文地址:http://www.lingchenliang.com/post/154.html kindeditor富文本编辑器点击上传图片按钮,在弹出的窗口中去掉上传网络图片的功能,只留下本地上传, ...

  7. caffe网络结构可视化在线工具

    http://ethereon.github.io/netscope/#/editor shift+enter

  8. 网络I/O模型---同步异步阻塞非阻塞之惑

    网络I/O模型 人多了,就会有问题.web刚出现的时候,光顾的人很少.近年来网络应用规模逐渐扩大,应用的架构也需要随之改变.C10k的问题,让工程师们需要思考服务的性能与应用的并发能力. 网络应用需要 ...

  9. TDD学习笔记【六】一Unit Test - Stub, Mock, Fake 简介

    这篇文章简介一下,如何通过 mock framework,来辅助我们更便利地模拟目标对象的依赖对象,而不必手工敲堆只为了这次测试而存在的辅助类型. 而模拟目标对象的部分,常见的有 stub objec ...

  10. Flume的监控参数

    参考 flume的http监控参数说明 普通的flume启动命令 bin/flume-ng agent -c conf -f conf/flume-conf.properties -n agent - ...