You are on page 1of 4

5.4.2.

Definicin de mtodos
La sintaxis general para la definicin de mtodos es la siguiente: [ModificadoresDeMtodos] Tipo NombreFuncin ([ListaDeParmetros]) [throws ListaExcepciones]

5.4.2.1 Modificadores de mtodo


Al igual que los atributos, un mtodo puede tener ms de un modificador. Se especifican uno detrs de otro, separados por un espacio en blanco.

static

De la misma manera que entre los atributos se diferenciaban los atributos de clase y los atributos de objeto o instancia, en el caso de los mtodos es posible tambin hablar de mtodos de clase y de mtodos de instancia u objeto. Cuando a un mtodo se le especifica el modificador static, se est indicando que ese mtodo es un mtodo de clase (no de objeto) y por tanto, no es necesario crear un objeto de esa clase para poder llamar a ese mtodo. Los mtodos de clase (static) nicamente pueden acceder a sus atributos de clase (static) y nunca a los atributos de objeto (no static). Ejemplo 1: class Enteros{ int x; static int x() { return x; //ERROR! x no es static } static void setX(int nuevaX){ x = nuevaX; //ERROR! x no es static } } Ejemplo 2: class Enteros{ static int x; static int getX(){ return x; } static void setX(int nuevaX){ x = nuevaX; } } Los mtodos de clase son profusamente tratados en el mdulo 6 por lo que por el momento no profundizaremos ms en su empleo y utilidad.

abstract

Los mtodos abstract se declaran en las clases abstractas, es decir, si una clase tiene un mtodo abstract, la clase ha de declararse obligatoriamente como abstract.

Cuando se declara un mtodo como abstract, no se implementa el cuerpo del mtodo, slo se escribe la declaracin y se termina con un ; (equivale a la declaracin del prototipo en C). Las clases que se declaran como derivadas de una clase abstract deben implementar todos los mtodos abstract, a no ser, que tambin quieran declararse como clases abstract. Una clase abstract no puede ser instanciada, nicamente sirve para ser utilizada como superclase de otras clases. El estudio de las clases y mtodos abstractos se completar a lo largo del mdulo 7, en primera aproximacin lo nico que nos interesa es conocer la existencia de este modificador y alguna de las consecuencia de su empleo.

final

Los mtodos de una clase que se declaran de tipo final no pueden ser redefinidos por las subclases. Esto quiere decir que un mtodo no puede ser abstract y final a la vez

native

Los mtodos native, son mtodos que se encuentran escritos en lenguajes de programacin distintos a Java, por ejemplo C.

synchronized

Equivale al modificador de atributo volatile. Debido a que en Java se puede programar para que haya varios hilos de ejecucin a la vez (en paralelo), podra llegar a darse el caso de que varios mtodos accedieran a la vez a los mismos datos, intentando modificarlos. Para evitar errores de ejecucin, los mtodos que acceden a datos comunes en hilos distintos, se declaran como synchronized. As, si un hilo de ejecucin est ejecutando un mtodo synchronized, otro hilo de ejecucin no podra ejecutar ese mismo mtodo. Tendra que esperar a que se terminara la ejecucin del otro hilo para poder empezar l.

5.4.2.2 Tipo:
Como en C, se trata del tipo de dato que devuelve el mtodo.

5.4.2.3 Lista de parmetros:


Como en C, se trata de una serie de declaraciones de variables, que pueden ser tanto de tipo primitivo como objetos, separadas por comas. Sern las variables que se usarn para recoger los parmetros que se pasan al mtodo cuando es llamado.

El estudio de mtodos tiene lugar durante el mdulo 6 por lo que os remitimos al mismo para ampliar la informacin que aqu tratamos de recoger de forma escueta.

5.4.2.4 Lista de excepciones:


Todos los mtodos pueden generar condiciones de error, condiciones de error que en determinadas circunstancias en Java denominaremos excepciones. Java incluye mecanismos que permiten tratar la eventual aparicin de estas excepciones durante el tiempo de ejecucin

del programa bien dentro del propio mtodo que las genera, o bien con posterioridad en alguno de los mtodos que invoc al mtodo que arroj esa excepcin. Para recurrir a esta segunda opcin, es necesario declarar de forma explcita todas aquellas excepciones que un mtodo es susceptible de producir y que no sern tratadas en el mismo. Para ello en la declaracin del mtodo los nombres de stas se incluyen separadas por comas, despus de la palabra reservada throws. Como hemos dicho esas excepciones no tratadas por el mtodo, debern ser tratadas por el mtodo que llame al mtodo generador de excepciones. Por ejemplo, el mtodo main() de una clase ejecutable Standalone podra llamar a un mtodo que genere una excepcin y no la trate; entonces, sera el mtodo main() el encargado de tratar la excepcin, si no, ocurre un error.

Las excepciones sern tratadas durante el mdulo 11 de este curso lo que dar pie a que podamos estudiar su funcionamiento, su empleo y los motivos para recurrir a este mecanismo.

5.4.2.5 Cuerpo del mtodo:


El cuerpo del mtodo contiene la implementacin del mismo y se codifica entre las llaves del mtodo. La nica excepcin a esta regla la tenemos en el caso de los mtodos abstract. Sin embargo debemos tener en cuenta que un mtodo puede tener el cuerpo vaco. Eso quiere decir que entre las llaves del mtodo no va a haber ninguna instruccin, y que el mtodo no har nada, pero no podr ser abstract, porque aunque vaco, se considera que tiene cuerpo.

No es lo mismo un mtodo sin implementar que un mtodo con el cuerpo vaco

La forma de especificar la salida del mtodo es mediante la palabra reservada return. Si el tipo de dato devuelto del mtodo ha sido declarado void, entonces nicamente se sale del cuerpo del mtodo mediante la instruccin return; Si en la declaracin de la cabecera del mtodo se ha declarado un tipo de dato devuelto por el mismo, entonces se devolver el valor correspondiente mediante return seguido de una expresin cuyo resultado es del mismo tipo que el declarado. Dentro del cuerpo pueden declararse tambin variables locales. Si existen en un mtodo variables locales o parmetros con el mismo nombre que atributos de la clase, para hacer referencia a esos atributos de la clase, al nombre se le antepone la palabra reservada this seguida de un punto (.). Por eso a menudo es habitual leer que la palabra this identifica al objeto actual. class numEntero { int numero; void asignaNumero(int numero) { this.numero=numero; } }

class numEntero { int numero; void asignaNumero(int numero) { numero=numero; //AMBIGUO } }

Puede haber coincidencia de identificadores en un mtodo, entre variables locales y atributos, y entre parmetros y atributos, en cuyo caso ya hemos visto que se usa this, pero nunca variables locales y parmetros de un mismo mtodo.

Cuando una clase deriva de otra, la clase derivada puede redefinir el cuerpo de los mtodos que ha heredado de la clase superior. As, cuando llame a un mtodo que ha sido redefinido, se ejecutar el nuevo cdigo y no el indicado en la superclase. Si lo que se quiere es ejecutar el cdigo de la superclase, en la llamada, al nombre del mtodo se le antepone la palabra reservada super seguida de un punto (.). Se dice que super identifica a la superclase de la que deriva una clase.

Ejemplo: class Padre { String variable; void metodo(){ variable = Padre; } } /*Hija deriva de Padre*/ class Hija extends Padre { String variable;//Hija tiene un atributo variable, diferente del atributo variable heredado de Padre void metodo() { //Hija tiene un mtodo metodo, diferente del mtodo metodo heredado de Padre variable = Hija; //Se refiere a variable de Hija super.metodo(); System.out.println(variable); //En pantalla: Hija System.out.println(super.variable);//En pantalla: Padre } } Tal como se ve en el ejemplo anterior, las clases que derivan de otras no slo pueden redefinir los mtodos de su clase superior, sino que tambin pueden tener atributos que tengan el mismo nombre. Habr que tener cuidado con qu atributo (si el de la superclase o el de la clase derivada) es el que se quiere acceder en cada momento. En cualquier caso la herencia en Java ser tratada en el mdulo 7 en el que se estudiarn sus aspectos fundamentales.

You might also like