# Introdução ao Java/Fundamentos

Esta aula será uma referência para você iniciar no Java, pois contem informações básicas sobre a linguagem.
No texto a seguir você encontrará temas que serão importantes para iniciar o seu primeiro programa, mas depois servirá apenas como referência.
Se você é iniciante e ainda não leu esta aula, deverá buscar motivação e continuar a leitura.

## Palavras-chave (ou Palavras Reservadas)

As palavras-chave são palavras reservadas pelo Java, que você não poderá utilizar nos seus programas como nome de variáveis, classes ou métodos. Estas palavras tem um significado específico para o compilador, são expressões que determinam o que o seu programa irá fazer. Não se preocupe com a funcionalidade de cada palavra, por enquanto basta saber que são reservadas.
Abaixo a lista de todas as palavras-chave (reservadas) do Java:
| abstract | continue | for | new | switch |
| assert (3) | default | goto (1) | package | synchronized |
| boolean | do | if | private | this |
| break | double | implements | protected | throw |
| byte | else | import | public | throws |
| case | enum (4) | instanceof | return | transient |
| catch | extends | int | short | try |
| char | final | interface | static | void |
| class | finally | long | strictfp (2) | volatile |
| const (1) | float | native | super | while |
(1) não utilizado; (2) a partir da versão 1.2; (3) a partir da versão 1.4; (4) a partir da versão 5;
Observação: Observe que todas as palavras reservadas foram escritas em letras minúsculas. Os programas escritos em Java são "case sensitive", ou seja, o compilador considera diferente as letras maiúsculas das minúsculas.

## Sintaxe da Linguagem Java

* A sintaxe do Java é muito parecida com C;
* A linguagem é case sensitive, ou seja, letras minúsculas são diferentes de maiúsculas;
* Blocos de códigos são colocados entre "{" e "}";
* Ao final de cada instrução deve-se encerrar a linha com ";", a vantagem é a possibilidade de ter uma instrução em várias linhas;

### Comentários

"Comentários" são textos inseridos no código pelos programadores que não serão lidos pelo compilador Java. São utilizados para fazer anotações dentro do código normalmente para explicar o que aquele trecho de código faz ou para lembrar alguma coisa importante, mas não há regras, limites ou obrigações para utilização de comentários, fica a critério do programador.
Existem n formas de incluir um comentário no código do programa:
* Comentário de final da linha: basta inserir "//" (duas barras) e em seguida inserir o texto/comentário. Todo texto que estiver entre "//" e o final da linha será ignorado pelo compilador.
* Bloco de comentário: Para iniciar um bloco de comentário utilize "/*" (barra e asterísco) e para finalizar "*/" (asterísco e barra). Todo texto que estiver entre "/*" e "*/" será ignorado pelo compilador.

### Convenções

Convenções são boas práticas adotadas pela comunidade de desenvolvedores que padronizam o "jeitão" de se escrever um código Java. Estas convenções foram tão bem elaboradas e divulgadas que hoje em dia é difícil aceitar um programa que não esteja apoiando tais convenções. São tão bem vindas que viraram regras.
As razões principais para a utilização destas convenções são:
* Dificilmente um programador ficará eternamente responsável pela manutenção do código;
* Aumento de produtividade uma vez que o programa fica mais legível;
* Padrão de usabilidade bem aceito por quem lê o código.
Comentários iniciais do código
Sempre iniciar um arquivo .java com um bloco de comentários com informações importantes sobre a classe.
Package e Import
Logo após os comentários iniciais, declarar o pacote e depois importar as classes necessárias.
Indentação
A identação é o recuo de um texto se comparado com as linhas anteriores. Todo programa Java de ter suas linhas indentadas para definir a estrutura do código, determinando "o que está dentro do que". O objetivo é tornar o código mais legível. Por padrão, utiliza-se 4 ou 2 espaços para cada nível de indentação.
Classes e Interfaces
Os nomes das Classes e Interfaces devem iniciar com letras maiúsculas, bem com a primeira letra de cada palavras que compoem o nome da classe ou Interface. Exemplo:
Atributos e Métodos
Os nomes dos atributos e métodos devem iniciar com letras minúsculas e a primeira letra de cada palavra deve iniciar com letra maiúscula. Exemplo:
Constantes
Constantes são atributos que não serão modificados durante a execução do programa. O nome de qualquer constate deve ser definido com todos os caracteres maiúsculos e as palavras separadas por "_". Exemplo:

