I think it's because of RMI. Any arguments must be serializable to send them from the client to the server. Any return value must be serializable to send it back to the client. But if an exception is thrown that too must be sent to the client. Hence it must be serializable.