https://dotnet.guide/developer/java/exception-handling-throw-and-throws.html