Dúvida bem básica sobre void

Olá a todos, gostaria que vocês fizessem o favor de responder uma dúvida que tenho, eu nunca entendi direito a diferença entre colocar o void e outra coisa, e em que o void influencia.

Um exemplo do mais básico aqui:


public class ExemploBasico {

public static void main (String args[]) {

System.out.println ("Hello Word");

     }
}

Dizem que é necessario colocar o VOID para indicar que não há valor de retorno, mas ainda não entendo, pode parecer uma pergunta idiota… Mas, porque ainda é possível retornar na tela o Hello Word? Em que sentido não há valor de retorno??

1 curtida

void serve para dizer que nao tem retorno, mas se você quiser retornar uma String por exemplo.

public String teste(){
    return "Oi";
}

quando você chamar esse metodo teste ele retorna uma String com valor “Oi”

String a = teste();
System.out.println(a);

E mais uma coisa escrever Hello world na tela, não dizemos que isso é um retorno. Você só imprimiu na tela.

2 curtidas

Void significa que o seu MÉTODO não retornará nada. Um println não é um retorno e sim uma saída de dados. Analisando o seu método de exemplo:

public = Modificador de acesso. No caso de public, pode ser acessado por qualquer classe.
static = Diz que o seu método é um método de classe não do objeto. Qualquer classe poderá acessar o método sem ter que isntanciar a classe.
void = Tipo do retorno. No caso de void, o seu método não tem retorno.

Ou seja:

    public class ExemploBasico {  
      
    public static void main (String args[]) {  
      
           System.out.println ("Hello Word");  
           return "test"; //Não compila. Estamos tentando retornar uma String em um método que foi assinado para não retornar nada.
    }  
 
public static int getInt() {
      return 1; //Repare que se comentar essa linha, não irá compilar, pois o compilador espera um retorno deste método.
}

public static void test() {

     int x = getInt();                          //Compila sem problemas. Chamamos o método estático que retorna um int e armazena na variável x.
     int y = ExemploBasico.getInt();   //Compila sem problemas, Chamamos o método estático que retorna um int e armazena na variável x (sem precisar uma instancia da classe).
     String s = main(new String[]{"a"});           //Não compila. Estamos tentando armazenar um retorno em uma string, porém o método main não retorna nada.
}

}
2 curtidas

É uma definição simples…
por exemplo, como no seu exemplo vc cria um metodo qualquer para SOMENTE mostrar HELLO WORLD e mais nada, ou seja, nao é necessario valor de retorno.

public void hello(){
   System.out.println("HELLO WORLD!!!");
}

agora em um outro ocasião você quer fazer um metodo que te retorne um outro valor calculado dentro do metodo,
EX. um método que retorno o dobro do valor passado:

public int dobro(int x){
   x += x;
   return x;
}

intão em um outro momento você pode pegar esse valor retornado:

[code]
//…
int y = 2;
int z = 0;

z = dobro(y);

System.out.println(z);//imprimirá 4
//…[/code]

a mesma coisa serve pra os outros tipos de retorno como float, double, string, mudando somente o tratamento dentro do método.

[]'s

1 curtida

Quando dizemos que VOID não tem retorno queremos dizer que todo o processo é executado nele mesmo. EX:

