In java you need to specify what your function can throw and if it tries to throw something that it has not specified as being able to throw, then your program won't compile.
Agreed, checked exceptions solve the same problem, but having separate control flow mechanism for certain kinds of data still seems subpar. Return values can solve the same problems and are more general.