Bienvenidos sean a este post, hoy continuaremos con la explicacion sobre metodos para ello comenzaremos hablando de la sobrecarga.
La sobrecarga es tener mas de un metodo con el mismo nombre pero con distintos parametros, similar a cuando hablamos en los constructores, y el compilador se encargara de diferenciarlos justamente por medio de ellos (parametros) esto nos permitiria ejecutar varias acciones con el mismo nombre pero con distintos resultados, por ejemplo si nosotros tuvieramos el siguiente metodo:
public int sumar(int a, int b)
{
return a + b;
}
Pero nosotros necesitamos que se concatenen textos en lugar de numeros enteros, para ello podriamos agregar un nuevo metodo como este:
public String sumar(String a, String b)
{
return a + b;
}
Si bien nosotros podemos ver como son distintos pero a la hora de llamarlo nos quedaria asi:
sumar(6,9);
sumar("Hola,"," mundo!!!");
Si los vieramos asi no habria forma de identificar al cual va a llamar pero el compilador si porque verfica el tipo de parametros y lo envia al metodo que corresponda
Nota: La sobrecarga se diferencia por los atributos (parametros) no por las instrucciones, recuerden que las instrucciones pueden ser las mismas dentro de los metodos pero no los parametros porque de lo contrario al compilarlo devolvera un error de metodo duplicado.
Pasemos a ver como podemos enviar argumentos por linea de comando a nuestro programa, esto es necesario cuando necesitamos enviar informacion a nuestro programa de manera externa, es decir por medio de la linea de comandos, este tipo de informacion se envia directamente al main() y es la que esta por detras de nuestro comando ejecutor, al igual como sucede en C++, Java tambien almacena estos parametros en un Array de tipo String llamado args y para poder acceder a ellos los podemos extraer de una manera muy facil como se ve en el siguiente ejemplo:
public class CommandLine
{
public static void main(String[] args)
{
for(int i = 0; i < args.length; i++)
System.out.println("args[" + i + "]: " + args[i]);
}
}
Este es un programa simple, en este caso contara la cantidad de elementos de nuestro Array (args) y por medio de un bucle for donde por medio del metodo length() iremos mostrando en consola cada uno de los elementos cargados en la linea, compilemos y ejecutemos el siguiente comando:
$ java CommandLine esta es una linea de prueba 200 -100
La salida que obtendremos sera la siguiente:
$ java CommandLine esta es una linea de prueba 200 -100
args[0]: esta
args[1]: es
args[2]: una
args[3]: linea
args[4]: de
args[5]: prueba
args[6]: 200
args[7]: -100
$
A diferencia de como ocurre con C++, en Java el elemento cero no es el programa que invoca sino el primer elemento que le enviamos y luego cada elemento tendra un indice para ser usado, observen que podriamos enviar algun dato en particular para poder modificar nuestro programa o informar algun dato del sistema.
Pasemos uno de los elementos mas importantes en programacion, en este caso es this, un elemento que nos permite utilizarlo como referencia al objeto de la clase actual en un instancia, metodo o un constructor y nos permite referenciar los miembros de una clase como las variables, metodos o constructores, se puede diferenciar de la siguiente forma:
- Diferencia las variables de instancia de las variables locales si tienen el mismo nombre dentro de un constructor o un metodo
- Nos permite llamar un constructor (Parametrizado o por defecto) de otro en una clase, es conocido como invocacion de constructor explicita
Para entenderlo un poco mas vamos a ver un ejemplo:
This_Example,java
public class This_Example
{
int num = 10;
This_Example()
{
System.out.println("Este es un ejemplo con this.");
}
This_Example(int num)
{
this();
this.num = num;
}
public void greet()
{
System.out.println("Bienvenido a Tinchicus");
}
public void print()
{
int num = 20;
System.out.println("Valor local de num es: " + num);
System.out.println("Valor de instancia de num es: "
+ this.num);
this.greet();
}
public static void main(String[] args)
{
This_Example obj1 = new This_Example();
obj1.print();
This_Example obj2 = new This_Example(30);
obj2.print();
}
}
Vamos a analizar este caso, nuestra clase tiene una variable de tipo int llamado num con un valor de 10, despues tendremos un constructor predeterminado (sin parametros) solo muestra un mensaje, despues tendremos un constructor parametrizado que recibira un valor, donde tendremos esta linea:
this();
Esto invocara el constructor predeterminado, y despues por la siguiente linea nos permitira modificar el valor de la variable num con el nuevo valor informado, despues tendremos un metodo llamado greet() el cual se encargara de mostrar un mensaje y el ultimo metodo es print(), el cual tendra una variable llamada num, de orden local para esta funcion, primero imprimiremos el valor de la variable local, luego por medio this.num mostraremos el valor de la variable de la clase, es decir la global, y por ultimo llamara al metodo greet(), despues el metodo main() creara dos objetos de la clase This_Example, el primero con el constructor predeterminado y el segundo con el constructor parametrizado y en ambos casos llamaremos al metodo print(), compilemos y probemos a ver que sucede:
tinchicus@dbn001vrt:~/programacion/java/program$ java This_Example
Este es un ejemplo con this.
Valor local de num es: 20
Valor de instancia de num es: 10
Bienvenido a Tinchicus
Este es un ejemplo con this.
Valor local de num es: 20
Valor de instancia de num es: 30
Bienvenido a Tinchicus
tinchicus@dbn001vrt:~/programacion/java/program$
Vean como la primera linea nos muestra el constructor predeterminado, luego nos muestra el valor de num del metodo print(), despues el valor de num pero el global y por ultimo nos muestra el mensaje del metodo greet(), este fue el objeto del constructor predeterminado, despues invocara al constructor predeterminado, esto por el this(), despues nos muestra nuevamente el valor de num local del metodo, pero aca esta la sorpresa porque ahora num, el global, si fue modificado por el nuevo valor informado, y por ultimo el saludo. Para esto sirve this, para poder trabajar sobre la clase actual desde dentro de unos elementos, sea un constructor, un metodo o un objeto derivado de esta.
Pasemos a ver los argumentos variables (var-args), esta es una opcion implementada a partir de la JDK 1.5, que nos permite pasar un numero variable de argumentos del mismo tipo al metodo, su sintaxis es:
nombreTipo ... argumento
En el metodo se declara como el nombre del tipo los tres puntos (…) y el nombre del argumento, se podria usar otro tipo de variable en conjunto con este pero este tipo de argumento debe ser el ultimo utilizado y los demas siempre deben precederlo, veamos un ejemplo de este tipo:
public class VarargsDemo
{
public static void main(String args[])
{
printMax(34,3,3,2,56.5);
printMax(new double[]{1,2,3});
}
public static void printMax( double ... numeros )
{
if (numeros.length == 0)
{
System.out.println("Sin argumentos");
return;
}
double resultado = numeros[0];
for (int i = 1; i < numeros.length; i++)
if (numeros[i] > resultado)
resultado = numeros[i];
System.out.println("El valor maximo es: "
+ resultado);
}
}
Observen como enviamos los datos al metodo printMax(), en el primer caso los enviamos directo y que el metodo se encargue de interpretarlo pero para el segundo caso enviamos un Array pero para ello primero lo seteamos de la misma forma que espera el metodo, en este caso double, y luego entre llaves ({}) le pasamos los argumentos, observen como declaramos al metodo, le pusimos en la lista de argumentos el tipo, double, luego los tres puntos (…) y por ultimo el nombre de lo que va a ser nuestra variable de estilo Array, el primer condicional verificara que esta variable sea igual a cero, en caso verdadero envia un mensaje y sale del metodo, despues crearemos una variable de tipo double llamada resultado donde le asignaremos el valor del primer indice de la seria informada, despues usaremos un bucle con for para hacer un ciclo donde chequearemos cada uno de los indices en nuestra argumentos variables (var-args), en este caso llamado numeros, dentro del for tendremos un condicional donde verificara si el indice de numeros actual es mayor a resultado, en caso verdadero procede a reemplazarlo, una vez terminado el ciclo nos mostrara un mensaje con el valor maximo enviado en la serie, compilemos y probemos:
tinchicus@dbn001vrt:~/programacion/java/program$ java VarargsDemo
El valor maximo es: 56.5
El valor maximo es: 3.0
tinchicus@dbn001vrt:~/programacion/java/program$
Observen como funciono correctamente, pasemos a nuestro ultimo: finalize(), este metodo nos permite efectuar una finalizacion correcta y limpia de nuestros objetos, esta puede ser usada por ejemplo para asegurarnos que un archivo adueñado por ese objeto sea liberado cuando se destruya al objeto, dentro de este metodo se puede especificar las acciones que se deben realizar antes de la destruccion del objeto, en general se lo define de la siguiente forma:
protected void finalize()
{
.... Instrucciones ....
}
El protected se utiliza para evitar que cualquiera por fuera de la clase puede finalizar el objeto antes de tiempo.
En resumen, hoy hemos visto los ultimas formas de trabajar con metodos, entre ellos hemos visto la sobrecarga, como enviar argumentos a nuestro programa, el metodo this, los argumentos variables, el metodo finalize(), que son, para que se usan, ejemplos de como utilizarlos, espero les haya sido util sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.
Tengo un Patreon donde podes acceder de manera exclusiva a material para este blog antes de ser publicado, sigue los pasos del link para saber como.


Tambien podes donar
Es para mantenimiento del sitio, gracias!
$1.50