# Palavras reservadas

Palavras reservadas são identificadores de uma linguagem que já possuem uma finalidade específica, portanto não podem ser utilizados para nomear variáveis, classes, métodos ou atributos.

A linguagem Java possui 52 palavras reservadas. Todas essas palavras são classificadas em grupos e escritas com letra minúscula, sendo identificadas com uma cor especial pela maioria das IDE's. Abaixo temos a lista de palavras agrupadas por sua finalidades.

![](https://2590158637-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2qZwrhEqcOsERZF1L25d%2Fuploads%2Fgit-blob-d55c8e2cee24f556c8be85dcfbba3022ad042ab4%2Fimage%20\(10\)%20\(1\)%20\(1\)%20\(1\).png?alt=media)

| Controle de pacotes                                                                                                                                                               |
| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| <p><strong>import:</strong> importa pacotes ou classes para dentro do código</p><p><strong>package:</strong> especifica a que pacote todas as classes de um arquivo pertencem</p> |

| Modificadores de acesso                                                                                                                                                                                    |
| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| <p><strong>public:</strong> acesso de qualquer classe</p><p><strong>private:</strong> acesso apenas dentro da classe</p><p><strong>protected:</strong> acesso por classes no mesmo pacote e subclasses</p> |

| Primitivos                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| <p><strong>boolean:</strong> um valor indicando verdadeiro ou falso</p><p><strong>byte:</strong> um inteiro de 8 bits (signed)</p><p><strong>char:</strong> um character unicode (16-bit unsigned)</p><p><strong>double:</strong> um número de ponto flutuante de 64 bits (signed)</p><p><strong>float:</strong> um número de ponto flutuante de 32 bits (signed)</p><p><strong>int:</strong> um inteiro de 32 bits (signed)</p><p><strong>long:</strong> um inteiro de 64 bits (signed)</p><p><strong>short:</strong> um inteiro de 32 bits (signed)</p><p><strong>void:</strong> indica que o método não tem retorno <strong>de valor</strong></p> |

| Modificadores de classes, variáveis ou métodos                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| <p><strong>abstract:</strong> classe que não pode ser instanciada ou método que precisa ser implementado por uma subclasse não abstrata</p><p><strong>class:</strong> especifica uma classe</p><p><strong>extends:</strong> indica a superclasse que a subclasse está estendendo</p><p><strong>final:</strong> impossibilita que uma classe seja estendida, que um método seja sobrescrito ou que uma variável seja reinicializada</p><p><strong>implements:</strong> indica as interfaces que uma classe irá implementar</p><p><strong>interface:</strong> especifica uma interface</p><p><mark style="color:red;"><strong>native</strong></mark><strong>:</strong> indica que um método está escrito em uma linguagem dependente de plataforma, como o C</p><p><strong>new:</strong> instancia um novo objeto, chamando seu construtor</p><p><strong>static:</strong> faz um método ou variável pertencer à classe ao invés de às instâncias</p><p><mark style="color:red;"><strong>strictfp</strong></mark><strong>:</strong> usado em frente a um método ou classe para indicar que os números de ponto flutuante seguirão as regras de ponto flutuante em todas as expressões</p><p><strong>synchronized:</strong> indica que um método só pode ser acessado por uma thread de cada vez</p><p><strong>transient:</strong> impede a serialização de campos</p><p><mark style="color:red;"><strong>volatile</strong></mark><strong>:</strong> indica que uma variável pode ser alterada durante o uso de threads</p> |

| Controle de fluxo dentro de um bloco de código                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| <p><strong>break:</strong> sai do bloco de codigo em que ele está</p><p><strong>case:</strong> executa um bloco de código dependendo do teste do switch</p><p><strong>continue:</strong> pula a execução do código que viria após essa linha e vai para a próxima passagem do loop</p><p><strong>default:</strong> executa esse bloco de codigo caso nenhum dos teste de switch-case seja verdadeiro</p><p><strong>do:</strong> executa um bloco de código uma vez, e então realiza um teste em conjunto com o while para determinar se o bloco deverá ser executado novamente</p><p><strong>else:</strong> executa um bloco de código alternativo caso o teste if seja falso</p><p><strong>for:</strong> usado para realizar um loop condicional de um bloco de código</p><p><strong>if:</strong> usado para realizar um teste lógico de verdadeiro o falso</p><p><strong>instanceof:</strong> determina se um objeto é uma instância de determinada classe, superclasse ou interface</p><p><strong>return:</strong> retorna de um método sem executar qualquer código que venha depois desta linha (também pode retornar uma variável)</p><p><strong>switch:</strong> indica a variável a ser comparada nas expressões case</p><p><strong>while:</strong> executa um bloco de código repetidamente enquanto a condição for verdadeira</p> |

| Tratamento de erros                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| <p><mark style="color:red;"><strong>assert:</strong></mark> testa uma expressão condicional para verificar uma suposição do programador</p><p><strong>catch:</strong> declara o bloco de código usado para tratar uma exceção</p><p><strong>finally:</strong> bloco de código, após um try-catch, que é executado independentemente do fluxo de programa seguido ao lidar com uma exceção</p><p><strong>throw:</strong>usado para passar uma exceção para o método que o chamou</p><p><strong>throws:</strong> indica que um método pode passar uma exceção para o método que o chamou</p><p><strong>try:</strong> bloco de código que tentará ser executado, mas que pode causar uma exceção</p> |

| Variáveis de referência                                                                                                            |
| ---------------------------------------------------------------------------------------------------------------------------------- |
| <p><strong>super:</strong> refere-se a superclasse imediata</p><p><strong>this:</strong> refere-se a instância atual do objeto</p> |

| Palavras reservadas não utilizadas                                                                                                                                                           |
| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| <p><strong>const:</strong> Não utilize para declarar constantes; use public static final</p><p><strong>goto:</strong> não implementada na linguagem Java por ser considerada prejudicial</p> |

| Literais reservados                                                                                                                                                                                                                            |
| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| De acordo com a Java Language Specification, **null**, **true** e **false** são tecnicamente chamados de valores literais, e não keywords. Se você tentar criar algum identificador com estes valores, você também terá um erro de compilação. |

#### Escopo de uso

| Uso      | Palavras                                                                     | Observação                                                           |
| -------- | ---------------------------------------------------------------------------- | -------------------------------------------------------------------- |
| Arquivo  | package, import, static                                                      |                                                                      |
| Classe   | public ou protected ou private + final ou abstract + extends ou implements   | **private** (em caso de classe interna), **final** ou **abstract** ? |
| Método   | public ou protected ou private + static ou final ou abstract + void e return | **void** em caso de não ter retorno ou **return** se houver          |
| Atributo | public ou protected ou private + static ou final + tipo primitivo            | \*\*\*\*                                                             |

#### Palavras "opostas"

Assim como nas classificações gramaticais da língua portuguesa, existem algumas palavras que são completamente opostas (antônimas) na linguagem Java conforme tabela abaixo:

| Palavra | Palavra    | Explicação                                                                                                                                                                                                                                                                    |
| ------- | ---------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| package | import     | Enquanto **package** determina o diretório real da classe, o **import** informe de onde será imprtada a classe. Isso porque podemos ter classes de mesmo nome.                                                                                                                |
| extends | implements | enquanto **extends** determinas que uma classe estende outra classe, **implements** determina que uma classe implementa uma interface, porém nunca o contrário                                                                                                                |
| final   | abstract   | enquanto **final** determina fim de alteração de valor ou lógica comportamental, **abstract** em métodos exige que sub-classes precisarão definir comportamento é um método abstrato. NOTA: Se uma classe contém um único método abstrato, toda classe precisa ser.           |
| throws  | throw      | Esta é uma das situações mais complicadas de compreensão destas duas palavras. Enquanto a **throws** determina que um método pode lançar uma exceção, **throw** é a implementação que dispara a exceção\*\*. Vamos conhecer mais sobre este conceito no assunto Exceções.\*\* |

#### Referência

{% embed url="<http://www.linhadecodigo.com.br/artigo/83/as-52-palavras-reservadas-do-java.aspx>" %}
