Hello world e alguns conceitos básicos

### **Iniciando no NetBeans**

Para começar a usar os recursos do NetBeans vamos iniciar criando o clássico Hello World. Siga os passos abaixo para criar o programa. Mais adiante, os termos usados no programa serão explicados.

1. Depois de ativar o NetBeans selecione a opção do menu: Arquivo/Novo projeto ou use o atalho Ctrl-Shift-N
2. Uma nova janela será aberta. Nesta janela localize a caixa **Categorias** e selecione a opção **Java** (default). Na caixa **Projetos** selecione a opção **Aplicativo Java** (também default) e clique no botão **Next >**.
3. No campo **Nome do projeto** escreva **Hello**. Por default o Netbeans salva os projetos na pasta Documentos/Netbeans projects. Se quiser que o projeto seja salvo em outro local, clique no botão **Procurar** e selecione a pasta onde o projeto será salvo.
4. No campo **Criar classe principal**, deixe o checkbox ligado (default). Deixe os outros campos com os valores default e clique no botão **Finish**.
5. Neste ponto, o NetBeans já criou a estrutura da aplicação, com a classe principal do programa (**Main**), incluindo o método **main** da classe. Dentro do método **main** (entre as chaves) escreva o seguinte comando:

**System.out.println(“Oi mundo!!!!!”);**

Agora a aplicação está pronta para ser executada. Para isso você pode usar a tecla **F6**, ou clicar na setinha verde que está na barra de atalhos, ou ainda usar a opção do menu **Executar / Executar projeto principal**. A saída do programa é mostrada na caixa de saída (Output) que fica na parte inferior da tela. Se houver algum erro no programa também é ali que as mensagens de erro são mostradas. Se tudo deu certo, a string “Oi mundo!!!!!” aparecerá na caixa de saída.

**Elementos do programa criado**

O programa inicia com algumas linhas de comentário que informam como alterar o template (modelo) usado para criar o programa com o assistente. Assim como na linguagem C, os caracteres **/**\* iniciam comentário e os caracteres **\*/** encerram os comentários. Também é possível usar os caracteres **//** para criar uma linha de comentários. Neste caso, tudo o que for escrito após os caracteres até o final da linha é considerado comentário.

Em seguida, vemos uma linha com:

**package hello;**

**package** (pacote) é uma palavra reservada na linguagem que indica que o arquivo em questão faz parte do pacote **hello**. Um **"package"** é basicamente um agrupamento de classes que estão relacionadas por algum critério. No nosso exemplo, criamos uma aplicação extremamente simples, que só usou uma classe e um arquivo, mas aplicações mais complexas podem exigir várias classes que serão definidas em vários arquivos. Também é comum usar os pacotes como bibliotecas de classes, não necessariamente associadas a uma aplicação específica.

Uma vez criado um pacote, ele pode ser incluído em qualquer aplicação ou implementação de uma classe usando a palavra reservada **import**, mais adiante voltaremos a esse assunto.

A linha seguinte (que não é comentário) aparece como segue:

**public class Main {**

**Main** é o nome da classe que estamos definindo neste arquivo. Note que esse também é o nome do arquivo que tem a extensão .java. Por convenção (não é obrigado), os nomes de classes começam sempre com a primeira letra maiúscula e as outras letras minúsculas. Se o nome for formado por duas ou mais palavras como no nosso exemplo, a primeira letra de cada palavra é escrita com maiúsculas.
**class** também é uma palavra reservada que serve para indicar que o que vem depois é a definição de uma classe. Todo arquivo de aplicação, como o do exemplo, deve ter uma e apenas uma classe pública. É possível ter várias classes no mesmo arquivo, mas apenas uma pode ser pública. A palavra reservada **public** no início da linha indica que a classe **Main** é pública.
Finalmente a linha termina abrindo chaves o que significa que tudo o que vier a seguir e até o fechamento correspondente das chaves é o corpo da classe, onde serão declarados seus atributos e implementados seus métodos. No caso específico desta classe, não há nenhum atributo e o único método é o método **main**.

Mais abaixo encontramos a implementação do método **main** como segue:

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

 System.out.println("Oi mundo!!!!!");
}

