【Salesforce Apex 教程】3. Apex基础④ 异常处理
2023年09月15日
文章浏览:316

3.4 异常处理 (参考 Debugging, Testing, and Deploying Apex)

异常处理是编程中的重要概念,它允许你处理程序执行过程中可能出现的异常情况。在 Salesforce Apex 中,你可以使用异常处理机制来捕获和处理运行时错误,以便更加健壮地编写代码。


3.4.1 异常的概念

异常是在程序执行期间出现的错误或异常情况。这些异常可能是由于不正确的输入、外部系统的故障或其他不可预测的因素引起的。在这些情况下,程序的正常执行可能会受到影响,因此需要采取措施来处理这些异常。


在 Salesforce Apex 中,异常通常表示为异常类的实例。这些异常类都是内置的,并提供了各种异常类型,例如 System.NullPointerException(空指针异常)和 System.DmlException(数据库操作异常)等。


以下是一个示例,演示了如何捕获和处理空指针异常:

try {
    String str = null;
    Integer length = str.length(); // 这里会引发空指针异常
} catch (System.NullPointerException e) {
    System.debug('捕获到空指针异常:' + e.getMessage());
}

在上面的示例中,我们首先尝试访问一个空字符串的长度,这会引发空指针异常。然后,我们使用 try-catch 块来捕获这个异常,并在 catch 块中处理它。捕获到的异常对象 e 包含了有关异常的信息,我们可以使用 e.getMessage() 方法来获取异常消息。


异常处理允许你采取适当的措施来应对错误情况,以确保程序能够继续正常运行或提供有用的错误信息给用户。


3.4.2 try-catch语句

在 Salesforce Apex 中,你可以使用 try-catch 语句来捕获和处理异常。try 块中包含可能引发异常的代码,而 catch 块用于捕获和处理异常。


以下是一个示例,演示了如何使用 try-catch 语句来捕获和处理异常:

try {
    // 可能引发异常的代码
    Integer result = 10 / 0; // 这里会引发除以零异常
} catch (Exception e) {
    // 捕获异常并处理
    System.debug('捕获到异常:' + e.getMessage());
}

在上面的示例中,try 块中的代码尝试执行一个除法操作,但由于除数为零,会引发异常。然后,catch 块捕获这个异常,并使用 e.getMessage() 方法获取异常消息,然后将其输出到调试日志中。


try-catch 语句允许你指定捕获特定类型异常的代码块,以及如何处理这些异常。这使得你能够更精细地控制异常的处理流程。


3.4.3 常见异常类型

在 Salesforce Apex 中,有许多常见的异常类型,它们用于表示不同的运行时错误和问题。了解这些异常类型以及如何处理它们对于编写稳健的代码至关重要。下面是一些常见的异常类型及其说明:


1. System.NullPointerException(空指针异常)

描述:当尝试访问一个空对象的属性或调用其方法时引发。

示例:

Account acc = null;
String name = acc.Name; // 会引发空指针异常

2. System.QueryException(查询异常)

描述:当执行 SOQL 查询时,如果查询语法不正确或查询条件无效,将引发此异常。

示例:

List<Account> accounts = [SELECT Id FROM Acccount]; // 查询语法错误,会引发查询异常

3. System.DmlException(数据库操作异常)

描述:当执行数据库操作(如插入、更新、删除记录)时,如果操作失败或违反了数据完整性规则,将引发此异常。

示例:

try {
    insert new Contact(LastName = 'Doe');
} catch (System.DmlException e) {
    System.debug('捕获到数据库操作异常:' + e.getMessage());
}

4. System.MathException(数学异常)

描述:当执行数学运算(如除以零或计算无限大)时,将引发此异常。

示例:

Integer result = 10 / 0; // 会引发数学异常

5. System.LimitException(限制异常)

描述:当代码达到某些资源限制(如查询记录数、执行时间等)时,将引发此异常。

示例:

List<Account> accounts = [SELECT Id FROM Account LIMIT 10001]; // 超出查询记录数限制,会引发限制异常

了解这些常见异常类型有助于你更好地理解在什么情况下可能会出现异常,并能够编写相应的异常处理代码。在实际开发中,及时捕获和处理异常是确保应用程序稳定性和可靠性的关键步骤。


3.4.4 自定义异常类型

除了使用 Salesforce Apex 提供的内置异常类型外,你还可以创建自定义异常类型,以便更好地满足你的应用程序需求。自定义异常允许你在代码中定义特定于你的应用程序的异常,这些异常可以帮助你更好地识别和处理问题。下面是如何创建和使用自定义异常类型的示例:


创建自定义异常

要创建自定义异常,你需要创建一个继承自 Exception 类的新类。这个新类将成为你的自定义异常类型。例如:

public class MyCustomException extends Exception {
    public MyCustomException(String message) {
        super(message);
    }
}

上面的代码创建了一个名为 MyCustomException 的自定义异常类型,它继承自 Exception 类,并允许你传递异常消息作为构造函数参数。


抛出自定义异常

一旦你创建了自定义异常类型,你可以在代码中使用 throw 语句来抛出它。例如:

public class MyCustomExceptionDemo {
    public void doSomething() {
        // 在某些条件下,抛出自定义异常
        if (someCondition) {
            throw new MyCustomException('发生了自定义异常');
        }
    }
}

捕获自定义异常

在你的代码中,你可以使用 try-catch 块捕获和处理自定义异常,就像处理内置异常一样。例如:

public class MyCustomExceptionDemo {
    public void doSomething() {
        try {
            // 在某些条件下,抛出自定义异常
            if (someCondition) {
                throw new MyCustomException('发生了自定义异常');
            }
        } catch (MyCustomException e) {
            // 处理自定义异常
            System.debug('捕获到自定义异常:' + e.getMessage());
        }
    }
}

使用自定义异常可以使你的代码更清晰,更易于维护,因为你可以为不同的错误情况定义特定的异常类型,并在代码中明确处理它们。

关注 收藏