A java exception can be thrown only in the following three scenarios:
(1) An abnormal execution condition was synchronously detected by the Java virtual machine.
• When evaluation of an expression violates the normal semantics (Example: an integer divide by zero)
• An error occurs in loading or linking part of the program
• When limitation on a resource is exceeded (Example: using too much memory)
(2) A throw statement was executed.
(3) An asynchronous exception occurred.
• The stop method (deprecated) of class Thread was invoked
• An internal error has occurred in the java virtual machine