Salesforce: APEX : Exception handling and custom user defined exceptions

Varun   Varun 436 Views

Salesforce: APEX : Exception handling and custom user defined exceptions

Exception : Exception is an error which occurs at program run time, 

Always prepare your code for any unexpected error,

Examples: predefined salesforce exceptions : System.MathException , System.NullPointerException ( explore more )


A)    You tried to refer a null object during run time
        Account act = null;
        System.debug(act.Name);    // System.NullPointerException

B)    Tried to divide Integer by Zero
        Integer i= 1/0; // System.MathException 

//VisualforceException e

Mainly there are three keywords related to exception handling :
try, catch, finally

      // try block: where developer expect run time error 
     // try block
     System.debug('we are in try block');
     String name = null;
     Integer i = name.length();
catch(Exception e){
    // catch block: this is block where developer catch the error and handles accordingly
    System.debug('we are in catch block');
    // finally block: this is block which gets executed after previous steps 
    // executes always even if no exception thrown
    System.debug('we are in finally block');

//if you read debug log it will be as following
USER_DEBUG|[3]|DEBUG|we are in try block
EXCEPTION_THROWN|[5]|System.NullPointerException: Attempt to de-reference a null object
USER_DEBUG|[8]|DEBUG|we are in catch block
USER_DEBUG|[11]|DEBUG|we are in finally block

How to define your own custom exception with your own error message? 

public class CustomExceptionTest{
// define custom exception

class ClassOverFlowException extends Exception{

  override public String getMessage(){
  return 'Class is over filled with Students, no more students';

// extending custom exception class for Exception must end with "Exception" 
//else you get Compile Error: Invalid type

// declare custom exception variable
        ClassOverFlowException clsOverFlwException = null;

        public CustomExceptionTest(){
            // create object 
            clsOverFlwException = new ClassOverFlowException();


        Integer studentsLimit = 5; // define some custom limit for error condition
        List<String> studentNames = new String[]{'Rob','Bob','Tom','Kim'};   // define custom student names list 

        public Boolean addStudent(String newStudentName){ // perform add operation
            Boolean isOpsSuccesful = false;
                // check if list size    
                if(studentNames.size() >= studentsLimit) // if true // student list exceeding limit then 
                throw clsOverFlwException; // throw error

                isOpsSuccesful = true;

            catch(Exception e){
                isOpsSuccesful = false;
                System.debug('we are in catch block');
                System.debug('Ops successful');
                System.debug('Ops failed, ');
               return isOpsSuccesful ;


//execute following

CustomExceptionTest a = new CustomExceptionTest();
//current list size id 4  ('Rob','Bob','Tom','Kim') and limit is 5 so we are good
a.addStudent('John'); // success

//current list size id 5  and limit is 5 so we are not good
 a.addStudent('Mac');  // failure with message "Class is over filled with Students, no more students"