### Atributos e Métodos

* Atributos: são criados nos

### Operadores

Operadores Aritméticos
| Operador | Operação | Exemplo | Resultado |
| + | Adição | x = 5 + 5; | 10 |
| - | Subtração | y = 6 - 2; | 4 |
| * | Multiplicação | m = 2 * 4; | 8 |
| / | Divisão | d = 8 / 4 | 2 |
Operadores Relacionais
| Operador | Significa | Exemplo | Resultado |
| == | __Igual á__ | 5 == 5 | Verdadeiro |
| != | __Diferente de__ | 7 != 7 | Falso |
| > | __Maior que__ | 10 > 7 | Verdadeiro |
| < | __Menor que__ | 7 < 8 | Verdadeiro |
| <= | __Menor e igual á__ | 8 <= 8 | Verdadeiro |
| >= | __Maior e igual á__ | 8 >= 6 | Verdadeiro |
Operadores Lógicos
| Operador | Significa | Exemplo | Resultado |
| || | __Ou__ | 5 == 6 || 6 != 3 | Ambas opções são válidas, True |
| && | __E__ | 6 == 3 && 4 == 4 | Ambas opções são válidas, False |
| ^ | __Ou Exclusivo__ | 5 == 5 ^ 7 != 3 | As duas não podem ser Verdadeiras, só uma, então False |

## Estruturas condicionais

Uma das coisas mais importantes de uma linguagem para ser considerada útil. Muitas vezes necessitamos verificar algo, e se a verificação for verdadeira, execute algo, exemplos:
Precisamos verificar se é de dia, ou de noite;
É necessário verificar se a média do aluno é maior que 7, se sim, imprima a nota, e diga que o aluno passou, senão, imprima a nota e pedidos de desculpas.
Para isso, usamos as condições, verificamos uma condição, se for verdadeira, faça isso, senão, faça aquilo. Para isso, usamos as instruções if e else. Então, if significa 'se', e else que dizer senão.
exemplo:
Vejamos bem, damos a função if, e passamos de parâmetros uma condição, usando os operadores relacionais.
Encadeamento de condicionais
As vezes precisamos verificar algo com if, mas se essa instrução for falsa, ou seja else, mas precisamos verificar algo mais para isso, usamos a função else if
Exemplo:

## Estruturas de repetição ou laços de repetição
#### Introdução a estruturas de repetição

Muitas das vezes, precisamos repetir certa ação, até certo ponto. Por exemplo, você conta de 1 até que chegue no 10, isso é uma estrutura de repetição.
Imagina se te pedem o seguinte: Conte a partir do 1 enquanto a variável de controle for diferente de 20, você não vai imprimir de 1 a 20, use o chamados laços de repetição; São eles:
* while - Significa "enquanto";
* do while - quer dizer, "faça enquanto";
* for - quer dizer "para";
Laço while
While quer dizer enquanto, então, com while repetimos algo enquanto uma condição for verdadeira. E essa condição é passada como parâmetro a função while.
Ps: As vezes nos usamos o operador de incremento, o '++' para incrementar a variável de controle e a repetição seguir;
Exemplo:
Então funciona assim: é verificado se a condição é verdadeira, se sim ele faz, ao chegar no incremento, ou seja "x++", ele vai voltar a condição e verificar se ela é-verdadeira, até ser falsa;
Faça isso em seu editor.
Laço do while
O 'do', quer dizer "faça", então esse laço do while, funciona de forma diferente. Em vez de verificarmos se a condição é verdadeira no começo, verificamos no fim. Então ele vai fazer tal coisa, e verificar se a condição é verdadeira
Exemplo:
Então funciona assim: ele faz o que está no bloco de instrução, e verifica se a condição é verdadeira, se sim, faz de novo e assim sucessivamente;
Laço for
O laço de repetição for, significa para, ele não é o mais importante laço de repetição, mas mais usado. Ele faz o incremento a variável de controle logo no começo ou seja, repetição com variável de controle.
Exemplo:
Então lemos o laço for assim: para i igual á 0 até i ser igual á 10 passo 1. ou seja, nós dizemos até quando o laço vai, e ja incrementamos 1.;

