Assumindo o seguinte código:
70. class MakeFile {
71. public static void main(String[] args) {
72. try {
73. File directory = new File(“d”);
74. File file = new File(directory, “f”);
75. if(!file.exists()) {
76. file.createNewFile();
77. }
78. } catch (IOException e) {
79. e.printStackTrace
80. }
81. }
82. }
O diretório atual não contém um diretório nomeado “d”. Quais alternativas a seguir podem ser consideradas corretas?
A. Linha 76 nunca é executada.
B. Uma exceção é disparada em tempo de execução.
C. Linha 73 cria um objeto File nomeado “d”.
D. Linha 74 cria um objeto File nomeado “f”.
E. Linha 73 cria um diretório nomeado “d” no sistema de arquivos.
F. Linha 76 cria um diretório nomeado “d” e um arquivo “f” dentro do sistema de arquivos.
G. Linha 74 cria um arquivo nomeado “f” dentro do diretório nomeado “d” no sistema de arquivos.
No enunciado da questão é informado que não há um diretório “d” criado no diretório atual do programa. Com essa informação, a alternativa G já pode ser descartada visto que a aplicação só está acessando o diretório atual (pelo que é apontado nas instanciações dos objetos de File) e não há diretório “d” criado anteriormente. E este mesmo diretório não pode ser criado por esse programa, nem na instanciação do objeto diretorio, nem no comando da linha 76. Nessa situação, somente seria possível a criação de um arquivo (neste caso o que é referenciado pelo objeto file), caso o diretório “d” já existisse. Essa última informação inviabiliza as alternativas E e F.
Mesmo não existindo o diretório “d” e o arquivo “f”, é possível instanciar os objetos directory e file. O único problema ocorrerá quando se tenta acessar o arquivo físico apontado por esses objetos. Esse momento acontece na execução da linha 76 (criação de novo arquivo), em que não há acesso ao arquivo real e dispara-se uma exceção em tempo de execução. Dessa maneira, a alternativa A se mostra incorreta enquanto B se apresenta como uma das alternativas corretas. As demais são as opções C e D, que não provocam erros no programa.
Alternativas corretas: B, C, D.
Eu e mais alguns colegas de trabalho iniciamos um grupo de estudo para a certificação SCJP. Postaremos aqui todas questões estudadas, suas respectivas respostas e nossos comentários sobre elas. Espero que seja tão útil para quem lê, quanto é para nós...
Mostrando postagens com marcador Exception. Mostrar todas as postagens
Mostrando postagens com marcador Exception. Mostrar todas as postagens
quarta-feira, 4 de agosto de 2010
Questão 15 - Classe File
Marcadores:
Exception,
Manipulação de arquivos
Questão 13 - Herança de Exceptions
Dado o código abaixo:
63. try {
64. // algum código neste trecho
65. } catch (NullPointerException e1) {
66. System.out.print(“a”);
67. } catch (RuntimeException e2) {
68. System.out.print(“b”);
69. } finally {
70. System.out.print(“c”);
71. }
Qual o resultado obtido se ocorrer a exceção NullPointerException na linha 64?
A. c
B. a
C. ab
D. ac
E. bc
F. abc
A ordem das exceções NullPointerException e RuntimeException não é disposta de forma aleatória. A exceção NullPointerException herda de RuntimeException, e esta última herda de Exception. Seguindo essa lógica, a exceção NullPointerException é apresentada antes das demais para permitir que a mesma possa ser disparada quando necessário, senão sua superclasse engloba sua execução. Caso isso não acontecesse, seria um erro de compilação.
Com esse raciocínio, se acontecer o código “int array[] = {1, 2}; array[2] = 3;” na linha 64, dispara-se a exceção RuntimeException, o que permite exibir a saída bc. Isso é possível porque o código citado dispara a exceção ArrayIndexOutOfBoundsException que herda de RuntimeException, e ainda há a execução constante do código presente na área de finally. Essas informações inviabilizam as alternativas A, B e E.
Como subclasse especificada, quando se dispara a exceção NullPointerException dispensa-se a exceção RuntimeException na execução do programa. Assim, o código presente na linha 68 nunca será executado quando isso ocorrer com a linha 66. Portanto, as alternativas C e F estão incorretas e apenas a alternativa D é viável. Pode-se verificar isso se na linha 64 tivermos o código “int array[] = {1, 2}; Integer i = null; array[i.intValue()] = 3;”. Nessa codificação, o objeto i possui referência nula e não permite a execução da atribuição do valor 3 no objeto array. Alternativa correta: D.
63. try {
64. // algum código neste trecho
65. } catch (NullPointerException e1) {
66. System.out.print(“a”);
67. } catch (RuntimeException e2) {
68. System.out.print(“b”);
69. } finally {
70. System.out.print(“c”);
71. }
Qual o resultado obtido se ocorrer a exceção NullPointerException na linha 64?
A. c
B. a
C. ab
D. ac
E. bc
F. abc
A ordem das exceções NullPointerException e RuntimeException não é disposta de forma aleatória. A exceção NullPointerException herda de RuntimeException, e esta última herda de Exception. Seguindo essa lógica, a exceção NullPointerException é apresentada antes das demais para permitir que a mesma possa ser disparada quando necessário, senão sua superclasse engloba sua execução. Caso isso não acontecesse, seria um erro de compilação.
Com esse raciocínio, se acontecer o código “int array[] = {1, 2}; array[2] = 3;” na linha 64, dispara-se a exceção RuntimeException, o que permite exibir a saída bc. Isso é possível porque o código citado dispara a exceção ArrayIndexOutOfBoundsException que herda de RuntimeException, e ainda há a execução constante do código presente na área de finally. Essas informações inviabilizam as alternativas A, B e E.
Como subclasse especificada, quando se dispara a exceção NullPointerException dispensa-se a exceção RuntimeException na execução do programa. Assim, o código presente na linha 68 nunca será executado quando isso ocorrer com a linha 66. Portanto, as alternativas C e F estão incorretas e apenas a alternativa D é viável. Pode-se verificar isso se na linha 64 tivermos o código “int array[] = {1, 2}; Integer i = null; array[i.intValue()] = 3;”. Nessa codificação, o objeto i possui referência nula e não permite a execução da atribuição do valor 3 no objeto array. Alternativa correta: D.
Marcadores:
Exception
Questão 11 - Exception
Classe TestException:
1. public class TestException extends Exception {}
Classe A:
1. public class A {
2. public String sayHello(String name) throws TestException {
3. if(name == null) {
4. throw new TestException();
5. }
6. return “Hello ”+ name;
7. }
8. }
Um programador quer usar este código em uma aplicação:
55. A a = new A();
56. System.out.println(a.sayHello(“John”));
Quais as alternativas corretas relacionadas a essa implementação?
A. Classe A não compilará.
B. Linha 56 pode disparar a exceção TestException que não foi checada.
C. Linha 55 pode disparar a exceção TestException que não foi checada.
D. Linha 56 compila se adicionar TestException na declaração do método que apresenta esse código.
E. Linha 56 compila se estiver dentro de um bloco try-catch, em que a exceção TestException é tratada.
A Classe A não apresenta erros apesar de ter um método que aborda a exceção TestException. Esta última não apresenta implementação no corpo da classe, mas possui uma codificação herdada de Exception. E no código da aplicação (linhas 55 e 56) não há possibilidade de se disparar a exceção porque a mesma não foi checada no código. Assim as alternativas A, B e C são descartadas, enquanto que as demais opções são mantidas e estão corretas.
As alternativas D e E apresentam as duas opções possíveis para viabilizar a execução do código da aplicação. Na opção D, menciona-se que indicar o tratamento da exceção TesteException no método que chama sayHello() permite a execução do código (mesmo que seja o método principal). E na opção E, destaca-se o tratamento desta mesma exceção inserindo o código da questão em um bloco try-catch (ou caso seja necessário, um bloco try-catch-finally) para resolver o problema.
Alternativas corretas: D, E.
1. public class TestException extends Exception {}
Classe A:
1. public class A {
2. public String sayHello(String name) throws TestException {
3. if(name == null) {
4. throw new TestException();
5. }
6. return “Hello ”+ name;
7. }
8. }
Um programador quer usar este código em uma aplicação:
55. A a = new A();
56. System.out.println(a.sayHello(“John”));
Quais as alternativas corretas relacionadas a essa implementação?
A. Classe A não compilará.
B. Linha 56 pode disparar a exceção TestException que não foi checada.
C. Linha 55 pode disparar a exceção TestException que não foi checada.
D. Linha 56 compila se adicionar TestException na declaração do método que apresenta esse código.
E. Linha 56 compila se estiver dentro de um bloco try-catch, em que a exceção TestException é tratada.
A Classe A não apresenta erros apesar de ter um método que aborda a exceção TestException. Esta última não apresenta implementação no corpo da classe, mas possui uma codificação herdada de Exception. E no código da aplicação (linhas 55 e 56) não há possibilidade de se disparar a exceção porque a mesma não foi checada no código. Assim as alternativas A, B e C são descartadas, enquanto que as demais opções são mantidas e estão corretas.
As alternativas D e E apresentam as duas opções possíveis para viabilizar a execução do código da aplicação. Na opção D, menciona-se que indicar o tratamento da exceção TesteException no método que chama sayHello() permite a execução do código (mesmo que seja o método principal). E na opção E, destaca-se o tratamento desta mesma exceção inserindo o código da questão em um bloco try-catch (ou caso seja necessário, um bloco try-catch-finally) para resolver o problema.
Alternativas corretas: D, E.
Marcadores:
Exception
quinta-feira, 29 de julho de 2010
Questão 3 - Try Catch
System.out.println("1");
try {
System.out.println("2");
throw new FileNotFoundException();
}
System.out.println("3");
catch(EOFException e) {
System.out.println("4");
}
catch (FileNotFoundException e ) {
System.out.println("5");
}
A. O código não compila
B. Saída: 125
C. Saída: 124
D. Saída: 1235
Até poderíamos ter algum código compilado, se o System.out.println("3"); não estivesse no meio do bloco try catch, cuidado com este tipo de pegadinha, pois se não prestarmos atenção nisto, responderíamos certamente a opção D ou B, mas o bloco try catch está sintaticamente errado, logo não há como compilar , opção A.
try {
System.out.println("2");
throw new FileNotFoundException();
}
System.out.println("3");
catch(EOFException e) {
System.out.println("4");
}
catch (FileNotFoundException e ) {
System.out.println("5");
}
A. O código não compila
B. Saída: 125
C. Saída: 124
D. Saída: 1235
Até poderíamos ter algum código compilado, se o System.out.println("3"); não estivesse no meio do bloco try catch, cuidado com este tipo de pegadinha, pois se não prestarmos atenção nisto, responderíamos certamente a opção D ou B, mas o bloco try catch está sintaticamente errado, logo não há como compilar , opção A.
Marcadores:
Exception,
Pegadinhas
Assinar:
Postagens (Atom)