• 【转】【Salesforce】Apex 的异常处理


    Apex 中的异常处理

    在 Apex 中,和其他语言类似,对于异常处理通常使用 try、catch、finally、throw 等关键字。

    对于每一个 try 代码段,必须要有至少一个 catch 或 finally 代码段,而 finally 代码段最多只能有一个。

    finally 代码段是必然会执行的代码段,无论异常有没有发生。

    异常处理的结果

    当发生异常后,代码执行会终止,而在此异常之前所有的数据库 DML 操作都会回滚,无论是否已经在此之前设定了“保存点(SavePoint)”。

    与此同时,相关的错误信息会写入日志,用户可以在“设置”界面下的 “Debug Logs” 选项中进行查看。错误信息也会显示在用户界面中。

    异常类型

    系统定义的异常类型有:

    • DmlException:关于数据库操作的异常
    • ListException:关于列表操作的异常
    • NullPointerException:关于空指针的异常
    • QueryException:关于查询语句的异常
    • SObjectException:关于SObject对象的异常

    它们共有的方法包括:

    • getCause():给出异常原因
    • getLineNumber():给出发生异常的行数
    • getMessage():给出异常的详细信息
    • getStackTraceString():给出异常发生的栈信息
    • getTypeName():给出异常的类型,比如 DmlException、NullPointerException 等

    对于每个异常类型,还有自己的方法,比如 DmlException 就拥有 getDmlFieldNames()、getDmlMessage() 等方法。

    标准格式

    try {
        // 执行操作,有可能发生异常
    } catch(DmlException e) {
        // 捕捉 DML 相关的异常
    } catch(SObjectException e) {
        // 捕捉 SObject 相关的异常
    } catch(Exception e) {
        // 发生异常之后,在此进行后续处理
    } finally {
        // 其他的操作,必然会执行的代码段
    }
    

    如果要捕捉不同的异常类型,要将“一般异常类型”(Exception)放在最后。

    自定义异常类型

    对于系统自定义的异常类型,只能使用 catch 来捕捉,而不能使用 throw 语句来抛出。开发者也可以定义自己的异常类型。

    自定义异常类型也是一个类,必须继承 Exception 类或其任何子类。

    自定义异常类型的名字必须以 Exception 结尾。

    标准格式:

    public class BaseException extends Exception {}
    
    public class ExampleException extends BaseException {}
    
    ...
    
    // 抛出异常类
    throw new BaseException();
    
    // 抛出异常类并加上错误信息
    new ExampleException('An error occurred.');
    
    // 抛出异常类并嵌套异常类变量
    try { 
        throw new BaseException('First exception'); 
    } catch (BaseException e) { 
        throw new ExampleException('Thrown with inner exception', e);
    } 
  • 相关阅读:
    小记:xml画一个爱心。
    类似UC天气下拉和微信下拉眼睛头部弹入淡出UI交互效果(开源项目)。
    FloatingActionButton增强版,一个按钮跳出多个按钮--第三方开源--FloatingActionButton
    回调机制的实现。
    小记:使用SharedPreferences存储来设置程序第一次进入欢迎界面,以后不会再进入欢迎界面。
    小记:获取系统时间的long值,格式化成可读时间。
    写程序的欢迎界面(运用画图方法画圆球)。
    并发的HashMap为什么会引起死循环?
    zuul重试配置
    zuul超时问题
  • 原文地址:https://www.cnblogs.com/zhuzhubaoya/p/14053927.html
走看看 - 开发者的网上家园