I tell you what the main flaw in Java is: it is not functional.
I think this is far from the greatest flaw in java.
The greatest flaw with java ( & programming languages in general) is that they do not do what we want them to do. Basically all bugs are a result of programs not being able to figure out what to do in states that we haven't accounted for.
Wouldn't it be great if there were not even a possibility of getting a NullPointerException?