For example, you can ask whether a Java program, run with infinite memory, will eventually halt. For any particular Java program, there's obviously an algorithm that says whether it halts or not. The algorithm is a single statement, which says either "yes" or "no". Might be hard to figure out which is the correct algorithm, but the Java program is fixed so the algorithm is definitely one of the two.
However, there is no algorithm which can take an arbitrary Java program as input and determine whether it will halt. It's about the class of all possible programs.
[1] https://en.wikipedia.org/wiki/Undecidable_problem
[2] https://en.wikipedia.org/wiki/Independence_(mathematical_log...
This isn't true.
In general, if a program hasn't halted yet you don't know if it will.
In particular, consider the Collatz conjecture. You can't even tell if your Java implementation of it will halt for a particular input, until it does.
We don't _know_ which algorithm it is, but that's not relevant to the definition of undecidability, which only requires that the algorithm exist.
This is slightly bizarre now I think about it: the definition of decidability allows the algorithm selection to be undecidable!