Some features in Java can be quite confusing for beginners.
Java is an oriented-object language, but encapsulation is made more difficult because the "protected" keyword not only allows access to child classes but grants the entire package access as well. Since small programs are written as one package, the "protected" keyword is functionally equivalent to "public".
Java's type system is not without flaws; while everything is supposed to be an object, the basic ("primitive") types such as integers, booleans and characters are not really objects and must be handled in a special way.
While Java provides a nice abstraction on top of memory management, pointers and other low-level features, it lacks some high-level features such as events, and has to make up for them by adding confusing features not found in other languages or in most theoretical approaches to programming like anonymous subclasses.