https://medium.com/@jayram_manale/understanding-exceptions-in-java-a-complete-guide-to-error-handling-d644ade63d7d