Java - Métodos
Un método Java es una colección de declaraciones que se agrupan para realizar una operación. Cuando llamas al System.out.println() método, por ejemplo, el sistema en realidad ejecuta varias declaraciones para mostrar un mensaje en la consola.
Ahora aprenderá a crear sus propios métodos con o sin valores de retorno, a invocar un método con o sin parámetros y a aplicar la abstracción de métodos en el diseño del programa.
Método de creación
Considerando el siguiente ejemplo para explicar la sintaxis de un método:
Syntax
public static int methodName(int a, int b) {
// body
}
Aquí,
public static - modificador
int - tipo de retorno
methodName - nombre del método
a, b - parámetros formales
int a, int b - lista de parámetros
La definición de método consta de un encabezado de método y un cuerpo de método. Lo mismo se muestra en la siguiente sintaxis:
Syntax
modifier returnType nameOfMethod (Parameter List) {
// method body
}
La sintaxis que se muestra arriba incluye:
modifier - Define el tipo de acceso del método y su uso es opcional.
returnType - El método puede devolver un valor.
nameOfMethod- Este es el nombre del método. La firma del método consta del nombre del método y la lista de parámetros.
Parameter List- La lista de parámetros, es el tipo, orden y número de parámetros de un método. Estos son opcionales, el método puede contener cero parámetros.
method body - El cuerpo del método define lo que hace el método con las declaraciones.
Example
Aquí está el código fuente del método definido anteriormente llamado min(). Este método toma dos parámetros num1 y num2 y devuelve el máximo entre los dos -
/** the snippet returns the minimum between two numbers */
public static int minFunction(int n1, int n2) {
int min;
if (n1 > n2)
min = n2;
else
min = n1;
return min;
}
Método de llamada
Para usar un método, debe llamarse. Hay dos formas en que se llama a un método, es decir, el método devuelve un valor o no devuelve nada (sin valor devuelto).
El proceso de llamar al método es simple. Cuando un programa invoca un método, el control del programa se transfiere al método llamado. Este método llamado luego devuelve el control a la persona que llama en dos condiciones, cuando:
- se ejecuta la declaración de retorno.
- llega al método que termina la llave de cierre.
Los métodos que devuelven vacío se consideran una llamada a una declaración. Consideremos un ejemplo:
System.out.println("This is tutorialspoint.com!");
El método que devuelve el valor se puede entender con el siguiente ejemplo:
int result = sum(6, 9);
A continuación se muestra el ejemplo para demostrar cómo definir un método y cómo llamarlo:
Example
public class ExampleMinNumber {
public static void main(String[] args) {
int a = 11;
int b = 6;
int c = minFunction(a, b);
System.out.println("Minimum Value = " + c);
}
/** returns the minimum of two numbers */
public static int minFunction(int n1, int n2) {
int min;
if (n1 > n2)
min = n2;
else
min = n1;
return min;
}
}
Esto producirá el siguiente resultado:
Output
Minimum value = 6
La palabra clave vacía
La palabra clave void nos permite crear métodos que no devuelven un valor. Aquí, en el siguiente ejemplo, estamos considerando un método vacío methodRankPoints . Este método es un método nulo, que no devuelve ningún valor. La llamada a un método void debe ser una declaración, es decir, methodRankPoints (255.7); . Es una declaración de Java que termina con un punto y coma, como se muestra en el siguiente ejemplo.
Example
public class ExampleVoid {
public static void main(String[] args) {
methodRankPoints(255.7);
}
public static void methodRankPoints(double points) {
if (points >= 202.5) {
System.out.println("Rank:A1");
}else if (points >= 122.4) {
System.out.println("Rank:A2");
}else {
System.out.println("Rank:A3");
}
}
}
Esto producirá el siguiente resultado:
Output
Rank:A1
Pasar parámetros por valor
Mientras se trabaja con el proceso de llamada, se deben pasar argumentos. Estos deben estar en el mismo orden que sus respectivos parámetros en la especificación del método. Los parámetros se pueden pasar por valor o por referencia.
Pasar parámetros por valor significa llamar a un método con un parámetro. A través de esto, el valor del argumento se pasa al parámetro.
Example
El siguiente programa muestra un ejemplo de paso de parámetro por valor. Los valores de los argumentos siguen siendo los mismos incluso después de la invocación del método.
public class swappingExample {
public static void main(String[] args) {
int a = 30;
int b = 45;
System.out.println("Before swapping, a = " + a + " and b = " + b);
// Invoke the swap method
swapFunction(a, b);
System.out.println("\n**Now, Before and After swapping values will be same here**:");
System.out.println("After swapping, a = " + a + " and b is " + b);
}
public static void swapFunction(int a, int b) {
System.out.println("Before swapping(Inside), a = " + a + " b = " + b);
// Swap n1 with n2
int c = a;
a = b;
b = c;
System.out.println("After swapping(Inside), a = " + a + " b = " + b);
}
}
Esto producirá el siguiente resultado:
Output
Before swapping, a = 30 and b = 45
Before swapping(Inside), a = 30 b = 45
After swapping(Inside), a = 45 b = 30
**Now, Before and After swapping values will be same here**:
After swapping, a = 30 and b is 45
Sobrecarga de métodos
Cuando una clase tiene dos o más métodos con el mismo nombre pero diferentes parámetros, se conoce como sobrecarga de métodos. Es diferente de anular. Al anular, un método tiene el mismo nombre de método, tipo, número de parámetros, etc.
Consideremos el ejemplo discutido anteriormente para encontrar números mínimos de tipo entero. Si, digamos que queremos encontrar el número mínimo de tipos dobles. Luego se introducirá el concepto de sobrecarga para crear dos o más métodos con el mismo nombre pero diferentes parámetros.
El siguiente ejemplo explica lo mismo:
Example
public class ExampleOverloading {
public static void main(String[] args) {
int a = 11;
int b = 6;
double c = 7.3;
double d = 9.4;
int result1 = minFunction(a, b);
// same function name with different parameters
double result2 = minFunction(c, d);
System.out.println("Minimum Value = " + result1);
System.out.println("Minimum Value = " + result2);
}
// for integer
public static int minFunction(int n1, int n2) {
int min;
if (n1 > n2)
min = n2;
else
min = n1;
return min;
}
// for double
public static double minFunction(double n1, double n2) {
double min;
if (n1 > n2)
min = n2;
else
min = n1;
return min;
}
}
Esto producirá el siguiente resultado:
Output
Minimum Value = 6
Minimum Value = 7.3
Los métodos de sobrecarga hacen que el programa sea legible. Aquí, dos métodos tienen el mismo nombre pero con diferentes parámetros. El resultado es el número mínimo de tipos enteros y dobles.
Usar argumentos de línea de comandos
A veces querrá pasar información a un programa cuando lo ejecute. Esto se logra pasando argumentos de la línea de comandos a main ().
Un argumento de línea de comando es la información que sigue directamente al nombre del programa en la línea de comando cuando se ejecuta. Acceder a los argumentos de la línea de comandos dentro de un programa Java es bastante fácil. Se almacenan como cadenas en la matriz String que se pasa a main ().
Example
El siguiente programa muestra todos los argumentos de la línea de comandos con los que se llama:
public class CommandLine {
public static void main(String args[]) {
for(int i = 0; i<args.length; i++) {
System.out.println("args[" + i + "]: " + args[i]);
}
}
}
Intente ejecutar este programa como se muestra aquí -
$java CommandLine this is a command line 200 -100
Esto producirá el siguiente resultado:
Output
args[0]: this
args[1]: is
args[2]: a
args[3]: command
args[4]: line
args[5]: 200
args[6]: -100
La esta palabra clave
thises una palabra clave en Java que se utiliza como referencia al objeto de la clase actual, con un método de instancia o un constructor. Con esto , puede hacer referencia a los miembros de una clase, como constructores, variables y métodos.
Note- La palabra clave this se usa solo dentro de métodos de instancia o constructores
En general, la palabra clave this se usa para:
Diferenciar las variables de instancia de las variables locales si tienen los mismos nombres, dentro de un constructor o un método.
class Student {
int age;
Student(int age) {
this.age = age;
}
}
Llame a un tipo de constructor (constructor parametrizado o predeterminado) de otro en una clase. Se conoce como invocación explícita del constructor.
class Student {
int age
Student() {
this(20);
}
Student(int age) {
this.age = age;
}
}
Example
Aquí hay un ejemplo que usa esta palabra clave para acceder a los miembros de una clase. Copie y pegue el siguiente programa en un archivo con el nombre,This_Example.java.
public class This_Example {
// Instance variable num
int num = 10;
This_Example() {
System.out.println("This is an example program on keyword this");
}
This_Example(int num) {
// Invoking the default constructor
this();
// Assigning the local variable num to the instance variable num
this.num = num;
}
public void greet() {
System.out.println("Hi Welcome to Tutorialspoint");
}
public void print() {
// Local variable num
int num = 20;
// Printing the local variable
System.out.println("value of local variable num is : "+num);
// Printing the instance variable
System.out.println("value of instance variable num is : "+this.num);
// Invoking the greet method of a class
this.greet();
}
public static void main(String[] args) {
// Instantiating the class
This_Example obj1 = new This_Example();
// Invoking the print method
obj1.print();
// Passing a new value to the num variable through parametrized constructor
This_Example obj2 = new This_Example(30);
// Invoking the print method again
obj2.print();
}
}
Esto producirá el siguiente resultado:
Output
This is an example program on keyword this
value of local variable num is : 20
value of instance variable num is : 10
Hi Welcome to Tutorialspoint
This is an example program on keyword this
value of local variable num is : 20
value of instance variable num is : 30
Hi Welcome to Tutorialspoint
Argumentos variables (var-args)
JDK 1.5 le permite pasar un número variable de argumentos del mismo tipo a un método. El parámetro en el método se declara de la siguiente manera:
typeName... parameterName
En la declaración del método, especificas el tipo seguido de puntos suspensivos (...). Solo se puede especificar un parámetro de longitud variable en un método, y este parámetro debe ser el último parámetro. Cualquier parámetro regular debe precederlo.
Example
public class VarargsDemo {
public static void main(String args[]) {
// Call method with variable args
printMax(34, 3, 3, 2, 56.5);
printMax(new double[]{1, 2, 3});
}
public static void printMax( double... numbers) {
if (numbers.length == 0) {
System.out.println("No argument passed");
return;
}
double result = numbers[0];
for (int i = 1; i < numbers.length; i++)
if (numbers[i] > result)
result = numbers[i];
System.out.println("The max value is " + result);
}
}
Esto producirá el siguiente resultado:
Output
The max value is 56.5
The max value is 3.0
El método finalize ()
Es posible definir un método que será llamado justo antes de la destrucción final de un objeto por el recolector de basura. Este método se llamafinalize( )y se puede utilizar para garantizar que un objeto termine limpiamente.
Por ejemplo, puede usar finalize () para asegurarse de que un archivo abierto propiedad de ese objeto esté cerrado.
Para agregar un finalizador a una clase, simplemente defina el método finalize (). El tiempo de ejecución de Java llama a ese método cada vez que está a punto de reciclar un objeto de esa clase.
Dentro del método finalize (), especificará las acciones que deben realizarse antes de que se destruya un objeto.
El método finalize () tiene esta forma general:
protected void finalize( ) {
// finalization code here
}
Aquí, la palabra clave protected es un especificador que evita el acceso a finalize () por código definido fuera de su clase.
Esto significa que no puede saber cuándo o incluso si se ejecutará finalize (). Por ejemplo, si su programa finaliza antes de que ocurra la recolección de basura, finalize () no se ejecutará.