Mini-teste: Desmistificando a Certificação SCJP6 Parte X - Parte 6 B
Veja neste artigo uma sequencia de questões bem interessantes.
-
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 coletor de lixo pode entrar em ação para coletar o arquivo.
- É criado um arquivo sem uma referência
- Não é possível referenciar o arquivo criado
- O arquivo não pode ser usado, uma vez que nenhuma referência aponta para ele
- É criada uma referência sem arquivo
- Essa sintaxe de criação de arquivos não é valida
-
Dado o seguinte trecho de código:
Writer wr = new BufferWriter(xxx);
- new BufferedWriter(new FileWriter(new File(“arq.txt”)));
- new File(“arq.txt”);
- new FileWriter(“arq.txt”);
- new PrintWriter(new File(“arq.txt”));
- new FileReader(“arq.txt”);
-
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); } }
- Java Java
- DM Java
- DM DM
- Java DM
- O código não compila
-
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; }
- A compilação falha
- A saída é: 10 0 10
- A saída é: 10 0 9
- A saída é: 10 7 9
- A saída é: 10 7 10
- Para alterar o processo padrão de desserialização, você sobrescreveria o método defaultReadObject(), de Specialserial.
- Para alterar o processo padrão de desserialização, você sobrescreveria o método readObject(), de SpecialSerial.
-
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 } } }
- Pedro 45 21
- Paulo 33 21
- null
- O código não compila
- É lançada uma exceção
GABARITO COMENTADO
-
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.
-
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)
-
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.
-
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.
-
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
- Desmistificando a Certificação SCJP6 - Parte I
- Desmistificando a Certificação SCJP6 - Parte II
- Desmistificando a Certificação SCJP6 - Parte III
- Desmistificando a Certificação SCJP6 - Parte IV - Parte 1
- Desmistificando a Certificação SCJP6 - Parte IV - Parte 2
- Desmistificando a Certificação SCJP6 - Parte V - Parte 1/3
- Desmistificando a Certificação SCJP6 - Parte V - Parte 2/3
- Desmistificando a Certificação SCJP6 - Parte V - Parte 3/3
- Desmistificando a Certificação SCJP6 - Parte VI - Parte 1/3
- Desmistificando a Certificação SCJP6 - Parte VI - Parte 2/3
- Desmistificando a Certificação SCJP6 - Parte VI - Parte 3/3
- Desmistificando a Certificação SCJP6 - Parte VII - Parte 1/3
- Desmistificando a Certificação SCJP6 - Parte VII - Parte 2/3
- Desmistificando a Certificação SCJP6 - Parte VII - Parte 3/3
- Operadores apropriados - Desmistificando a Certificação SCJP6 - Parte VIII - Parte 1
- Instruções if e switch - Desmistificando a Certificação SCJP6 - Parte VIII - Parte 2
- Iteradores e loops - Desmistificando a Certificação SCJP6 - Parte VIII - Parte 3
- Mini-Teste: Desmistificando a Certificação SCJP6 - Parte VIII - Parte 4 - A
- Mini-Teste: Desmistificando a Certificação SCJP6 - Parte VIII - Parte 4 - B
- Tratamento de Exceções em Java: Desmistificando a Certificação SCJP6 - Parte IX - Parte 1
- Definindo Exceções em Java: Desmistificando a Certificação SCJP6 - Parte IX - Parte 2
- Assertivas Java: Desmistificando a Certificação SCJP6 - Parte IX - Parte 3
- Mini-Teste: Desmistificando a Certificação SCJP6 - Parte IX - Parte 4
- String: Desmistificando a Certificação SCJP6 - Parte X - Parte 1
- StringBuilder/StringBuffer e File: Desmistificando a Certificação SCJP6 - Parte X - Parte 2
- Combinação de Classes E/S: Desmistificando a Certificação SCJP6 - Parte X - Parte 3
- Utilizando Arquivos e Diretórios: Desmistificando a Certificação SCJP6 - Parte X - Parte 4
- Console e Serialização: Desmistificando a Certificação SCJP6 - Parte X - Parte 5
- Mini-teste: Desmistificando a Certificação SCJP6 - Parte X - Parte 6 A
- Expressões Regulares: Desmistificando a Certificação SCJP6 Parte XI - Parte 1
- Lista Negada e Metacaracteres: Desmistificando a Certificação SCJP6 Parte XI - Parte 2
- Metacaracteres Âncora e Busca: Desmistificando a Certificação SCJP6 Parte XI - Parte 3
Artigos relacionados
-
Artigo
-
Artigo
-
Artigo
-
Artigo
-
Vídeo