|
| 1 | +[[A-tricks-to-succeed]] |
| 2 | +[appendix] |
| 3 | +== Dicas para ter sucesso na prova! |
| 4 | + |
| 5 | +Além de validar conceitos importantes da linguagem Java a prova de certificação também exigirá que você esteja atento a detalhes específicos nos códigos de cada questão. Sem o auxílio da IDE, você será o compilador. |
| 6 | + |
| 7 | +Veja alguns exemplos simples que se mostram óbvios mas podem te enganar na hora de marcar a resposta certa. |
| 8 | + |
| 9 | +=== Cenário 1 |
| 10 | + |
| 11 | +[source,java] |
| 12 | +---- |
| 13 | +class Duke { |
| 14 | + static int version = 6; |
| 15 | +
|
| 16 | + public static void main(String[] args){ |
| 17 | + System.out.println("Java" + version) |
| 18 | + version = version + 2; |
| 19 | + } |
| 20 | +} |
| 21 | +---- |
| 22 | +. Compila e imprime "Java6" |
| 23 | +. Compila e imprime "Java8" |
| 24 | +. Não compila |
| 25 | +. Compila, mas ocorre um erro durante a execução |
| 26 | + |
| 27 | +Sem pensar muito a reposta seria a _opção 1_, certo? Errado. Olhando mais atentamente ao código é possível notar que na primeira linha do método `main` está faltando um `;` (ponto-e-vírgula). Esse pequeno detalhe mostra que a opção certa é a 3. |
| 28 | + |
| 29 | +[TIP] |
| 30 | +-- |
| 31 | +Sempre que existir uma resposta falando _código não compila_, verifique duas vezes as regras de compilação antes de testar o comportamento do código e sua possível resposta. |
| 32 | + |
| 33 | +.Checklist mental para validar uma compilação |
| 34 | +* Ponto-e-vírgula |
| 35 | +* Visibilidade |
| 36 | +* Escopo de variáveis |
| 37 | +* Nomes e parâmetros de métodos |
| 38 | +* ... |
| 39 | +-- |
| 40 | + |
| 41 | +- - - |
| 42 | +_Resposta: 3_ |
| 43 | + |
| 44 | +=== Cenário 2 |
| 45 | + |
| 46 | +[source,java] |
| 47 | +---- |
| 48 | +class Duke { |
| 49 | + static int version = 6; |
| 50 | +
|
| 51 | + public static void main(String[] version) { |
| 52 | + version = 8; |
| 53 | + System.out.println("Java" + version); |
| 54 | + } |
| 55 | +} |
| 56 | +---- |
| 57 | +. O código compila e roda, imprimindo "Java8". |
| 58 | +. O código não compila. |
| 59 | +. O código compila e roda, imprimindo "Java6". |
| 60 | +. O código compila mas dá erro em execução. |
| 61 | + |
| 62 | +Se você escolheu a opção 1, você errou... Esse exemplo tem outra pegadinha com o conceito de _shadowing_. Usa-se o mesmo nome de váriável mas com um escopo diferente. Inicialmente o tipo `int` engana sua reposta mas esse código não compila ao tentar atribuir um valor `int` à uma variável do tipo `String[]`. |
| 63 | + |
| 64 | +- - - |
| 65 | +_Resposta: 2_ |
| 66 | + |
| 67 | +=== Cenário 3 |
| 68 | + |
| 69 | +[source,java] |
| 70 | +---- |
| 71 | +class Duke { |
| 72 | +
|
| 73 | + public static void main(String[] args) { |
| 74 | + boolean dukeClones = new boolean[100]; |
| 75 | + System.out.println(dukeClones[10]); |
| 76 | + } |
| 77 | +} |
| 78 | +---- |
| 79 | +. Imprime `1` |
| 80 | +. Imprime `0` |
| 81 | +. Imprime `false` |
| 82 | +. Imprime `true` |
| 83 | +. Imprime `null` |
| 84 | +. Erro de execução |
| 85 | +. Não compila |
| 86 | + |
| 87 | +A escolha mais comum seria a opção 3, onde confirma que o valor padrão de cada posição de um array do tipo _boolean_ é _false_. Esta opção estaria certa, se não fosse uma pegadinha. Este código na verdade *não compila*. A opção certa seria a número 7. Isso porque a variável _dukeClones_ é um _boolean_ simples tentando receber um array do tipo _boolean_. |
| 88 | + |
| 89 | +[TIP] |
| 90 | +-- |
| 91 | +Em uma inicialização implícita como membro de uma classe, ou cada posição de um array, etc, a variável recebe o valor padrão respeitando a seguinte regra: |
| 92 | + |
| 93 | +* _boolean_ -> *_false_* |
| 94 | +* _char_ -> *vazio*, equivalente a 0 |
| 95 | +* Primitivos numéricos inteiros -> *0* |
| 96 | +* Primitivos numéricos com ponto flutuante -> *0.0* |
| 97 | +* Referências (Objetos) -> *_null_* |
| 98 | +-- |
| 99 | + |
| 100 | +- - - |
| 101 | +_Resposta: 7_ |
0 commit comments