[Resolvido]Como "chamar" métodos void?

11 respostas
Dedolandia

bom bateu a dúvida novamente hoho! :lol:

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.
boolean teste;
public void setTeste(){
teste = true;
System.out.println("blabla");
}

public String toString(){
String exibe = setTeste();
return exibe;
}

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) :)

11 Respostas

CarvalR2

public class MinhaClasse {

boolean teste;

public void setTeste(){

teste = true;

System.out.println(blabla);

}
public static void main(String args[]) {

new MinhaClasse().setTeste();

}

}

discorpio

Boa noite a todos.

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();
     }
  }
anuppu

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:

int x=obj.setTeste();

ou

System.out.println(obj.setTeste());

não funcionam.

Dedolandia

Obrigado pela ajuda discorpio e anuppu, realmente estava confundindo as chamadas “get” com as chamadas “set” mesmo.
Bom de volta aos estudo hehe
abs :smiley:

anuppu

Fico feliz por ter ajudado. Se precisar de mais qualquer coisinha é só falar. :smiley:

J

Bom dia!
Pessoas estou com uma duvida, tentei fazer praticamente igual ao post, mas o netbeans me deu uma dura, segue em anexo.

[url]http://imageshack.us/photo/my-images/339/setvacinar.png/

[/url] ]http://imageshack.us/photo/my-images/7/classobj.png/

S

JoeR:
Bom dia!
Pessoas estou com uma duvida, tentei fazer praticamente igual ao post, mas o netbeans me deu uma dura, segue em anexo.

[url]http://imageshack.us/photo/my-images/339/setvacinar.png/

[/url] ]http://imageshack.us/photo/my-images/7/classobj.png/

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 .

J

Obrigado semNome, co didigo eh esse:

public class Animal

{

protected String nome;

protected String raça;

protected int dia = obj.setVacinar;
Animal()

{

nome = NULL;

raça = NULL;

dia = 0;

}
Animal(String nome, String raça,String dia)

{

nome = zulu;

raça = Vira Lata;

dia = 27;

}
public int getVacinar(int dia)

{

this.dia = dia;

return dia;

}
public void setVacinar()

{

System.out.println(dia);

}
public void imprimirTudo()

{

System.out.println(nome);

System.out.println(dia);

System.out.println(raça);

}
private static class obj {

    public obj(dia) 
    {
        System.out.println(dia);
    }
}
E
Obrigado semNome, co didigo eh esse:

public class Animal
{
protected String nome;
protected String raça;
protected int dia = obj.setVacinar;


Animal()
{
nome = "NULL";
raça = "NULL";
dia = 0;
}

Animal(String nome, String raça,String dia)
{
nome = "zulu";
raça = "Vira Lata";
dia = "27";
}

public int getVacinar(int dia)
{
this.dia = dia;
return dia;
}

public void setVacinar()
{
System.out.println(dia);
}
  1. Misturando getters com setters :frowning: - decida-se!
  2. Imprimindo dentro de um getter ou setter - …
S

Algumas falhas do que você está fazendo:

nome = "NULL";

O correto é:

nome = null;

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 ().

C

Ol

Criado 28 de maio de 2010
Ultima resposta 31 de mai. de 2013
Respostas 11
Participantes 8