## Modificadores de acesso

* private Todo método ou variável que utilizar este modificador será acessado dentro da sua própria classe;
* protected Métodos ou variáveis acessados por qualquer classe do mesmo pacote ou subclasse;
* public Faz com que uma classe, método ou variável possa ser acessado a partir de qualquer outra classe, inclusive as classes de outros projetos.

## Variáveis

As variáveis são um recurso utilizado para armazenar memória, ou seja, quando declaramos variáveis, alocamos um espaço na memória que vai armazenar valores, são muito importantes. Mas elas são padronizadas em tipo, que se chamam tipos primitivos, e possuem fases, a declaração, a inicialização onde se atribui um valor a mesma, e a manipulação. A declaração segue o modelo Abaixo:
Tipo Nome;
E caso sde atribuição de valores na declaração, ou seja a inicialização, fazemos:
Tipo nome = valor;
Exemplo:
int valor;//Aqui declaramos a variável de tipo primitivo int, ou seja inteiro
valor = 5;//Aqui inicializamos a variável com o valor 5

## Tipos primitivos e classes

A declaração de variáveis pode ser feita de 3 maneiras
Normal:
Tipo nome = valor;
Essa é a forma normal para declarar variáveis.
Type casting:
É usado em algumas situações em que se é necessário forçar que a variável seja de tal tipo
Tipo nome = (Tipo) valor;
É usado para forçar o tipo da variável.
Usando classe, criando objetos
É um pouco mais de orientação a objetos em java, nós ainda não á estudamos mas vamos dar uns conceitos.
Existem diversas classes (e tambem voce pode criar sua propria classe), essas classe servem como um projeto de um objeto , então nós criamos um objeto que irá referenciar uma área da memória e armazenar nele um valor, siga o exemplo:
Classe NomeDoObjeto = new Classe;
A palavra-chave 'new' significa novo, ou seja, criamos um novo objeto de certa classe.

##### Tipos primitivos e classes

Os tipos primitivos são importantes pois Java é uma linguagem Fortemente Tipada , isso quer dizer que é importante ter o tipo ou classe, veja abaixo uma tabela dos tipos primitivos e seus modificadores
| Tipo | Valor | Tamanho | Exemplo |
| int | Armazena valores inteiros | 4 bytes | int i = 9; |
| float | Armazena números com ponto flutuante | | float x = 56f; |
| char | Armazena caracteres únicos | 1 byte | char c = 'a'; |
| bool | Armazena valores booleanos, ou seja true ou false Verdadeiro e false | 1 bit | bool b = false; |

## Modificadores de tipo

Os tipos primitivos possuem modificadores de tipo.
Os modificadores de tipo dos inteiros são:
unsigned - Armazena números bem pequeno e ocupa menos memória
short - Armazena um pouco mais que o unsigned e mais memória
int - Padrão
long - Armazena números grandes e ocupa mais memória
O único modificador do float é o double, que armazena o dobro de float
E outras coisa que gostaria de ressaltar, o tipo char só armazena um único caractere, não se preocupe, há uma classe chamada de String(Nomes de classe tem primeira letra minúscula)
Exemplo:
String nome = "Joao";