Você está na página 1de 8

1. Saiba tudo sobre controle de acesso para o exame.

Haver uma boa quantidade de perguntas para as quais voc dever usar o seu conhecimento sobre o assunto. Quando vir uma questo com lgica complexa, certifique-se de olhar os modificadores de acesso primeiro; 2. Procure questes com uma declarao de mtodo que termine com ponto-evrgula em vez de chaves. Se o mtodo estiver em uma classe e no em uma interface -, ento tanto o mtodo como a classe devem ser marcados como abstract; 3. Quando pensar em acesso padro (default), pense em restries de pacote, sem excees. Mas quando pensar em protected, pense em pacote + filhos; 4. Procure por classes concretas que no forneam implementaes para mtodos abstratos da superclasse; 5. Enums s podem ser declarados com acesso public ou default, assim como uma classe no interna; 6. As chamadas de mtodos polimrficos se aplicam somente a mtodos de instncias; 7. Procure classes que afirmam implementar uma interface, mas no fornecem as implementaes de mtodo corretas. A menos que a classe de implementao seja abstract, ela ter que fornecer implementaes de todos os mtodos definidos na interface; 8. Lembre-se: um mtodo static de uma classe no pode acessar um membro mtodo ou varivel no esttico (de instncia) de sua prpria classe; 9. Procure perguntas que usem nmeros onde os booleanos seriam obrigatrios. Voc pode ver uma avaliao de instruo if que use um nmero, como na linha a seguir:
1 int x = 1; 2 if (x) { } // Erro do compilador

10. Tome cuidado com variveis sombreadas e com erros de escopo em blocos de cdigo como switches, try-catches e loops; 11. Lembre-se que quando duas referncias apontem para o mesmo objeto, se uma delas for usada para alter-lo, as duas sabero da alterao, porque ainda haver somente um objeto. Mas sempre que forem feitas alteraes em uma String, a VM atualizar a varivel de referncia para faz-la apontar para um objeto diferente. Exemplo:
1 String x = "Pablo"; 2 String y = x; // y e x referenciam o mesmo objeto String 3 4 System.out.println("y = " + y); // Imprime 'Pablo' x = x + " Nbrega"; // Altera somente x. Foi criado um novo objeto e a referncia foi atualizada 6 System.out.println("y = " + y); // Continua imprimindo 'Pablo' 5

A sada para esse cdigo ser: y = Pablo y = Pablo

12. No exame ser esperado que voc saiba, por exemplo, que o cdigo abaixo produz apenas um objeto (o array atribuido a varivel de referncia inteiros). Nenhum objeto Integer foi realmente criado.
1 Integer[] inteiros = new Integer[5];

