Capitulo 3 - Certificacion Java
Camilo Nova
CEOPara nombrar un metodo aplican las mismas reglas que para nombrar una variable.
Recordemos que por convencion las clases deben comenzar con una letra mayuscula, mientras que los metodos y las variables deben comenzar con una letra minuscula. Por convencion, no es obligacion.
Un metodo consiste de los siguientes elementos: nombre, parametros, argumentos, tipo de retorno y modificador de acceso. Los requeridos por obligacion son el nombre y el tipo de retorno.
Un elemento estatico es visible para todas las instancias de la clase, si una instancia hace un cambio a este, todas las demas son afectadas con dicho cambio.
Una variable estatica es inicializada cuando una clase es cargada, mientras que las demas son inicializadas cuando una instancia de la clase es creada.
El metodo estatico main() solo puede acceder a miembros estaticos de la clase o a instancias creadas dentro del mismo metodo.
***
Algunas veces he visto algo asi como:
static {
...aqui van varias expresiones...
}
Declarado como si fuese un metodo, alguien sabe sobre esto???
***
Ya encontre la respuesta, este codigo se ejecuta en tiempo de carga de la clase, se usa cuando se quiere hacer algo ANTES de que la clase misma sea instanciada. Es ejecutado UNA sola vez en la carga de la clase y nunca mas vuelve a ser ejecutado durante el tiempo de vida de la aplicacion.
Las reglas para declarar un metodo con parametros multiples son las siguientes:
-Solamente puede haber una lista de parametros variables declarada en el metodo.
-Si existen mas parametros la lista de parametros variables debe ser la ultima.
-La lista de parametros variables consiste de un tipo de dato seguido por ... y el nombre.
Una lista de parametros variables puede tener de 0 a n argumentos.
Estandar JavaBean:
-Las variables privadas de un JavaBean llamadas propiedades solo pueden ser accedidas por medio de los metodos get y set. La convencion para darle nombre a una propiedad es: La primera letra de la primera palabra debe ser en minuscula y luego la primera letra de la segunda palabra en mayuscula. porEjemploAsi.
-Cada propiedad no booleana tiene un metodo get que es usado para recuperar el valor de la propiedad. El nombre del metodo comienza con get seguido del nombre de la propiedad, con la primera letra de cada palabra en mayuscula, getPorEjemploAsi().
-Cada propiedad tiene un metodo set que es usado para determinar el valor de una propiedad. El nombre del metodo ser comienza con set seguido del nombre de la propiedad, con la primera letra de cada palabra en mayuscula, setPorEjemploAsi().
-Los metodos getter y setter deben ser publicos.
-Un metodo setter debe tener como tipo de retorno 'void' y debe tener un parametro que represente el mismo tipo de la propiedad correspondiente.
-Un metodo getter no tiene ningun tipo de parametro y su tipo de retorno corresponde con el mismo del metodo setter.
Los modificadores de acceso para una clase pueden ser:
de acceso: private, protected y public
otros: abstract, final y strictfp
Una clase anidada es una clase que es miembro de otra clase.
La clase anidada tiene acceso directo a los atributos y metodos de la clase que la anida.
Caracteristicas de las clases anidadas:
-Una clase anidada esta asociada con una instancia de su clase externa.
-A diferencia de una clase externa, una clase anidada tiene acceso ilimitado a los miembros de la clase externa, porque la clase anidada en si es un miembro mas de la clase externa.
-Asi como las variables estaticas y metodos de la clase externa, no es posible acceder directamente a los miembros estaticos de la clase externa desde la clase anidada.
-Debido a que una clase anidada es un miembro no estatico, es asociado solo con una instancia de su clase externa, no es posible definir un miembro estatico dentro de una clase anidada
-Una instancia de una clase anidada solo puede existir con una instancia de su clase externa, asi como los otros miembros no estaticos de la clase externa.
-Las clases anidadas pueden ser declaradas abstract o final, asi como cualquier otra clase y con el mismo significado.
-Los modificadores de acceso como public, private y protected pueden ser usados en clase anidadas asi como en los demas miembros de la clase externa y con el mismo significado.
-Cualquier clase anidada puede ser declarada en cualquier bloque de codigo como una clase o un metodo.
-Una clase anidada tiene acceso a cualquier variable local dentro de su rango definido.
Para instanciar una clase anidada que no es estatica se requiere que la clase externa este instanciada previamente asi:
MyClaseExterna mce = new MyClaseExterna();
MyClaseInterna mci = mce.new MyClaseInterna();
Si la clase anidada es estatica entonces se hace directamente, no es necesario que la clase externa este instanciada previamente
MyClaseInterna mci = new MyClaseExterna.MyClaseInterna();
Enum es una clase para definir constantes, puede tener metodos y variables como una clase normal.
Un Enum no puede ser declarado dentro de un metodo, solamente dentro de una clase o como una clase en si.
Se usa la palabra reservada 'enum' y no 'class' para declarar un Enum.
Asi como una clase comun, puede tener metodos, constructores y campos.
Cuando se compila el Enum se convierte en .class como cualquier otra clase.
NO es posible instanciar un Enum con el operador 'new'.
Los Enum NO participan en la jerarquia de clases, no pueden heredar ni ser heredados.
No se puede llamar directamente un constructor de un Enum.
Un Enum puede tener un metodo main() estatico.
Un Enum puede ser utilizado en una sentencia 'switch'.
Una subclase solo hereda los miembros no-privados de la superclase (los que no son declarados private). Creo que los final tampoco se heredan, alguien sabe??
Una clase solo puede heredar de otra. Esto es llamado herencia simple.
Cuando se instancia un objeto (Objeto c = new Objeto()) se ejecuta en orden lo siguiente:
1. Ubicar espacio en memoria para la instancia
2. Inicializar las variables de instancia (por fuera de los metodos) de la clase.
3. Ejecuta el codigo del constructor.
Un constructor puede ser llamado desde cualquier otra clase con el operador 'new'. Tambien puede ser llamado como si fuese un metodo desde otro constructor de la misma clase.
Desde un constructor de la clase se puede llamar otro constructor de la misma clase o el constructor de la superclase. Para llamar un constructor de la clase se usa la palabra reservada 'this' y para llamar uno de la superclase se utiliza 'super', cualquiera que se utilize debe estar en la primera linea del constructor.
-Si no se incluye ni 'this' ni 'super', el compilador hace un llamado a 'super()' al comienzo del constructor.
-Si se incluye un 'super' el compilador no hace ningun llamado adicional a 'super()'.
-Si son incluidas llamadas a 'this' entre varios constructores, al final de la cadena se debe llamar a 'super()' porque de lo contrario el compilador hace el llamado automaticamente.
-Un constructor tiene el mismo nombre de la clase y no especifica tipo de retorno.
-Una clase puede tener mas de un constructor, si el programador no define un constructor el compilador por defecto define uno sin argumentos.
-Un constructor puede tener cero o mas parametros.
-Desde fuera de la clase el constructor debe ser llamado con 'new', dentro de la clase se puede usar 'this' o 'super'.
-A diferencia de los otros metodos, los constructores no son heredables, si una subclase no define constructor y la subclase si, el compilador de igual forma define uno por defecto sin argumentos.
-Si no hay llamado a 'super()' el compilador lo hace por defecto siempre.
Interfaces.
Todos los metodos declarados en una interfaz son implicitamente publicos, las variables son como si fueran constantes de tipo public, final y static.
Una clase puede heredar 'extends' de otra clase, solamente una, y puede implementar 'implements' varias interfaces.
Una interfaz puede extender de otra interfaz usando 'extends'.
Una interfaz no puede implementar ni otras interfaces ni clases.
En la sintaxis de la declaracion de la clase, el 'extends' precede a 'implements'.
**Me sigo preguntando: para que sirve strictfp???
Una clase no puede extender 'extends' de una interfaz, debe implementarla 'implements'
Una interfaz SI puede extender de multiples interfaces "interface A extends A,B,C"
Written by Camilo Nova
As the Axiacore CEO, Camilo writes about the intersection of technology, design, and business. With a strategic mindset and a deep understanding of the industry, he is dedicated to helping companies grow.