Diseñando Métodos: Java
Todo programa interesante en Java que hemos visto tenía un método main(). También puedes escribir otros métodos. Por ejemplo, puedes escribir un método básico para tomar una siesta, como se muestra en la figura a continuación:
Esto se conoce como una declaración de método, la cual especifica toda la información necesaria para llamar al método. Tiene varias partes, y las cubriremos una por una en más detalle. Dos de las partes, el nombre del método y la lista de parámetros, se llaman la firma del método.
La tabla a continuación es una breve referencia de los elementos de una declaración de método. No te preocupes si parece mucha información; cuando termines de leer este artículo, todo tendrá sentido.
Para llamar a este método, simplemente escribe su nombre, seguido de un único valor int entre paréntesis: nap(10);
Comencemos echando un vistazo a cada una de las partes de un método básico.
Modificadores de Acceso
Java ofrece cuatro alternativas de modificadores de acceso:
private El modificador privado significa que el método solo puede ser llamado desde dentro de la misma clase.
Default (Package-Private) Access Con acceso predeterminado, el método solo puede ser llamado por clases del mismo paquete. Esto es complicado porque no existe una palabra clave para el acceso predeterminado. Simplemente omites el modificador de acceso.
protected El modificador de acceso protected significa que el método solo puede ser llamado por clases en el mismo paquete o por subclases.
public El modificador de acceso public significa que el método puede ser llamado desde cualquier clase.
Veremos ejemplos prácticos mientras revisamos cada uno de los elementos del método en esta sección. Asegúrate de entender por qué cada una de estas es una declaración de método válida o inválida. Presta atención al modificador de acceso y cómo puedes descubrir qué está mal con aquellos que no compilan cuando se insertan en una clase:
El método walk1() es una declaración válida con acceso público. El método walk4() es una declaración válida con acceso predeterminado. El método walk2() no compila porque "default" no es un modificador de acceso válido. El método walk3() no compila porque el modificador de acceso está especificado después del tipo de retorno.
Especificadores Opcionales
A diferencia de los modificadores de acceso, puedes tener múltiples especificadores en el mismo método (aunque no todas las combinaciones son legales). Cuando esto ocurre, puedes especificarlos en cualquier orden. Y dado que estos especificadores son opcionales, tienes permiso para no usar ninguno. Esto significa que puedes tener cero o más especificadores en una declaración de método.
static El modificador static se usa para métodos de clase.
abstract El modificador abstract se usa cuando no se proporciona el cuerpo del método.
final El modificador final se usa cuando no se permite que un método sea sobrescrito por una subclase.
synchronized El modificador synchronized se usa con código multihilo.
native El modificador native se usa cuando se interactúa con código escrito en otro lenguaje, como C++.
strictfp El modificador strictfp se usa para realizar cálculos portátiles de punto flotante.
De nuevo, por ahora, solo enfócate en la sintaxis. ¿Sabes por qué estos códigos compilan o no compilan?
El método walk1() es una declaración válida sin especificador opcional. Esto está bien, al fin y al cabo, es opcional. El método walk2() es una declaración válida, con "final" como especificador opcional. Los métodos walk3() y walk4() son declaraciones válidas con ambos "static" y "final" como especificadores opcionales. El orden de estos especificadores no importa. El método walk5() no compila porque "modifier" no es un especificador opcional válido. El método walk6() no compila porque el especificador opcional está declarado después del tipo de retorno. El método walk7() compila. Es extraño, pero Java permite que el especificador opcional aparezca antes del modificador de acceso.
Tipo de Retorno
El siguiente elemento en una declaración de método es el tipo de retorno. El tipo de retorno puede ser un tipo real de Java, como String ou int. Si no hay ningún tipo de retorno, se utilizará la palabra clave void será usada. Este tipo de retorno especial proviene del inglés: void significa "vacío". En Java, significa que no hay ningún tipo ahí.
Al verificar los tipos de retorno, también debes revisar el cuerpo del método. Los métodos con un tipo de retorno diferente a void están obligados a tener una declaración return dentro del cuerpo del método. Esta instrucción return debe incluir la primitiva o el objeto que se va a devolver. Los métodos que tienen un tipo de retorno void pueden tener una instrucción return sin valor de retorno o pueden omitir completamente la instrucción return.
¿Listo para algunos ejemplos? ¿Puedes explicar por qué estos métodos compilan o no?
Como el tipo de retorno del método walk1() es void, la instrucción return es opcional.
El método walk2 () muestra la instrucción de retorno opcional que correctamente no retorna nada. El método walk3 () es una declaración válida con un tipo de retorno String y una instrucción return que devuelve un String. El método walk4 () no compila porque falta la declaración de retorno. El método walk5 () no compila porque falta el tipo de retorno. El método walk6 () no compila porque intenta usar dos tipos de retorno. Solo puedes tener un tipo de retorno.
El método walk7() es un poco complicado. Hay una declaración de retorno, pero no siempre se ejecuta. Si a es 6, la instrucción return no se ejecutará. Como siempre se necesita devolver un String el compilador se queja. Al devolver un valor, debe ser asignable al tipo de retorno. Imagina que existe una variable local de ese tipo a la cual se le asigna antes de ser devuelta. ¿Puedes pensar en cómo agregar una línea de código con una variable local en estos dos métodos?
Es un ejercicio bastante mecánico. Simplemente agregas una línea con una variable local. El tipo de la variable local coincide con el tipo de retorno del método. Luego, devuelves esa variable local en lugar del valor directamente:
Esto muestra claramente por qué no puedes devolver un primitivo long en un método que devuelve un int. No puedes colocar un long en una variable int, por lo que tampoco puedes devolverlo directamente.
Nombre de Método
Los nombres de los métodos siguen las mismas reglas que practicamos con los nombres de variables en "Construcción de Bloques en Java". Para repasar, un identificador solo puede contener letras, números, $ ou _. Además, el primer carácter no puede ser un número y no se permiten palabras reservadas. Finalmente, no se permite un solo carácter subrayado. Por convención, los métodos comienzan con una letra minúscula, pero no están obligados a hacerlo. Veamos algunos ejemplos:
El método walk1() es una declaración válida con un nombre tradicional. El método 2walk() no compila porque los identificadores no pueden comenzar con números. El método walk3() no compila porque el nombre del método está antes del tipo de retorno. El método Walk_$() es una declaración válida. Aunque ciertamente no es una buena práctica iniciar un nombre de método con letra mayúscula y terminar con puntuación, es válido. El método _ no está permitido, ya que consiste en un solo subrayado. La última línea de código no compila porque falta el nombre del método.
Lista de Parámetros
Aunque la lista de parámetros es obligatoria, no necesita contener ningún parámetro. Esto significa que puedes tener solo un par de paréntesis vacíos después del nombre del método, como sigue:
void nap() {}
Si tienes varios parámetros, sepáralos con una coma. Hay algunas reglas para la lista de parámetros que verás cuando abordemos varargs. Por ahora, practiquemos observando la declaración del método con parámetros "regulares":
El método walk1() es una declaración válida sin ningún parámetro. El método walk2() no compila porque faltan los paréntesis alrededor de la lista de parámetros. El método walk3 () es una declaración válida con un parámetro. El método walk4() no compila porque los parámetros están separados por un punto y coma en lugar de una coma. Los puntos y comas se usan para separar instrucciones, no listas de parámetros. El método walk5() es una declaración válida con dos parámetros.
Lista de Excepciones Opcionales
En Java, el código puede indicar que algo salió mal lanzando una excepción. Por ahora, solo necesitas saber que es opcional y dónde se coloca en la declaración del método. Por ejemplo, InterruptedException es un tipo de excepción. Puedes listar tantos tipos de excepciones como quieras en esta cláusula, separados por comas. Aquí tienes un ejemplo:
Puede que te preguntes qué hacen los métodos con estas excepciones. El método que llama puede lanzar las mismas excepciones o manejarlas.
Cuerpo del Método
La parte final de una declaración de método es el cuerpo del método (excepto para métodos abstractos e interfaces, pero no necesitas saber sobre ellos aún). Un cuerpo de método es simplemente un bloque de código. Tiene llaves que contienen cero o más instrucciones en Java. Hemos pasado varios capítulos examinando las instrucciones en Java hasta ahora, por lo que deberías encontrar fácil entender por qué estos ejemplos compilan o no:
public void walk1() {}
public void walk2() // No compila
public void walk3 (int a) { int name = 5; }
El método walk1() es una declaración válida con un cuerpo de método vacío. El walk2(), no compila porque faltan las llaves alrededor del cuerpo del método vacío.
El método walk3 () es una declaración válida con una instrucción en el cuerpo del método.
Ya pasaste por lo básico de identificar declaraciones de métodos correctas e incorrectas.
¡Ahora puedes profundizar en más detalles!
Listopro Community da la bienvenida a todas las razas, etnias, nacionalidades, credos, géneros, orientaciones, puntos de vista e ideologías, siempre y cuando promuevan la diversidad, la equidad, la inclusión y el crecimiento profesional de los profesionales en tecnología.