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);
}

Apex 的异常处理的更多相关文章

  1. Salesforce LWC学习(三十五) 使用 REST API实现不写Apex的批量创建/更新数据

    本篇参考: https://developer.salesforce.com/docs/atlas.en-us.224.0.api_rest.meta/api_rest/resources_compo ...

  2. 关于.NET异常处理的思考

    年关将至,对于大部分程序员来说,马上就可以闲下来一段时间了,然而在这个闲暇的时间里,唯有争论哪门语言更好可以消磨时光,估计最近会有很多关于java与.net的博文出现,我表示要作为一个吃瓜群众,静静的 ...

  3. 基于spring注解AOP的异常处理

    一.前言 项目刚刚开发的时候,并没有做好充足的准备.开发到一定程度的时候才会想到还有一些问题没有解决.就比如今天我要说的一个问题:异常的处理.写程序的时候一般都会通过try...catch...fin ...

  4. 异常处理汇总 ~ 修正果带着你的Net飞奔吧!

    经验库开源地址:https://github.com/dunitian/LoTDotNet 异常处理汇总-服 务 器 http://www.cnblogs.com/dunitian/p/4522983 ...

  5. JavaScript var关键字、变量的状态、异常处理、命名规范等介绍

    本篇主要介绍var关键字.变量的undefined和null状态.异常处理.命名规范. 目录 1. var 关键字:介绍var关键字的使用. 2. 变量的状态:介绍变量的未定义.已定义未赋值.已定义已 ...

  6. IL异常处理

    异常处理在程序中也算是比较重要的一部分了,IL异常处理在C#里面实现会用到一些新的方法 1.BeginExceptionBlock:异常块代码开始,相当于try,但是感觉又不太像 2.EndExcep ...

  7. Spring MVC重定向和转发以及异常处理

    SpringMVC核心技术---转发和重定向 当处理器对请求处理完毕后,向其他资源进行跳转时,有两种跳转方式:请求转发与重定向.而根据要跳转的资源类型,又可分为两类:跳转到页面与跳转到其他处理器.对于 ...

  8. 【repost】JS中的异常处理方法分享

    我们在编写js过程中,难免会遇到一些代码错误问题,需要找出来,有些时候怕因为js问题导致用户体验差,这里给出一些解决方法 js容错语句,就是js出错也不提示错误(防止浏览器右下角有个黄色的三角符号,要 ...

  9. 札记:Java异常处理

    异常概述 程序在运行中总会面临一些"意外"情况,良好的代码需要对它们进行预防和处理.大致来说,这些意外情况分三类: 交互输入 用户以非预期的方式使用程序,比如非法输入,不正当的操作 ...

随机推荐

  1. 仿B站项目——(1)计划,前端工程

    计划 现打算: 计划用webpack打包 + 模板语言 + jquery + jquery ui + bootstrap做一个仿B站的静态网站. 网站兼容手机浏览器端. 部分模块打算仿照SPA用js加 ...

  2. Python基础入门教程(3)

    人生苦短,我学Pyhton Python(英语发音:/ˈpaɪθən/), 是一种面向对象.解释型计算机程序设计语言,由Guido van Rossum于1989年底发明,第一个公开发行版发行于199 ...

  3. LeetCode: 103_Binary Tree Zigzag Level Order Traversal | 二叉树Zigzag层次遍历 | Medium

    本题也属于层次遍历的变形,不同之处在于其遍历的方法是交替进行的,形成一个ZigZag的曲线形式,如下: 代码如下: struct TreeNode { int val; TreeNode* left; ...

  4. Spring MVC & Boot & Cloud 技术教程汇总(长期更新)

    昨天我们发布了Java成神之路上的知识汇总,今天继续. Java成神之路技术整理(长期更新) 以下是Java技术栈微信公众号发布的关于 Spring/ Spring MVC/ Spring Boot/ ...

  5. .NET手记-ASP.NET MVC快速分页的实现

    对于Web应用,展示List是很常见的需求,随之而来的常见的分页组件.jQuery有现成的分页组件,网上也有着大量的第三方分页组件,都能够快速实现分页功能.但是今天我描述的是用基本的C#和html代码 ...

  6. python之使用PIL模块制作随机验证码

    制作随机验证码,需要如下知识点: 1.随机验证码的制作(这里用的是random模块随机产生字符) 2.图片的制作 3.随机直线干扰项 4.其他随机干扰项 代码如下: from PIL import I ...

  7. (转)websphere线程池 连接池设置

    原文:http://www.talkwithtrend.com/Article/207511 池(Pool)是WebSphere中最常涉及的概念之一.从网络.Web 服务器.Web 容器.EJB 容器 ...

  8. li内有span需要右浮的问题

    图一和图二换了一下span的位置,但是其页面展示是一样的,兼容性比较好的是第二种

  9. Java:类的构造函数

    类的构造函数   类的构造函数特点: 1. 构造函数也称为构造方法,构造函数名和类名相同.     2. 构造函数不能有返回值,也不能用void声明. 3. 构造函数可以有参数,也可以无参数,在一个类 ...

  10. 全网最详细的MyEclipse里如何正确新建普通的Java web项目并发布到Tomcat上运行成功【博主强烈推荐】(图文详解)

    不多说,直接上干货! 首先,大家要明确,IDEA.Eclipse和MyEclipse等编辑器之间的新建和运行手法是不一样的. 如果是在eclipse里,则是File -> new ->  ...