Java/Criando e executando o primeiro programa

Origem: Wikilivros, livros abertos por um mundo aberto.
Saltar para a navegação Saltar para a pesquisa

Para criar o primeiro programa é necessário um editor de texto simples, para a digitação do código-fonte, e o JDK instalado. O procedimento para instalação do JDK é explicado no capítulo anterior.

Etapas[editar | editar código-fonte]

Etapa 1[editar | editar código-fonte]

No editor de texto digite o código exibido abaixo.

public class Teste {
    public static void main(String[] args) {
        System.out.println("Alô mundo!");
    }
}

Salve o arquivo com o nome Teste.java.

Etapa 2[editar | editar código-fonte]

Por meio do terminal entre no diretório onde está o arquivo Teste.java e digite:

javac Teste.java

Etapa 3[editar | editar código-fonte]

E por fim, digite:

java Teste

Será exibido:

Alô mundo!

Explicações[editar | editar código-fonte]

Não se preocupe em decorar as informações desta seção pois elas serão revistas com maior profundidade nos capítulos correspondentes.

Etapa 1[editar | editar código-fonte]

Na 1.ª etapa foi digitado o código-fonte em Java. Código-fonte, à grosso modo, é um conjunto de instruções legíveis por humanos, definidas em uma linguagem de programação, para determinar o que o programa deverá realizar.

A primeira linha do código-fonte utiliza a palavra-chave class para definir uma classe com o nome Teste. O modificador de acesso public, que precede class, não é obrigatório no código acima pois há apenas uma classe sendo definida. [1]

Palavras-chave são palavras que servem como instruções para a linguagem de programação. Essas palavras não devem ser utilizadas para definir identificadores (nomes) de classes e métodos.[2]

Classe é um recipiente de código. Seu corpo, também conhecido como bloco de instruções, é definido entre as chaves de abertura { e fechamento }. No código acima o corpo da classe Teste inicia na primeira linha e termina na última linha. Não definir uma classe com os delimitadores de bloco de instruções (colchetes) causa um erro de compilação.

Na segunda linha, temos o método public static void main(String[] args) dentro do corpo da classe Teste.

Método, conhecido em outras linguagens de programação como função, é subconjunto de instruções que pode ser reutilizado. Assim como as classes, métodos também tem um corpo. Não definir um método com os delimitadores de bloco de instruções (colchetes) causa um erro de compilação.

Os modificadores de acesso public e static e o tipo de retorno void do método main serão abordados no capítulo sobre métodos. Por ora, basta saber que eles são obrigatórios para a compilação do código-fonte. main é o nome do método e (String[] args) define sua lista de parâmetros. [3]

O método main sempre será definido dessa forma para que haja a inicialização do programa. A esses códigos que sempre devem ser repetidos chamamos de código boilerplate.

Dentro do corpo do método main há a instrução System.out.println("Alô mundo!");. O método println é executado através da referência out localizada na classe System. O método em questão recebe como argumento a String "Alô mundo!".

String é uma sequência de caracteres delimitada com um par aspas duplas ".

Argumento é um valor enviado ao método.[4] É possível alterar o argumento no método print para qualquer outra String.

O código dentro da classe está espaçado em 4 colunas e dentro do método main em 8. A esse espaçamento damos o nome de indentação. A indentação não é obrigatória para o funcionamento do programa, mas é uma boa prática, pois aprimora a legibilidade do código. As instruções inseridas dentro de um bloco de instruções são espaçadas em relação ao próprio bloco. No caso de haver um bloco dentro de um bloco então as instruções dentro do bloco mais interno serão espaçados em 2 níveis. Neste livro é utilizado espaçamento de 4 colunas para cada nível, porém pode-se utilizar qualquer quantidade. É comum que ao invés de espaçamento sejam utilizadas tabulações para definir a indentação.

O nome do arquivo deve ser o mesmo da classe acompanhado da extensão .java.[5] Java é case-sensitive o que significa que diferencia letras maiúsculas de minúsculas. Logo, alterar a caixa de algum caracter de Teste.java resulta em erro.

Referências

  1. Os modificadores de acesso de classe serão vistos no capítulo Declaração de Classes.
  2. Regras adicionais no capítulo Identificadores.
  3. Também pode ser utilizado String... args.Mais sobre varargs no capítulo Métodos.
  4. Também a construtores e anotações.
  5. Apenas no caso da classe ser precedida do modificador public. Mais informações no capítulo Declarações de Classes.