```

Se estivermos criando uma aplicação, é obrigatório que a classe principal do programa, tenha um método chamado **main**. Esta classe, na verdade é a própria aplicação. Essa classe nunca deve ser instanciada explicitamente pelo programa, na verdade ela nem precisa ser instanciada porque o único método que ela contém, o método main, é um método de classe e não de instância (veja abaixo). O método **main** será chamado automaticamente e ele é o ponto de partida do programa. É análogo à função main de um programa em C. Note que nem toda classe é uma aplicação e nem sempre as classes são desenvolvidas para uma aplicação específica. Este método só existe na classe principal da aplicação, em outros casos ele não existe.

**IMPORTANTE:** No início pode ficar meio confuso que a classe principal da aplicação e o método **main** tenham, por default, o mesmo nome, mas são coisas completamente diferentes. A classe **Main** (escrito com a inicial em maiúscula) representa a aplicação. Esse nome é só uma sugestão, você pode escolher outro nome quando cria a aplicação no assistente. Já o método **main** é o ponto de partida do programa, por onde a execução é iniciada. A classe principal da aplicação, não importa que nome ela tenha, tem que ter um método chamado **main**, o nome desse método não pode ser mudado, precisa ser **main** (com a inicial em minúscula).

A palavra reservada **void** imediatamente antes do nome do método indica que este método não vai retornar nenhum valor depois que for executado. A palavra reservada **static** indica que este é um método de classe e não de instância. Métodos de classe são chamados a partir da classe, sem ser necessário criar um objeto daquela classe. Mais adiante voltaremos a esse assunto. Finalmente, o modificador **public** indica que é um método público, ou seja, ele é visível e pode ser chamado por qualquer objeto do sistema.

Dentro dos parêntesis vemos o parâmetro **String [ ] args**. Este parâmetro é um vetor de strings e armazena os argumentos passados na linha de comando quando o programa é chamado via linha de comando. Depois dos parâmetros, novamente encontramos a abertura de chaves iniciando o corpo do método **main** e que é encerrado no fechamento de chaves correspondente.

Para finalizar, temos o comando que realmente imprime a string dentro do método **main**. **System** é uma classe do Java que representa os recursos do sistema no programa. Está disponível em qualquer programa feito em Java. Ela oferece atributos e métodos bastante úteis e que serão usados frequentemente. Um de seus atributos é o objeto **out** que representa a stream de saída padrão do sistema (equivalente ao **STDOUT** do C). **println** é um método de **out** que permite imprimir uma string na saída padrão (console).

Note que mesmo o programa mais básico possível, o clássico Hello World, envolve uma grande quantidade de conceitos para ser implementado. Mas não é preciso entrar em pânico, estes conceitos serão retomados durante o curso e com o tempo se tornarão familiares conforme sejam usados com mais freqüência.

**Melhorando o programa**

Vamos agora acrescentar alguns elementos a este programa e aproveitar para conhecer mais alguns conceitos. Veja que o método **main** não declara nenhuma variável e tem apenas um comando para imprimir o texto. Acrescentemos então uma variável local ao método para armazenar o texto que será impresso. Sendo um texto, a variável precisa ser da classe **String**. Note que em Java, **String** não é um tipo primitivo de dados como o **int** ou **double**, mas uma classe que contém seus próprios métodos. Ao atribuir um valor para uma variável String, estamos na verdade criando uma instância para a classe, ou seja, criando um objeto.

Modifique o método main da seguinte forma:

```
public static void main(String[ ] args)
{ String st;

 st = "Oi mundo!!!!!";
 System.out.println(st);
}

```

Ao executar o programa o resultado será exatamente o mesmo de antes, mas agora o texto é armazenado em uma variável de referência da classe String antes de ser impresso.

Altere a linha que imprime o texto como sugerido abaixo:

**System.out.println( st.toUpperCase() );**

Veja que executando o programa agora, o texto aparecerá com todas as letras em maiúsculas porque esse é resultado do método toUpperCase() da classe String. Coloque o cursor logo após o ponto depois de st e pressione Ctrl-Espaço. O NetBeans mostrará uma lista de todos os métodos disponíveis para um objeto da classe String.

**Links recomendados:**

* **Introduction to GUI Building (Netbeans.org)**