- Identificadores válidos
Los identificadores únicamente pueden empezar por letras, guión bajo(_) o símbolo de dólar($), además existen palabras reservadas propias del lenguaje y que no se pueden utilizar para ninguna declaración.

// Identificadores válidos
int _hola;
int $_prueba;
int s0yun$numero;
// Identificadores NO válidos
int 0zero;
int soy##numero;
String long;
- Declaración de clases
Las clases sólo pueden tener los accesos public o default (cuando no se pone nada delante del nombre de la clase). Y únicamente puede haber una clase pública por fichero Java, el nombre de la clase debe coincidir con el de la clase pública (si no hay clase pública, puede tener un nombre diferente a las clases default definidas).
Las clases también pueden ser definidas mediante modificadores como:
– final: No se puede extender de ella
– abstract: No puede ser instanciada, solo extender de ella
– strictfp: Los métodos de la clase seguirán las reglas del IEEE 754 para los números en coma flotante, solo se utiliza para clases o métodos, no para variables).
Pueden acompañar a cualquiera de los modificadores de acceso, pero no pueden combinarse entre ellos. Es decir, podemos combinar final strictfp pero no podemos establecer una clase como final abstract
Todas las clases, tienen al menos un constructor. Aunque no lo especifiquemos directamente, el compilador insertará el constructor por defecto de tipo public en caso de que nosotros no insertemos uno.
En la primera línea de cada constructor el compilador insertará una llamada al constructor (super()) por defecto. Si creamos una clase con un constructor que recibe algún argumento, el compilador ya no nos insertará ese constructor por defecto.
Las clases abstractas tienen constructor, aunque no se pueden instanciar (no se crean objetos mediante new).
Las interfaces únicamente declaran sus métodos sin implementarlos, son un tipo de clases totalmente abstractas: Implicitamente todos sus métodos son public abstract y sus variables public final static. Pueden heredar de otras interfaces mediante extends.
Si desde una clase no abstracta se implementa una interfaz, es obligatorio implementar todos los métodos de esa interfaz. Las clases abstractas no tienen la obligación de implementar los métodos de la interfaz, la primera clase no abstracta que extienda de dicha clase, deberá implementar todos los métodos.