To effectively describe the nature of data that can be represented in a Java
program and the operations to manipulate such data, we will use the concept of
**data type**.

A data type is characterized in mathematical terms by:

- A
*domain*, i.e., a set of possible values (e.g., integer numbers, real numbers, etc.); - A set of
*operations*on the elements of the domain (e.g., sum, multiplications, etc.); - A set of
*literals*, denoting mathematical constants (e.g., 23).

Such a characterization allows us to identify in a precise way the values that we intend to represent and the operations to manipulate them.