HelloWorld

Esta página é parte da seção Exercícios do curso de Programação Orientada a Objetos do Prof. Perroti.

Segundo a Wikipedia, Hello World é um famoso primeiro programa de computador para quem está começando a aprender uma linguagem de programação.
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.

## Hello World no NetBeans

### Iniciando no NetBeans

1. Criar um Novo Projeto;
2. Escolher Categoria de Projeto;
3. Escolher Nome e Localização do Projeto;
4. Manter a Opção "Criar Classe Principal" ativada;
5. Finalizando a criação do Novo Projeto.

#### Etapas para a criação de um Novo Projeto

 5

```
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 **Seta 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 na Janela do Código

1. Comentário Inicial (/\*comments\*/);
2. Palavra Reservada **Pacote** (package);
3. Início e Corpo da **Classe** (class);
4. Método **Principal** (main);
5. Espaço de **Codificação** (TODO code).

```
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
       package hello;

       /**
       * @author Hadston
*/
       public class Hello {

           /**
            * @param args the command line arguments
     */
           public static void main(String[] args) {
        // TODO code application logic here

        **System.out.println("Oi Mundo!!!!!");**

    }

}

```

### Analisando o Programa Criado

#### Comentários

O programa inicia com algumas linhas de comentário que informam como alterar o template (modelo) usado para criar o programa com o assistente.

* **Comentário de Bloco** - Assim como na linguagem C, os caracteres **/\*** *iniciam comentário* e os caracteres **\*/** *encerram comentário*.

* **Comentário de Linha** - Também é possível usar os caracteres **//** para criar uma *linha de comentário*. Neste caso, tudo o que for escrito após os caracteres até o final da linha é considerado comentário.

#### Pacote

Em seguida, vemos uma linha com:

```
**package** hello;

```

A **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.

#### Classe

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

```
public **class** Hello {

```

* Modificador de visibilidade **public** - no início da linha *indica que a classe Hello é pública*.

* Palavra Reservada **class** - 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.

* Definição **Hello** - é 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.

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 main é o único método.

**IMPORTANTE:** Diante da possibilidade de a Classe e o Método, por padrão, ter o mesmo nome, no início pode ficar meio confuso, mas são coisas completamente diferentes. A classe Hello/**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).

#### 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!!!!!");
}

```

##### **A classe Principal do pacote e seu método main**

Se estivermos criando uma aplicação, *é obrigatório que a classe principal (a Hello) 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.

* Palavra Reservada **void** - 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.
* Palavra Reservada **static** - 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.
* Modificador de Visibilidade **public** - 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.
* Definição de Parâmetros **String [ ] args** - 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.

#### Comando Imprimir no Console

Para finalizar, temos o comando que realmente imprime a string dentro do método main.

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

```

* Objeto **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.
* Objeto **out** - Um dos atributos de System é o objeto out que representa a stream de saída padrão do sistema (equivalente ao STDOUT do C).
* Método **println** - é um método do objeto out que permite imprimir uma string na saída padrão (console).
* String de Saída **"Oi mundo!!!!!"** - é o texto que se quer imprimir na saída padrão.

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

1. Instanciando o Objeto String;
2. Atribuindo um valor a variável String;
3. Referenciando o Objeto String.
4. Invocando um Método do Objeto String.

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.

#### Instanciando o Objeto String

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.

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

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

```

#### Atribuindo um valor a variável String

Ao atribuir um valor para uma variável String, estamos na verdade criando uma instância para a classe, ou seja, criando um objeto.

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

    **st = "Oi mundo!!!!!";**

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

```

#### Referenciando o Objeto String

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 um objeto String antes de ser impresso.

#### Invocando um Método do Objeto String

Isso permite alguns recursos adicionais que antes não eram possíveis, por exemplo, é possível usar métodos da classe String para processar o texto antes de imprimir. Altere a linha que imprime o texto como sugerido abaixo:

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

    st = "Oi mundo!!!!!";

    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

Introdução ao Desenvolvimento na Interface - https://netbeans.org/kb/docs/java/gui-functionality.html