Métodos & Parámetros y Objeto

JavaJavaBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, avanzamos hacia métodos y objetos. La tarea es aprender cómo definir un método con parámetros. El objeto es un concepto muy importante en el lenguaje de programación orientado a objetos (OOP), por lo que tener un buen conocimiento de él te será útil.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL java(("Java")) -.-> java/DataStructuresGroup(["Data Structures"]) java(("Java")) -.-> java/ProgrammingTechniquesGroup(["Programming Techniques"]) java(("Java")) -.-> java/ObjectOrientedandAdvancedConceptsGroup(["Object-Oriented and Advanced Concepts"]) java/DataStructuresGroup -.-> java/arrays("Arrays") java/ProgrammingTechniquesGroup -.-> java/method_overloading("Method Overloading") java/ProgrammingTechniquesGroup -.-> java/recursion("Recursion") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/classes_objects("Classes/Objects") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/class_methods("Class Methods") subgraph Lab Skills java/arrays -.-> lab-178547{{"Métodos & Parámetros y Objeto"}} java/method_overloading -.-> lab-178547{{"Métodos & Parámetros y Objeto"}} java/recursion -.-> lab-178547{{"Métodos & Parámetros y Objeto"}} java/classes_objects -.-> lab-178547{{"Métodos & Parámetros y Objeto"}} java/class_methods -.-> lab-178547{{"Métodos & Parámetros y Objeto"}} end

Métodos y Parámetros

En algunos casos, necesitas un código que se pueda reutilizar para resolver algunos problemas similares, como imprimir la edad y el nombre de alguien. Para diferentes personas, el nombre y la edad son diferentes. Estas dos variables se pueden pasar a un bloque de código como parámetros. Allí introducimos el concepto de método, que realizará la tarea.

Ejemplo:

Escribe el siguiente código en el archivo /home/labex/project/methodTest.java:

public class methodTest
{
    public static void main(String[] args)
    {
        // llama a nuestro método definido por nosotros mismos
        printInfo("Mike", 18);
        // llama a nuestro método definido por nosotros mismos
        System.out.println(fibonacci(10));
        System.out.println(fibonacciNormal(10));
    }
    // definimos un método de clase para imprimir información personal
    public static void printInfo(String name, int age){
        System.out.println("Hello " + name + ", your age is " + age);
    }
    // define un método de clase para calcular la serie de Fibonacci por recursión
    public static int fibonacci(int n){
        if(n<=2){
            return 1;
        }else{
            return fibonacci(n-1)+fibonacci(n-2);
        }
    }
    // define un método de clase para calcular la serie de Fibonacci mediante un bucle iterativo
    public static int fibonacciNormal(int n){
        if(n<=2){
            return 1;
        }
        int n1=1,n2=1,sum=0;
        for(int i=0;i<n-2;i++){
            sum=n1+n2;
            n1=n2;
            n2=sum;
        }
        return sum;
    }
}

Salida:

Ejecuta el archivo methodTest.java usando los siguientes comandos:

javac /home/labex/project/methodTest.java
java methodTest

Ver la salida:

Hello Mike, your age is 18
55
55

En el ejemplo anterior, escribimos una función llamada printInfo. Puedes nombrarla como quieras. Hay dos parámetros y el tipo de retorno es void, lo que significa que no se devolverá nada. Puedes determinar el tipo de retorno de tu función como cualquier tipo que necesites, y el número y los tipos de los parámetros pueden ser cualquiera. Puedes definir tu método de la siguiente manera:

Ejemplo:

public/private static/final/{no es necesario} TIPO_DE_RETORNO NOMBRE_DEL_MÉTODO( LISTA_DE_PARAMETROS ) {
    // INSTRUCCIONES
}
public String getName(){}
public void setName(){}
public static void newInstance(){}
public final String msg(){}

Java proporciona muchas funciones que realizan las operaciones más comunes como métodos de la biblioteca estándar, como las funciones matemáticas. Estas funciones se llaman métodos. Los métodos se invocan usando una sintaxis similar a las instrucciones de impresión que ya hemos visto:

Ejemplo:

double root = Math.sqrt(16.0);   // root = 4.0
double height = Math.sin(1.5);   // height = 0.9974949866040544

Objeto

En Java, hay dos tipos de tipos: tipos primitivos y tipos de objeto. Los primitivos, como int y boolean, empiezan con minúsculas; los tipos de objeto empiezan con mayúsculas. Esta distinción es útil porque nos recuerda algunas de las diferencias entre ellos:

Cuando declaras una variable primitiva, obtienes un espacio de almacenamiento para un valor primitivo. Cuando declaras una variable de objeto, obtienes un espacio para una referencia a un objeto. Para obtener espacio para el objeto mismo, debes usar el operador new.

Si no inicializas una variable primitiva, se le asigna un valor predeterminado que depende de su tipo. Por ejemplo, 0 para int y false para boolean. El valor predeterminado para los tipos de objeto es null, lo que indica que no hay objeto referenciado por las variables de referencia.

Las variables primitivas están bien aisladas en el sentido de que no hay nada que puedas hacer en un método que afecte a una variable en otro método. Las variables de objeto pueden ser complicadas de trabajar porque no están tan bien aisladas. Si pasas una referencia a un objeto como argumento, el método que invocas puede modificar el objeto, en cuyo caso verás el efecto. Por supuesto, eso puede ser algo bueno, pero debes ser consciente de ello.

Si pasamos variables primitivas a un método (pasando parámetros por valor), en realidad copiamos los valores de los primitivos y los usamos dentro del método. Todas las operaciones dentro del método se realizan sobre las copias; y, fuera del método, los valores de las variables primitivas permanecen sin afectar. Pero, si pasamos objetos no primitivos a un método (pasando parámetros por referencia), pasamos las variables de referencia al método. Todas las operaciones realmente usarán y/o afectarán a los objetos originales.

Ejemplo:

Escribe el siguiente código en el archivo /home/labex/project/objectTest.java:

public class objectTest {
    public static void main(String[] args){
        // usa new para crear un objeto Array con dos elementos
        int[] numbers = new int[2];
        // asigna valores al objeto array
        numbers[0] = 1;
        numbers[1] = 2;
        // crea variables primitivas de esta manera
        int a = 1, b = 2;

        // crea un objeto de prueba
        objectTest test = new objectTest();

        test.changeInt(a, b);
        System.out.println("Now a is " + a + ", b is " + b);

        test.changeArray(numbers);
        System.out.println("Now numbers contain:");

        for(int i : numbers){
            System.out.print(i + "\t");
        }
    }
    // define un método de objeto, cambia el valor de int
    public void changeInt(int a,int b){
        a = 2;
        b = 3;
        System.out.println("In changeInt method, a is " + a + ", b is " + b);
    }
    // define un método de objeto, cambia el valor del array
    public void changeArray(int[] number){
        for(int i = 0;i < number.length;i++){
            number[i] = number[i]+1;    // cambia el valor del elemento del array aumentándolo en 1
        }
        System.out.println("In changeArray method, numbers contain:");
        for(int i : number){
            System.out.print(i + "\t");
        }
        System.out.println();
    }
}

Salida:

Ejecuta el archivo objectTest.java usando el siguiente comando en la terminal:

javac /home/labex/project/objectTest.java
java objectTest

Ver la salida:

In changeInt method, a is 2, b is 3
Now a is 1, b is 2
In changeArray method, numbers contain:
2    3
Now numbers contain:
2    3

Hay otra diferencia entre los primitivos y los tipos de objeto. No puedes agregar nuevos primitivos a Java (a menos que te pongas en el comité de estándares), pero ¡puedes crear nuevos tipos de objeto! Veremos cómo en el próximo capítulo.

Resumen

Los métodos son comunes en las clases. Un método es un bloque de código que realiza algunas operaciones especiales. Java proporciona muchas clases integradas que podemos usar directamente. Hay dos maneras de pasar parámetros a los métodos: por valor y por referencia. Sus efectos son diferentes. En el siguiente laboratorio, te los presentaremos. Esperamos que sea útil.