13. As variveis de referncia wrapper podem ser null, portanto tome cuidado com algum cdigo que parea estar realizando operaes seguras com primitivos, mas que lanam NullPointerException. Exemplo:
01 class TesteTempo { 02 static Long tempo; 03 04 05 06 07 static void calculaTempo(int parametro) { System.out.println(parametro + 5); }

public static void main(String[] args) { calculaTempo(tempo); // NullPointerException. 'tempo' 08 no foi inicializada 09 10 } }

14. Nenhuma das classes wrapper pode ser ampliada de uma para outra. Por exemplo: Byte no se amplia para Short, Short no se amplia para Long, etc. O cdigo abaixo no vai funcionar:
01 class TesteAmpliacao{ 02 void ampliar(Long parametro) { 03 04 05 06 07 public static void main(String[] args) { TesteAmpliacao teste = new TesteAmpliacao(); teste.ampliar(new Integer(10)); // impossvel ampliar de 08 Integer para Long 09 10 } } System.out.println(parametro); }

15. Tenha em mente que uma vez que o coletor de lixo entre em ao, no h garantia de que todos os objetos no utilizados sero realmente removidos da memria; 16. Fique atento! A parte do exame referente aos operadores e atribuies normalmente aquela em que os candidatos conseguem menos pontos. Por isso, muita ateno nas questes que envolvem esses assuntos; 17. Voc deve compreender de forma clara como a concatenao de Strings funciona, principalmente dentro de uma instruo print. Veja o exemplo abaixo:

1 int b = 2; 2 System.out.println("" + b + 3); // Imprime '23' 3 System.out.println(b+3); // Imprime 5

18. Procure questes que usem operadores de incremento e decremento em variveis final. Obviamente que qualquer tentativa de utiliz-los nessa situao resulta em uma exceo. 19. Os operadores && e || s funcionam com operadores booleanos. Voc pode encontrar questes que usem inteiros com esses operadores (dando a impresso que estamos usando o operador bit a bit &). Exemplo:
1 if (5 && 6) // Erro de compilao.

20. Retirando-se uma sada forada (break, return, System.exit(), etc), as avaliaes da expresso de iterao e, posteriormente, da expresso condicional, so sempre as duas ltimas coisas a ocorrerem em um loop for. 21. Procure cdigos que invoquem mtodos que declarem uma exceo, mas o mtodo que estiver chamando no manipule ou declare a exceo verificada. Exemplo abaixo:
void aumenta() { // falta mtodo manipular ou declarar a exceo que deveria ser lanada por realizaCalculo() 2 realizaCalculo(); 1 3} 4 5 void realizaCalculo() { // falta mtodo lanar com throws 6 throw new IOException(); 7}

22. Se voc se deparar com a palavra expresso em uma pergunta sobre assertivas e ela no especificar se est se referindo primeira expresso (teste booleado) ou segunda (o valor a ser exibido no rastreamento da pilha), ento assuma que sempre est se referindo ao teste booleano. 23. Os arrays tm um atributo (no um mtodo) chamado length. possvel que voc encontre alguma pergunta que troque o atributo pelo mtodo length(), da classe String, ou vice-versa. Exemplo:
1 String teste = "teste"; 2 System.out.println(teste.length); // Erro de compilao 3}

24. Criar diretrios em Java diferente de criar arquivos. Ao se construir um Reader ou um Writer, automaticamente um arquivo criado, caso no exista. Porm o mesmo no ocorre com diretrios, ou seja, o diretrio no ser criado caso estejamos tentando escrever em um novo arquivo daquele diretrio que voc deseja que exista. Veja o exemplo abaixo e observe que a linha que cria o diretrio est comentada:

1 File diretorio = new File("novoDir"); 2 // diretorio.mkdir(); // Criao de diretrio comentada 3 File arquivo = new File(diretorio, "meuArquivo.txt"); arquivo.createNewFile(); // Exceo por conta de o diretrio 4 no existir.

25. Voc dever saber quais variveis so restauradas com os valores apropriados e quais no so, quando um objeto deserializado. Veja um exemplo:
01 import java.io.*; 02 class SuperClasseNaoSerializada { 03 04 05 public static void main(String[] args) { Leao leao = new Leao(120, "Juba");

System.out.println("antes de deserializar: " + leao.nome + " " + leao.tamanho); 06 try { FileOuputStream fos = new FileOutputStream("arquivo.txt"); 08 ObjectOutputStream oos = new ObjectOutputStream(fos); 07 09 10 11 12 13 try { FileInputStream fis = new FileInputStream("arquivo.txt"); 14 ObjectInputStream ois = new ObjectInputStream (fis); 15 16 17 18 19 20 21 } 22 class Leao extends Animal implements Serializable { 23 24 25 26 27 28 } } String nome; Leao(int t, String n) { tamanho = t; // herdado de Animal nome = n; // no herdado System.out.println("depois de deserializar: " + leao.nome + " " + leao.tamanho); } leao = (Leao) ois.readObject(); ois.close(); } catch (Exception ex) { e.printStackTrace(); } oos.writeObject(leao); oos.close(); } catch (Exception ex) { e.printStackTrace(); }

29 class Animal { 30 int tamanho = 105; 31 }

A sada para esse cdigo ser: antes de serializar: Juba 120 depois de deserializar: Juba 105 26. Ateno: a contagem dos meses em um Calendar comea em 0 (zero); 27. Os objetos DateFormat e NumberFormat podem ter os seus locais definidos somente no momento da instanciao. Cuidado com cdigos que tentam modificar o local de uma instncia existente. Exemplo:
1 class TestaLocal { 2 public static void main(String[] args) { 3 4 5 6} } DateFormat df = DateFormate.getInstance(); df.setLocale(new Locale("it", "IT"));

28. Metacaracteres e Strings no trabalham bem juntos. Portanto, tome cuidado com cdigo como o abaixo, pois ele no compila:
1 class TestaPattern { 2 public static void main(String[] args) { String patternInvalido= "\d"; // Pattern invlido. No compila. 4 Pattern p = Pattern.compile(patternInvalido); 3 5 6} }

29. Quando encontrar uma sobrescrio de equals(), hashCode() e toString() verifique se no houve uma mudana de visibilidade, pois o mtodo deve ser public. Alm disso, observe se no est sendo feita uma sobrecarga, ao invs de sobrescrita. O primeiro cdigo abaixo, por exemplo, invlido e o segundo uma sobrecarga vlida:
1 class ErroEquals { boolean equals(Object o) { // visibilidade default: no 2 compila 3 4 return false; }

5} 1 class Bola { 2 boolean equals(Bola bola) { // sobrecarga vlida 3 4 5} return true; }

30. Na prova, tenha cuidado com a interpretao de certas questes. No confunda, por exemplo, o uso apropriado ou correto do cdigo de hashing, com a validade ou eficincia da soluo implementada;

31. Cuidado para no confundir as classes Collections e Collection. Collection uma interface com as declaraes de mtodos comuns a vrias colees e Collections uma classe com mtodos estticos utilitrios; 32. importante reconhecer o que interface e o que classe concreta quando se trata de colees. O cdigo abaixo no compila porque Map uma interface:
1 class TestaMap { 2 public static void main(String[] args) { 3 4 5} Map<String, String> mapa } = new Map<String, String>();

33. Entenda o funcionamento das classes Comparator e Comparable, pois elas so bastante parecidas. Analise principalmente a forma como elas trabalham e o mtodo que utilizam para efetuar a comparao; 34. Procure por questes no exame que tentem classificar um array de primitivos usando um Comparator, o que invlido; 35. Quando houver classificao de um array ou de uma coleo, os elementos contidos nesses objetos devem ser mutuamente comparveis. Voc no pode ter um Object[], colocar dentro dele um objeto Cachorro e um objeto Gato e depois efetuar uma classificao; 36. Os erros mais comuns em busca e classificao so: o Procurar em um array ou coleo que no tenha sido ordenado; o Usar um Comparator ou s na classificao ou s na busca; 37. Quando converter arrays em Collections ou Collections em arrays, lembre-se que a atualizao em um dos objetos refletir no outro. Observe o cdigo abaixo:
01 class TestaColecoes { 02 public static void main(String[] args) { 03 04 05 06 07 08 09 10 11 } } String[] nomes = {"Pablo", "Nbrega"}; List nomesList = Arrays.asList(nomes); System.out.println("Posio 1 = " + nomesList.get(1)); nomesList.set(1, " - Autor do Post"); for (String s : nomes) { System.out.print(s); }

A sada para esse cdigo ser: Posio 1 = Nbrega Pablo Autor do Post 38. Certifique-se de que voc entende bem a diferena entre compilao falha, compila sem erros, compila sem avisos e compila com avisos. Em genricos e na mistura de cdigo com e sem tipos especficos, os avisos podem fazer diferena;

39. Ao declarar um conjunto no-genrico, o mtodo get() ir retornar Object, portanto necessrio efetuar cast explcito. O cdigo abaixo, por exemplo, no compila:
1 class TestaGenericos { 2 public static void main(String[] args) { 3 4 5 6 7 8} } List teste = new ArrayList(); teste.add(43); int x = teste.get(0); System.out.println(x);

40. Em genricos, os coringas s podem ser usados para declaraes de referncias, ou seja, enquanto uma referncia pode ser abstrata e polimrfica, o prprio objeto criado deve ser de um tipo especfico. Voc precisa definir o tipo quando cria o objeto usando new. O exemplo abaixo no vlido:
1 class TestaGenericos { 2 public static void main(String[] args) { 3 4 5} List<?> animais = } new ArrayList<? extends Animal>();

41. Classes internas locais de mtodos s podem ser instanciadas dentro do mtodo onde foram criadas e acessam normalmente os membros privados da classe externa, entretanto no podero usar as variveis locais do mtodo onde elas estiverem. A nica exceo no caso de as variveis serem final. Veja o cdigo a seguir:
01 class TestaClasseLocalMetodo { 02 public void fazAlgo() { 03 04 05 int x = 1; class ClasseInvalida {

public void naoRoda() { System.out.println("x = " + x); // no compila. 06 'x' no est visvel. Soluo: declarar 'x' como final 07 08 09 10 } } } }

42. Em classes internas annimas, tome cuidado com o ponto-e-vrgula de fechamento da definio da classe. Caso ele no esteja presente, o cdigo no compila. Observe o exemplo:
01 public class Animal { 02 public void pula() {

03 04 05 } 06

System.out.println("pulou"); }

07 class Cachorro { 08 Animal a = new Animal() { 09 10 11 12 13 } public void pula() { System.out.println("pulo 2"); } } // No compila. Falta ponto-e-vrgula

43. Saiba identificar uma classe interna annima que, ao invs de sobrescrever um mtodo da superclasse, define um mtodo novo. 44. Cuidado com instanciao de interface ou classes abstratas. O primeiro cdigo a seguir no roda, mas o segundo sim.
Runnable r = new Runnable(); // No compila. Tentando instanciar uma interface. Runnable r = new Runnable() { // Compila. Classe annima. public void run() { } };

45. muito importante voc saber a maneira como uma thread funciona. O exame tem perguntas a respeito de comportamento garantido em concorrncia que normalmente caem; 46. Ateno com mtodos run sobrecarregados. A classe Thread espera um mtodo run() sem argumentos e o executar ao inici-la. 47. A classe Thread implementa Runnable, portanto perfeitamente fazer o seguinte:
1 Thread t = new Thread(new Thread()); 2 t.start();

48. Lembre-se que uma vez uma thread tenha sido iniciada, ela jamais pode ser iniciada novamente; 49. Ao terminar a execuo do mtodo sleep(), no significa que a thread retornar ao estado de execuo, pois ela fica com o status de executvel. O mtodo sleep(), portanto, no deve ser encarado como um timer preciso; 50. Entenda a estrutura dos comandos javac e java. No teste sempre caem perguntas simples do assunto.

Você também pode gostar