Honestly, Java is the best thing that has happened to developers. The write-once, run-mostly-everywhere language is simply awesome. It is undoubtedly very stable and ubiquitous. However, all said and done, Java is not 100 per cent perfect. It does come with its own set of problems (not major, we say) that can be quite frustrating at the end of the day!
Here are 10 things we absolutely hate about Java:
1. Long CamelCase names
Gluing together long sentences in the form of variable names by capitalising the first letters might add a bit of self-documentation to the code. Many developers would agree to the fact, however some are even of the opinion that Long CamelCase names can be quite taxing. Take for instance, i // holds the interest rate before taxes as per regulation 43 is any day easier to read than interestRateHoldingVariableAdjusted ForTaxesAsDefinedByRegulation43, right?
2. Punctuation
The one thing that distinctly separates Java from others is the rampant availability of punctuation like curly brackets, semicolons, and parentheses. Although punctuation lovers might beg to disagree, most programmers are rather not very fond punctuation abundancy. They on the contrary see it as visual noise that in turn leads to a disconnect between the developer and the compiler.
3. Open source confusion
Ok, be honest, is Java open source or not? Of course developers might contend that the JREs and JDKs are freely available, but does that mean your safe? Developers around the globe live a under a constant threat of anxiety peaking out from countless imaginative legal repurcussions when using Java.
4. The Java thread pig farm
Node.js users constantly ridicule Java server platform saying that the Java thread factory is one big pig farm that adds 2MB of additional fat to the server RAM profile each and every time someone clicks on any supported Web link. During its initial days, Java threads were extremely lightweight when comapared to competing solutions.

5. Intolerably slow startup times

No one question the fact that Java apps run fairly smoothly upon start, what is painstaking is the start up. It’s exceptionally slow, a considerable issue for developers. For instance, Android app creators know and constantly fret about how slowly the simulator code runs on the desktop.

6. Endless checking for null pointers
This is perhaps one of the most frustrating aspects of Java. It requires countless ‘if’ statements to check if variables ended up null. Well, if they did not, the entire Java thread would eventually crash with NullPointerExceptions.
7. Object creation overhead
Tossing everything into an object might seem ‘effective’, however, those who do it know how slow the process of creating a Java object can be. Furthermore, the process is expensive. Notably most programmers who aspire to speed up coding more often than not tend to avoid the object-oriented model.
8. Primitive wrappers to use data structures
The Java data structures are pretty neat, however the only downside is that they require programmers to wrap their basic values in objects to use them. This turns a four-byte ‘int’ into a big, fat object.
9. Strings are big, need overhead, and are final
Strings are objects that can’t be changed. Its highly advisable programmers get them right the first time. In case you go wrong somewhere, you will have to create an entirely new object and copy it all over.
10. No global variables
Absence of global variables entails in programmers creating Global class and fill it with static variables. Meanwhile, others build singleton objects, however there are serious issues about efficiency here.