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

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.

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

public class MinhaClasse {

boolean teste;
public void setTeste(){
teste = true;
System.out.println(“blabla”);
}

public static void main(String args[]) {
new MinhaClasse().setTeste();
}

}

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

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.

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:

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

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/

[quote=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/[/quote]

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 .

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

	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 - …

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

Ol