There are eight primitive data types in Java including non-decimal types like byte, short, int, long and decimal types like float and double. The boolean type represents one bit of information with true and false values, while char represents a single 16-bit Unicode character. Reference data types are used to access objects by referencing variables created with class constructors. Java also supports literals to represent fixed values in code and escape sequences for strings and characters.