Mini-teste: Desmistificando a Certificação SCJP6 Parte X - Parte 6 B

Veja neste artigo uma sequencia de questões bem interessantes.

  1. Com o seguinte código:
    package devmedia; import java.io.File; import java.io.IOException; public class Teste { /** * @param args */ public static void main(String[] args) { try { new File("file.txt").createNewFile(); } catch (IOException e) { e.printStackTrace(); } } }
    O que ocorre?
    1. O coletor de lixo pode entrar em ação para coletar o arquivo.
    2. É criado um arquivo sem uma referência
    3. Não é possível referenciar o arquivo criado
    4. O arquivo não pode ser usado, uma vez que nenhuma referência aponta para ele
    5. É criada uma referência sem arquivo
    6. Essa sintaxe de criação de arquivos não é valida
  2. Dado o seguinte trecho de código:
    Writer wr = new BufferWriter(xxx);
    O que pode ficar no lugar de xxx?
    1. new BufferedWriter(new FileWriter(new File(“arq.txt”)));
    2. new File(“arq.txt”);
    3. new FileWriter(“arq.txt”);
    4. new PrintWriter(new File(“arq.txt”));
    5. new FileReader(“arq.txt”);
  3. Observe:
    package devmedia; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; class Automovel { String marca="DM"; } class Carro extends Automovel implements Serializable{ int numPortas = 5; } public class TesteSerializacao { /** * @param args */ public static void main(String[] args) { Carro c = new Carro(); c.marca="Java"; System.out.print(c.marca); try{ FileOutputStream fos = new FileOutputStream("teste.txt"); ObjectOutputStream os = new ObjectOutputStream(fos); os.writeObject(c); os.close(); FileInputStream fis = new FileInputStream("teste.txt"); ObjectInputStream oi=new ObjectInputStream(fis); c = (Carro)oi.readObject(); oi.close(); }catch (Exception e) { e.printStackTrace(); } System.out.print(c.marca); } }
    Qual é a saída?
    1. Java Java
    2. DM Java
    3. DM DM
    4. Java DM
    5. O código não compila
  4. Dado:
    package devmedia; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; public class SerializacaoMain { /** * @param args */ public static void main(String[] args) { SerialSpecial sp = new SerialSpecial (); try{ ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream("meuArquivo.txt")); os.writeObject(s); os.close(); System.out.print(++s.z+" "); ObjectInputStream is = new ObjectInputStream(new FileInputStream("meuArquivo.txt")); SerialSpecial s2 = (SerialSpecial)is.readObject(); is.close(); System.out.print(s2.y+" "+s2.z); }catch (Exception e) { // TODO: handle exception } } } class SerialSpecial implements Serializable{ transient int y = 7; int z= 9; }
    Quais opções são corretas?
    1. A compilação falha
    2. A saída é: 10 0 10
    3. A saída é: 10 0 9
    4. A saída é: 10 7 9
    5. A saída é: 10 7 10
    6. Para alterar o processo padrão de desserialização, você sobrescreveria o método defaultReadObject(), de Specialserial.
    7. Para alterar o processo padrão de desserialização, você sobrescreveria o método readObject(), de SpecialSerial.
  5. Com o código abaixo:
    package devmedia; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; class Funcionario{ String nome; int idade; Funcionario (){ nome = "Paulo"; idade = 33; } public String toString(){ return nome+ " "+idade+" "; } } class Gerente extends Funcionario implements Serializable{ int departamento; Gerente(){ departamento = 11; } public String toString(){ return super.toString()+departamento; } } public class Principal { /** * @param args */ public static void main(String[] args) { Gerente g = new Gerente(); g.departamento = 21; g.nome="Pedro"; g.idade=45; try{ FileOutputStream fos=new FileOutputStream("teste1.ser"); ObjectOutputStream oos = new ObjectOutputStream(fos); oos.writeObject(g); FileInputStream fis = new FileInputStream("teste1.ser"); ObjectInputStream ois = new ObjectInputStream(fis); Gerente x = (Gerente)ois.readObject(); ois.close(); System.out.println(x); }catch (Exception e) { // TODO: handle exception } } }
    Qual é a saída?
    1. Pedro 45 21
    2. Paulo 33 21
    3. null
    4. O código não compila
    5. É lançada uma exceção

GABARITO COMENTADO

  1. Resposta A, B, C e D

    Realmente, é criado um arquivo físico, porém, como não existe referência a ele, não é possível utilizá-lo. Como há o objeto, mas não há referência a ele, o garbage collector pode agir, uma vez que ele já está marcado para coleta de lixo. A sintaxe é válida, entretanto, para manipular o arquivo dentro do programa, é inútil.

  2. Resposta A, C e D

    O construtor BufferedWriter pode receber qualquer Writer, isso quer dizer quwe, qualquer instância de classe que passe no teste é-um para um Writer. Assim:

    • FileWriter é um Writer (opção C)
    • PrintWriter é um Writer (opção D)
    • É notório ressaltar que um PrintWriter pode receber um File em um dos seus construtores.
    • BufferedWriter é um Writer (opção A)
  3. Resposta D

    Primeiro, perceba que existe uma relação hierárquica entre as classes Carro e Automovel. No processo de desserialização, como Carro não tem diretamente o atributo marca, uma vez que ele é herdado, então no final do processo a marca será DM.

  4. Resposta C e G

    Iniciaremos a explicação pelo atributo com modificador transient. Ele não será levado em consideraçãona serialização. O outro atributo é comum. Entretanto, a modificação é feita depois da serialização e não será levada. Lembre-se de que o estado do objeto precisa ser conservado.

    Para modificar o processo padrão de desserialização, você sobrescreveria o método readObject(), de SerialSpecial.

  5. Resposta B

    Existe uma relação de hierarquia entre as classes. No processo de desserialização, o construtor da classe pai é executado. Desse modo, todos os atributos que forem exclusivos da classe pai serão retornados. O que for da classe filho e tiver sido alterado antes da serialização terá o seu estado mantido.

Em breve daremos continuidade nesta série com mais um artigo.


Leia todos artigos da série

Ebook exclusivo
Dê um upgrade no início da sua jornada. Crie sua conta grátis e baixe o e-book

Artigos relacionados