public static void main(String [] args){ ....System.out.println("Hello World); }

Todo o processo ocorre dentro dele mesmo.

No caso dos retorno funcionam dessa forma:

[code]
//Nesse caso O fato da assinatura ser main não faz com que o código apresente no console pois o padrão é void(String[]args)
public static int main(){

//Nesse caso temos um retorno que é o numero 5

return 5;
}[/code]

Se fosse um método String deve retornar uma String

[code]public static String main(){

String hello = “Hello”;

return hello;

}[/code]

Todos os casos tem diferenças sim pois se derrepente você precisar utilizar o retorno do método é possível: EX Prático:


class Teste{

public String mostrarNome(String nome){
return "Meu Nome é: " + nome;
}

//Usando o retorno do método:
public static void main(String[]args){
String nome = mostrarNome("Qualquer");

System.out.println(nome);
}
}

Ao imprimir no console irá imprimir : Meu nome é Qualquer.

Ou seja você usou o retorno do método dentro da variável nome para imprimir no console o valor Meu nome é Qualquer.
e isso vale para todos os tipos primitivos, classes e outros.

public static void main(String [] args){} é o método principal para executar o console, isso é um padrão no java.
Flw.

1 curtida

Oi,

A sua dúvida é muito natural. Porém posso lhe informar que a “coisa” é mais fácil do que parece…

A declaração mais simples de um método é:

public void [nome_do_metodo] () { [corpo_do_metodo] }

Onde [nome_do_metodo] é um identificador que define o nome pelo qual o método é conhecido, e [corpo_do_metodo] é o desenvolvimento ou desbravamento propriamente dito deste método. No caso acima, a palavra chave ‘void’, define o valor retornado pelo método, neste caso, nenhum.

O que difere de:

public int [nome_do_metodo] () { [corpo_do_metodo] }

Neste caso, a palavra chave é ‘int’, no qual retornará um valor Inteiro a quem chamar este método.

Melhor explicando:

class Teste { public void print() { System.out.println("Oi, eu sou a Lina"); } }

Nessa classe Teste foi criado um método chamado print() no qual irá escrever e não retornar o conteúdo: Oi, eu sou a Lina.

O que difere deste:

class Teste { public String print() { return ("Oi, eu sou a Lina"); } }

Note que a palavra chave utilizada foi ‘String’ e dentro deste método print() utilizamos o termo return, indicando que estamos retornando algo e não escrevendo algo.

Logo, pode-se fazer:

[code]class Teste {
public String print() {
return (“Oi, eu sou a Lina”);
}

public void EscrevaNaTela() {
String resultado = print(); // Aqui chamei o método print() que irá retornar uma String.
System.out.print(resultado); // Aqui mostrarei o resultado retornado pelo método print.
}
}[/code]

Ai, espero não ter te confundido!

Tchauzin!

Obrigado a todos, esclareceram bem a minha dúvida… Vocês são professores? :smiley:

Uma outra dúvida, sou iniciante em java, tenho noções de estruturas de repetição, condição, um pouco de orientação a objeto. Gostaria de saber o que é importante aprender e onde na internet eu posso adquirir mais conhecimento com exercícios.

[quote=robferlima]Obrigado a todos, esclareceram bem a minha dúvida… Vocês são professores? :smiley:

Uma outra dúvida, sou iniciante em java, tenho noções de estruturas de repetição, condição, um pouco de orientação a objeto. Gostaria de saber o que é importante aprender e onde na internet eu posso adquirir mais conhecimento com exercícios.[/quote]

A Lina é gerente, eu (que dou meus pitacos de vez em quando aqui) sou só um engenheiro curioso, e assim por diante.
Normalmente o pessoal acaba recomendando ler alguma daquelas apostilas da Caelum que estão na Internet, que provavelmente você deve ter lido.
Se você é realmente um sujeito “caxias”* pode tentar fazer aqueles exercícios do livro do Deitel (que eu particularmente não gosto muito, porque é chato e extenso demais - mas você não vai ter problema de “falta de exercícios” se for pegar esse livro.

  • Como se diz isso hoje em dia? Eu sou bem antigo (já estou na idade do início da degenerescência cerebral, se é que me entendem), e não queria dizer aquela palavra “CDF” - que é uma coisa antiga também. Não sei como se diz informalmente “uma pessoa aplicada e estudiosa”

Sou estudante de engenharia de computação

se você souber ingles um bom livro pra ler é o livro Head First - Java Second Edition
a segunda edição é a mais recente
acho que existe tambem traduzido esse livro mas não gostei muito da tradução de alguns outros da serie

O livro é ate um pouco repetitivo as vezes mais fixa bem as idéias

[]'s