en Java, todas las definiciones de funciones deben estar dentro de clases. También llamamos métodos de funciones. Veamos un ejemplo de método
public class Main { public static void foo() { // Do something here }}
foo
es un método que definimos en la clase Main. Observe algunas cosas sobre foo
.
-
static
significa que este método pertenece a la clase Main y no a una instancia específica de Main. Lo que significa que podemos llamar al método desde una clase diferente como esaMain.foo()
., -
void
significa que este método no devuelve un valor. Los métodos pueden devolver un solo valor en Java y tiene que ser definido en la declaración del método. Sin embargo, puede usarreturn
por sí mismo para salir del método. - este método no obtiene ningún argumento, pero por supuesto los métodos Java pueden obtener argumentos como veremos más adelante.,
argumentos
siempre me gusta decir que los argumentos a los métodos Java se pasan por valor, aunque algunos pueden estar en desacuerdo con mi elección de palabras, me parece la mejor manera de explicar y entender cómo funciona exactamente.
By value significa que los argumentos se copian cuando se ejecuta el método. Veamos un ejemplo.,
public void bar(int num1, int num2) { ...}
Aquí hay otro lugar en el código, donde la barra se llama
int a = 3;int b = 5;bar(a, b);
puede imaginar en su cabeza que cuando bar(a, b)
se ejecuta, ES como al principio de bar
se escriben las siguientes dos líneas:
int num1 = a;int num2 = b;
y solo entonces se ejecuta el resto del método.
Esto significa que el a
valor se copian a num1
y b
valor se copian a num2
., Cambio de los valores de num1
y num2
no afectará a
y b
.
si los argumentos eran objetos, las reglas siguen siendo las mismas, pero actúa un poco diferente. Aquí hay un ejemplo:
public void bar2(Student s1, Student s2) { ...}
y aquí es cómo lo usamos
Student joe = new Student("joe");Student jack = new Student("jack");bar2(joe, jack);
de nuevo podemos imaginar las mismas dos líneas al principio de bar2
Student s1 = joe;Student s2 = jack;
pero cuando asignamos objetos, es un poco diferente a asignar primitivas., s1
y joe
son dos referencias diferentes para el mismo objeto. s1 == joe
es true. Esto significa que la ejecución de métodos en s1
cambiará el objeto joe
. Pero si cambiamos el valor de s1
como referencia, no afectará a la referencia joe
.
métodos no estáticos
Los métodos no estáticos en Java se utilizan más que los métodos estáticos. Esos métodos solo se pueden ejecutar en objetos y no en toda la clase.,
los métodos no estáticos pueden acceder y alterar el campo del objeto.
llamar a los métodos requerirá un objeto de tipo Student
.