Java is a full blown Object Oriented language. Everything in Java is an object (apart from the fundamental numeric data types, and even these have "wrapper" classes to allow them to act as objects!). It is not possible to write procedural code in Java - you must use OO.
Java is very strongly typed. Unlike C or C++, you cannot force invalid assignments etc. Even though there is a "cast" keyword, it can only be used to move up and down an inheritance branch.
There are no pointers, array bounds are checked at run-time. This prevents nearly all of the crashes that are so common in C and C++.