Java (1.0) had checked exceptions, if you threw something you had to say what it was in your interface. It Seemed like a good, elegant idea: if I use your API I know exactly what exceptions I need to watch for. It works well in trivial programs, but in anything larger it fails because adding a new exception to something core requires thousands of modifications to the API specification for an exception that I will catch only in a few places.
I think Java has made some improvements on this since 1995, but I haven't done java since then so I don't know what.
Huh? Checked exceptions are great tools for API and are still in use - especially in large systems. They fail within small modules, because they are less practicall in that context.
I think Java has made some improvements on this since 1995, but I haven't done java since then so I don't know what.