Segundo meu conhecimento básico de java, métodos void não retorna nada, em conseqüência disso não pode ser chamado.
É ai que esta minha dúvida.
Em um código como esse:
boolean teste;
public void setTeste(){
teste = true;
System.out.println("blabla");
}
Como faço pra chamar ele, e colocar em um metodo String, pra quanto fazer as instâncias no main, mostrar esse esse “blabla”? :x
Fui recorrer ao amigo de classe e ele me disse o seguinte procedimento.
[code]boolean teste;
public void setTeste(){
teste = true;
System.out.println(“blabla”);
}
public String toString(){
String exibe = setTeste();
return exibe;
}[/code]
So que o netbeans me deu uma bronca :lol: dizendo que não pode chamar método void devido o que foi dito no começo do tópico)
Quem disse que métodos “void” não podem ser chamados (invocados) :?: :?: :?:
Só porque eles não retornam nada, não significam que não possam ser chamados. Acredito eu que voce confundiu com [color=red]“construtores”[/color], estes sim, não podem ser invocados, pois não retornam nem void.
Na verdade, metodos void retornam valores void que representam valores vazios, que é o que a palavra inglesa void significa.
Assim quando voce instancia a classe que possui metodos “void” e só digitar um ponto (".") depois da instância de classe e digitar o seu nome, assim:
public class MinhaClasse {
public void setTeste(){
System.out.println("blabla");
}
}
// A classe principal
public class main {
public static void main(String args[]) {
MinhaClasse myclass = new MinhaClasse();
myclass.setTeste();
}
}
Oi Dedolandia!
Acho que você não entendeu bem. Como os outros já explicaram é possivel invocar metodos “void”. O eles não dizeram é quando não chamar um metodo “void”. Metodos “void” não retornam nada, por isso não podem ser chamados em contexto de atribuição! Por isso, instruções como:
Na primeira imagem você está tentanto atribuir um setter (e ainda chamando o setter de forma errada). Tente dessa forma:
protected int dia = obj.getVacinar();
Setter você usa quando você quer atribuir um valor a um atributo do objeto que está invocando o setter (no caso, a variável de referência obj). Métodos sempre[i][u] terão parenteses e nos parenteses você coloca os parâmetros.
Você usa o getter para pegar o atributo de um objeto. Quando você faz obj.getVacinar(); você está pegando o valor do atributo vacinar que a variável obj está se referenciando e passa o valor para a variável dia.
O código acima funcionará se houver uma variável obj que aponta para um objeto que tenha um metodo chamado getVacinar() e este deverá retornar um int.
No segundo caso, não existe nenhuma variável chamada dia por isso ele da esse erro.
Dica: da próxima vez, posta o código inteiro (ou as partes relevantes) dentro das tags sem espaço .
null e “NULL” e NULL são coisas completamente diferentes. O primeiro você indica que nome aponta para null, o segundo é um texto escrito NULL e o terceiro é um erro de compilação (caso não exista nenhuma variável chamada NULL).
Você está confundindo set com getter.
Set serve para passar um valor a um atributo de uma classe. Exemplo:
class Animal {
private String nome;
private String raca;
public String getNome() { //isso é um getter
return nome;
}
public void setNome(String nome) { //isso é um setter
this.nome = nome;
}
public String getRaca() { //isso é um getter
return raca;
}
public void setRaca(String raca) { //isso é um setter
this.raca = raca;
}
}
Você declarou sua variável dia como int e atribuiu a ela um String no segundo construtor. 27 e “27” são duas coisas completamente diferentes. O primeiro é um inteiro, o segundo uma String, da forma que está gerará um erro de compilação.
Falando nisso, seu segundo construtor também está muito errado. Você passa 3 parâmetros para ele mas nunca os usa. O correto é:
public Animal(String nome, String raça, int dia) //o public não é obrigatório a não ser que você queira poder usar esse construtor em outros pacotes
{
this.nome = nome;
this.raça = raca;
this.dia = dia;
}
E o último erro:
public class Animal
{
protected String nome;
protected String raça;
protected int dia = obj.setVacinar; //erro de compilação, não existe nenhuma variável chamada obj
Você também invocou o metodo errado e de forma errada. Como eu disse, metodos SEMPRE terão parenteses ().