Etapa 2[editar | editar código-fonte]

No terminal é utilizado o comando javac Teste.java para compilar as instruções do código-fonte Teste.java em instruções de bytecode do arquivo Teste.class.

javac é o compilador incluído no JDK. Com ele é possível compilar os códigos-fontes .java em arquivos bytecode de extensão .class. No exemplo, o javac após compilar Teste.java produziu o bytecode Teste.class.

bytecode é um arquivo que contém instruções interpretáveis pela JVM (máquina virtual Java). Um bytecode pode ser executado em qualquer Sistema Operacional que contenha uma JVM, o que significa que se um código-fonte é compilado pelo javac em um Windows, teoricamente esse bytecode resultante poderá ser executado pelo comando java em um Ubuntu.

Etapa 3[editar | editar código-fonte]

O bytecode é executado pela JVM ao comando java Teste ser disparado.

O comando java inicia a JVM, que por sua vez irá carregar o bytecode apontado no comando, no caso Teste, irá procurar pelo método main, e caso encontrado, a JVM irá executá-lo.

Ao utilizar o comando java deve-se digitar o bytecode sem a extensão .class. Caso a extensão seja utilizada, o seguinte erro será reportado por java.

java Teste.class
Erro: Não foi possível localizar nem carregar a classe principal Teste.class

Conveções utilizadas neste livro[editar | editar código-fonte]

  • Os códigos-fonte e as saídas de texto (mensagens resultantes no terminal) serão dispostos em caixas cinzas como abaixo.
public class Teste {
    public static void main(String[] args) {
        System.out.println("Exiba isto.");
    }
}
Exiba isto.


  • As saídas de texto tanto podem conter resultados de métodos como print quando o programa é compilado e executado com sucesso (como ocorreu acima) quanto podem apresentar erros de compilação, rastreamento de pilha de exceções e erro na chamada de comandos da JDK tal como java.

Erro apontado na compilação.

Teste.java:1: error: class Test is public, should be declared in a file named Test.java
public class Test {}

Rastreamento de pilha de exceção (do original em inglês: exception stack trace).

Exception in thread "main" java.lang.ArithmeticException: / by zero
	at Teste.main(Teste.java:3)

Erro na sintaxe de comando.

javac: invalid flag: Teste.class
Usage: javac <options> <source files>
use -help for a list of possible options


  • Exceto quando descrito o contrário, todos os códigos ao longo dos próximos capítulos foram escritos dentro do corpo do método main.
System.out.println(42);
42


  • Os números iniciando cada linha do código-fonte servem apenas para ser referenciados no texto, não devendo ser digitados.
3 System.out.println(42);


  • Os conceitos apresentados serão destacados em amarelo.
3 System.out.print("A resposta para a pergunta essencial é: ");
4 System.out.printf("%d\n", 42);


  • Comentários contêm informações importantes sobre o código apresentado.
3 //Classe e método main omitidos.
4 System.out.print("A resposta para a pergunta essencial é: ");


  • No texto, referências às palavras-chaves serão apresentadas em caixas cinzas em linha como em class. Os identificadores (nomes) de métodos, classes e similares estarão em negrito como em "método main".

Exercícios[editar | editar código-fonte]

1

class Teste {public static void main(String[] args) { System.out.println("Testando."); } }


O código acima compilará?

Sim, se usado javac Teste.bytecode.
Sim, se usado javac Teste.java.
Sim, se usado javac Teste.class.
Sim, se usado javac Teste.
Não, apenas se indentado funcionaria.

2

public classe {
    static void main(String[] args) { 
        System.out.println("Alguma mensagem...");
    }}
O código acima compilará?

Sim, se usado javac classe.bytecode.
Sim, se usado javac Classe.class.
Sim, se usado javac classe.java.
Não, está faltando a palavra-chave class.
Não, o nome da classe tem que começar em maiúscula.

3

java Teste.classe

O comando acima executaria?

Sim, sem nenhuma modificação.
Sim, com a extensão .java.
Sim, com a extensão .bytecode/code>.
Não, pois não deve haver extensões.
Não, a extensão deveria ser class.