// Custom exception class extending Exception

class CustomException extends Exception {

    public CustomException(String message) {

        super(message);

    }

}

// Custom error class extending Error

class CustomError extends Error {

    public CustomError(String message) {

        super(message);

    }

}

public class ThrowableAndExceptionDemo {

    public static void main(String[] args) {

        try {

            // Triggering custom exception

            triggerCustomException();

        } catch (CustomException e) {

            System.out.println("Caught custom exception: " + e.getMessage());

        } catch (Exception e) {

            System.out.println("Caught general exception: " + e.getMessage());

        }

        try {

            // Triggering custom error

            triggerCustomError();

        } catch (CustomError e) {

            System.out.println("Caught custom error: " + e.getMessage());

        } catch (Error e) {

            System.out.println("Caught general error: " + e.getMessage());

        }

        System.out.println("Program completed.");

    }

    // Method to trigger custom exception

    public static void triggerCustomException() throws CustomException {

        throw new CustomException("This is a custom exception.");

    }

    // Method to trigger custom error

    public static void triggerCustomError() {

        throw new CustomError("This is a custom error.");

    }

}