Variables are reserved memory locations that can store values based on their data type. There are two main types of variables in Java: primitive and reference. The eight primitive data types are byte, short, int, long, float, double, boolean and char. Each has a specific size and range of values it can hold. Variables must follow naming conventions like being meaningful and avoiding reserved words. Primitive types like int and double are commonly used for numeric values while boolean and char are used for true/false and character values respectively. Reference types represent objects and will be covered separately.