Você está confundindo parâmetros com variáveis locais. Eles são coisas diferentes.
Parâmetro - algo que você passa para um método
Variável local - algo que um método usa internamente.
Por acaso você aprendeu C antes (usando a sintaxe antiga do Kerninghan e Ritchie? ) Em C antigo (que os compiladores não aceitam mais) existe uma coisa que acho terrivelmente confusa. Veja a diferença:
// Em C antigo, note que os parâmetros são declarados separadamente do tipo dos parâmetros, // e que podem ficar fora de ordem:main(argc,argv)char*argv[],intargc;{}
e
// No C moderno, os parâmetros são declarados na lista de parâmetros, como em Java:intmain(intargc,char*argv[]){}
marcosharbs
O primeiro caso vc esta dizendo que o metodo vai receber um int como parametro, por isso funciona
No segundo caso vc está criando uma variavel local dentro do metodo, entao vc precisa inicializar ela com algum valor inteiro.
peczenyj
Talvez isso possa confundir pelo seguinte comportamento: vc não precisa inicializar os atributos de uma classe. Assim
class X{
int i; // ja é 0 automagicamente
}
Agora dentro de um método (ou qualquer outro tipo de bloco de código) isso é complicado, pois o compilador não vai atribuir um valor default.
thinet
Pessoal, uma dúvida, o problema não é também na linha 20 do segundo exemplo?
Pois ele declara: voidBark() <<< sem parâmetro
e depois
Dog d = new Dog():
d.bark(3); <<<<< isso não está errado não?
peczenyj
thinet:
Pessoal, uma dúvida, o problema não é também na linha 20 do segundo exemplo?
Pois ele declara: voidBark() <<< sem parâmetro
e depois
Dog d = new Dog():
d.bark(3); <<<<< isso não está errado não?
Com certeza está, a menos que exista um outro bark que não receba parâmetros.