Explaining Java's error handling system