1. Clases:
- Un archivo java (archivo que contiene código java) puede contener la definición de una o más clases (class), pero sólo una de ellas puede ser pública (tener el modificador de acceso public), el resto de ellas deben tener el modificador default.
- El nombre del archivo java debe de ser el mismo nombre de la clase pública que contiene y preferentemente o por convención debe iniciar con mayúscula.
- Una clase puede tener, además de los modificadores de acceso public y default, los modificadores de final, abstract y strictfp. Los modificadores final y abstract no deben ir juntos, se especifica uno u otro. sctrictfp puede combinarse con cualquiera.
- Una clase declarada abstract no puede ser instanciada.
- Los miembros de una clase, es decir sus métodos y/o propiedades, pueden tener cuatro modificadores de acceso: public, protected, default y private.
- Las propiedades o atributos de una clase siempre son inicializados implícitamente a sus valores por omisión.
- Una clase sólo puede heredar de una sola clase (extends) , pero puede implementar (implements) de varias interfaces. Una clase heredada tiene acceso sólo a los métodos y atributos declarados como public y protected de la clase que se hereda y únicamente tendrá acceso a los métodos y atributos declarados como default, si la clase heredada está en el mismo paquete.
- Una interface sólo declara sus métodos, no los implementa (no contienen código) y son, por omisión, public, static y final. En una interface se pueden declarar constantes con los modificadores public, static y final. Las interfaces pueden heredar de varias intefaces (llamado herencia múltiple) utilizando extends.
- Si una clase normal implementa una interface, esta clase debe implementar todos los métodos de dicha interface. Si la clase que implementa una interface es abstracta, no es obligatorio implementar dichos métodos. Sin emargo la clase que extienda de la clase abstracta debe implementar todos lo métodos tanto los abstractos .
- Toda clase tiene un constructor, aún las abstractas. Si en la clase no se implementa el compilador inserta uno, por defecto el cosntructor de la superclase. Si se implementa en la clase, este constructor por defecto no es insertado. Un constructor siempre tiene el mismo nombre que la clase. El constructor no regresa valores. Sólo se puede llamar o invocar un constructor dentro de otro constructor, no desde métodos.
- Una clase interna es la que se definen o declaran dentro de otra clase. La clase externa tiene acceso a al interna instanciándola, la interna tiene acceso a todos los miembros de la extrena, aún a los privados.Para acceder a una clase interna desde otra clase, se debe anteponer el nombre de la clase y la clase interna a lo smetodos y propiedades. Las clases también pueden definirse dentro de un método de una clase, ésta clase interna no puede acceder a los miembros de la clase externa, sólo a los declarados con final.
- Las clases internas anónimas se definen dentro de la instanciación de una clase.
- Las clases internas estáticas se definen declarándolas static, y sólo tienen acceso a los miembros estáticos de la clase contenedora.
- Java organiza las clases en paquetes (package). Esos paquetes son accesados utilizando la palabra o estatuto import. Si una clase pertenece a un paquete, la palabra package debe ser la primera linea de código en la clase, antes de cualquier estatuto import o declaración de la clase (class). Si no pertenece a algún paquete y necesita accesar a un paquete, la primera línea en el archivo de la clase debe ser el estatuto import. Si la clase no pertenece a ningún paquete y no accesa a otros paquetes, la primera línea de archivo java debe contener la declaración de la clase (class).
- Importación estática se usa para poder llamar los miembros estáticos de una clase directamente sin necesidad de anteponer el nombre de la clase. Se declara de la siguiente forma:
import static paquete.Clase.*;
donde paquete es el paquete (package) donde se encuentra la clase y Clase es el nombre de la clase con miembros (métodos o propiedades) estáticos (static).
2. Modificadores:
- Los modificadores de acceso, en orden de restricción mayor a menor, son 4: public (público) es el menos restrictivo, permite el acceso desde cualquier paquete; protected (protegido) permite el acceso desde el mismo paquete y desde subclases de la clase; default (por omisión) sólo permite acceso desde clases del mismo paquete y, por último, private (privado) sólo permite el acceso desde la misma clase. El modificador default no se escribe, se toma implícitamente o por omisión, si no se especifica alguno de los otros tres modificadores.
- El modificador (no de acceso) final, a nivel de clase, especifica que otras clases no se pueden extender (ser subclase) de ésta clase. A nivel propiedad o variable de clase, indica que la variable sólo pude ser asignada una vez, sin embargo, si la variable apunta a un objeto, los atributos de ese objeto sí pueden ser cambiados, pero la variable siempre referencía al mismo objecto. A nivel método, final, indica que el método no puede ser sobreescrito. Una interface no pude ser declarada final.
- El modificador (no de acceso) abstract sólo puede ser especificado a nivel clase y a nivel método, una variable no pude declararse abstract. Una interface también puede declararse abstract. A nivel clase, abstract especifica que la clase no puede ser instanciada (no se pueden crear objetos de ella). El compilador obliga a declarar abstracta a una clase si esta tiene métodos abstractos. Un método declarado abstracto no s debe implementar (escribir código dentro de él). La clase que se hereda de una clase abstracta debe implementar los método abstractos de la clase padre, a menos que la clase se declare también abstracta.
- El modificador static en la declaración de un método o atributo de la clase indica que ese atributo o método es de clase, es decir, que el valor del atributo y/o el método, será compartida entre todas las instancias u objetos creadas de esa clase.
- strictfp indica que los métodos de la clase siguen las reglas del IEEE 745 para los números de punto flotante si se especifica a nivel clase. Si se especifica al declarar un método, sólo se aplica a ese método.
3. Lenguaje:
- Los identificadores en java pueden comenzar solamente por una letra, un guión bajo o el signo de pesos. No deben comenzar con números. Los identificadores son los nombres que se les da a las variables, clases y métodos. Después del primer caracter, son válidos cualquier letra, número, guión bajo y signos de moneda. No se pueden utilizar keywords (palabras reservadas) de java como un identificador. Los identificadores son sensistivo a mayúsculas y minúsculas.
- Los keywords son palabras reservadas de java. no se pueden usar para delcarar o nombrar ninguna clase, variable o método. Las keywords son: abstract, assert, boolean, break, byte, case, catch, char, class, const, continue, default, do, double, else, enum, extends, final, finally, float, for, goto, if, implements, import, instanceof, int, interface, long, native, new, package, private, protected, public, return, short, static, strictfp, super, switch, synchornized, this, throw, throws, transient, try, void, volatile, while. goto no se usa.
- Toda variable declarada dentro de los métodos debe ser inicializada explícitamente, si no el compilador marcará error. Las constantes se definen con el modificador final.
- Las enumeraciones se declaran con la palabra enum. Sólo permiten el modificador de acceso public y default. Pueden ser declaradas como clase independiente o dentro de una clase, pero jamás dentro del un método de una clase. Por convención los elementos de la enum se escriben con mayúsculas.
- Hay algunos métodos que aceptan un número variable de argumentos y no argumentos fijos, también llamados argumentos variables. Se utiliza poniendo entre lso paréntesis del método el tipo de dato, tres puntos (…) y por último el nombre del arreglo (array) que contrendrá las variables: void nombreMetodo (int … nombreArreglo) { }. Sólo puede aceptar un argumento variable y se puede combinar con otros argumentos, siempre y cuando el argumento variable se especifique al final de la lista.