When can one be counted as a competent Java programmer?
Here are my benchmarks:
1) Understand the error messages related to PATH and CLASSPATH and can shoot the troubles. Understand error messages in the compiling process and get rid of them.
2) Know how to use JAVA API doc and other API doc. For example, after others have told you which library class you can use, you should be able to go through API doc and find the right methods.
3) After the archiect, lead developer, or somebody else figured out the solution for a problem, you can implement it.
4) After your code begins to function, you know how to handle bad inputs and exceptions.
5) Not be satisfied with your own code. Know how to refactor your code and make it compact and elegant.
Maybe my requirements are too strict. Some senior software engineers I know are far below my requirements. For instance, one of my developers has no idea to treat NullPointerException and NumberFormatException.