In Java, all functions definitions must be inside classes. Também chamamos métodos de funções. Vejamos um método de exemplo
public class Main { public static void foo() { // Do something here }}
foo
é um método que definimos na classe principal. Notice a few things about foo
.
-
static
significa que este método pertence à classe principal e não a uma instância específica de Main. O que significa que podemos chamar o método de uma classe diferente como essaMain.foo()
., -
void
significa que este método não devolve um valor. Os métodos podem retornar um único valor em Java e ele tem que ser definido na declaração do método. No entanto, você pode usarreturn
por si só para sair do método. - este método não recebe quaisquer argumentos, mas é claro que os métodos Java podem obter argumentos como veremos mais adiante.,
argumentos
eu sempre gosto de dizer que os argumentos para métodos Java são passados pelo valor, embora alguns possam discordar da minha escolha de palavras, eu acho que é a melhor maneira de explicar e entender como ele funciona exatamente.
Por valor significa que os argumentos são copiados quando o método é executado. Vejamos um exemplo.,
public void bar(int num1, int num2) { ...}
Aqui está um outro lugar no código, onde a barra é chamada
int a = 3;int b = 5;bar(a, b);
Você pode imaginar na sua cabeça que quando bar(a, b)
é executado, é como no início do bar
as duas linhas seguintes são escritas:
int num1 = a;int num2 = b;
E só depois o resto do método é executado.
Isto significa que a
valor copiado para num1
e b
valor copiado para num2
., Alterando os valores de num1
e num2
não afetará a
e b
.
Se os argumentos eram objetos, as regras permanecem as mesmas, mas ele age um pouco diferente. Aqui está um exemplo:
public void bar2(Student s1, Student s2) { ...}
E aqui está como nós a usamos
Student joe = new Student("joe");Student jack = new Student("jack");bar2(joe, jack);
Novamente podemos imaginar o mesmo duas linhas no início do bar2
Student s1 = joe;Student s2 = jack;
Mas, quando atribuímos a objetos, é um pouco diferente do que atribuir primitivos., s1
e joe
são duas referências diferentes para o mesmo objeto. s1 == joe
é verdade. Isto significa que os métodos de execução em s1
irão alterar o objecto joe
. Mas se mudarmos o valor de s1
como referência, não afetará a referência joe
.
métodos não estáticos
métodos não estáticos em Java são usados mais do que métodos estáticos. Esses métodos só podem ser executados em objetos e não em toda a classe.,
métodos não estáticos podem acessar e alterar o campo do objeto.
chamar os métodos requer um objeto do tipo Student
.