O primeiro exemplo que você mostrou, ele apenas altera o valor da variável 'somaDasAvaliações'.
void avalia(double nota){
somaDasAvaliacoes += nota;
}
Já o segundo código está faltando o return.
double avalia(double nota){
return somaDasAvaliacoes += nota;
}
A diferença entre ele e o void é que o double retorna o valor e void não.
Por exemplo, pensa o seguinte, você vai enviar dois números para uma função e quer que ela te retorne a soma.
double soma(double n1, double n2){
return n1 + n2;
}
Agora vc poderia usar ela da seguinte forma:
public class Teste {
public static void main(String[] args) {
double numero1 = 10;
double numero2 = 20;
System.out.println(soma(numero1, numero2));
}
static double soma(double n1, double n2) {
return n1 + n2;
}
}
Perceba que você está enviando dois números como parâmetros para a função soma, que são a variável chamada 'numero1' e 'numero2'.
A função soma executa a operação e te retorna o valor, que neste caso é 30.
Se você trocar a função double por void, vai perceber que da erro, porque o void não retorna nada.