Oi Daniel, vamo lá...
Antes do nome do método nós indicamos qual será o seu retorno, você está indicando qual é o tipo (Objeto) que será retornado pelo método. Veja esse exemplo aqui:
public class Aluno {
private String nome;
private Integer idade;
public Aluno(String nome, Integer idade){
this.nome = nome;
this.idade = idade;
}
public String getNome(){
return this.nome;
}
public Integer getIdade(){
return this.idade;
}
Repare que o getNome declara um retorno do tipo String, pois o atributo 'nome' é um objeto String. O getIdade declara o retorno de um Integer, pois o atributo 'idade' é um objeto Integer.
Veja esse exemplo errado:
public String getIdade(){
return this.idade;
}
Esse código nem compila, pois o compilador está esperando um objeto do tipo String, mas você está retornando um objeto do tipo Integer.
Quando queremos que um método execute uma ação mas não retorne nada usamos o void. Se você declarar void e retornar alguma coisa, também não irá compilar, pois o compilar não espera um retorno para o método.
exibeFichaTecnica: ele usa void porque o não retorna nada.
avaliaNota: ele retorna um double porque usa dois objetos double para fazer um operação matemática, o resultado é um novo objeto do tipo double com o valor do resultado do cálculo
Sobre o método avalia:
void avalia(double nota) {
somasDasAvaliacoes += nota;
totalDeAvaliacoes++;
}
Nele, você está declarando que não quer que ele retorne algo e que para ser chamado, é preciso passar um objeto do tipo double. Nos parênteses, com 'double' você está declarando o tipo de objeto que você quer receber nessa método, no caso é um double, em seguida você declara uma variável para este objeto (você pode pôr qualquer nome). Essa variável 'nota' é um objeto do tipo double, ela tem métodos de double e se comporta como double, se você tivesse declarado o método como public void(String nota)
, a variável nota se comportaria como uma String e teria métodos de String, pois é isso que ela é.
Agora um exemplo prático chamando o método os métodos:
//instancia o objeto Aluno
Aluno aluno = new Aluno("Aluno-san", 22);
//cria uma variável do tipo String que guarda o retorno do método getNome nela
String valorDoNome = aluno.getNome();
//cria uma variável do tipo Integer que guarda o retorno do método getIdade nela
Integer valorDaIdade = aluno.getIdade();
//-------------------------------------------------------------------------------------------------------------
//cria um double
double objetoDoTipoDouble = 1.33;
//passa o double como parâmetro para o método avalia, sem esperar nenhum retorno
filme.avalia(objetoDoTipoDouble);