Java has two types of data types - primitive and non-primitive. Primitive types include integer, character, boolean, and floating point types like float and double which are used to represent numbers with decimals. Non-primitive types include classes, interfaces, and arrays. A variable in Java is a memory location that can store a value, and there are different types of variables including instance variables, class variables, local variables, and parameters. Variables are declared with a data type and name, and can be initialized with a value.