Duividas...Scopes..Flow Control....Asserts...Serializable

1 resposta
P

duvida se compila na linha int big = Integer.getInteger("7");
na execução da erro de:
e quais alterantivas corretas abaixo …eu pus a letra D

Exception in thread "main" java.lang.NullPointerException
	at br.com.cert.scjp1.Ex06.main(Ex06.java:12)

Section 1: Declarations, Initialization and Scoping > Objective 1.3 > Question 6
Given the five declarations:

int a_really_really_really_long_variable_name = 5;

int _hi =6;

int big = Integer.getInteger("7");

int $dollars = 8;

int %percent = 9;

How many will compile?

A 1 B 2 C 3 D 4 E 5


minha duvida abaixo é a seguinte qdo segundo if
do ++z==44 ele não foi contado mais um essa é minha duvida
para o resultado …

public static void main(String[] args) {
		// TODO Auto-generated method stub
		      boolean x = true;
		       boolean y = false;
		       short z = 42;
		 
		       if((x == true) && (y = true))  {
		    	   System.out.println("passo1");
		    	   z++;
		       }
		       if((y == true) || (++z == 44)){
		    	   System.out.println("passo2");
		    	   z++;
		       }
		 
		      System.out.println("z = " + z);

	}

}

tenho duvida refrente assert pois nunca consegui rodar
e testar esses casos

Section 2: Flow Control > Objective 2.3 > Question 18 
Given: 

 1. class MoreAsserts {
 2.   static int x = 5;
 3.   public static void main(String [] args) {
 4.     assert(doStuff(42));
 5.     if(x < 40) ;
 6.     else assert(false);    
 7.   }
 8.   public static boolean doStuff(int arg) { 
 9.     assert(arg < x++); 
10.     return false; 
11.   }
12. }

Which is true?


A None of the assert statements are appropriate. 
B The assert statement on line 4 is appropriate.
 C The assert statement on line 6 is appropriate.
 D The assert statement on line 9 is appropriate. 
E All three of the assert statements are appropriate.

outra duvida abaixo qdo usar throw new XXXXXXXX() na linha abaixo a esse comando não posso
usar nenhum comando é isso ???

public class Ex21 {
	    public static void main(String [] args) {
	      try {
	        System.out.print("before ");
	        throw new FlowException();
	       // System.out.print("after ");
	      } catch (FlowException fe) {
	        System.out.print("catch ");
	      }
	     System.out.println("done ");
	   }
	 }
	 class FlowException extends Exception { }

essa não entendi ::::
fui na opção A

Section 3: API Contents > Objective 3.2 > Question 28 
Given: 

31.   String s = "write a line to a file";
32.   w.print(s + "\n");

Which is true?

A w can be of either type PrintWriter or BufferedWriter. 
B w can be of NEITHER type PrintWriter nor BufferedWriter.
 C w can be of type PrintWriter, but NOT of type BufferedWriter.
 D w can be of type BufferedWriter, but NOT of type PrintWriter

tb não entendi a pergunta ???
poia resposta é a letra A

Given: 

11. class Ford extends Car implements Serializable { 
12.   Ford() { System.out.print("new Ford "); }
13. }
14.
15. class Car {
16.   Car() { System.out.print("new Car "); }
17. }

If you attempt to deserialize a properly serialized instance of Ford, what is the result?


A new Car 
B new Ford 
C new Car new Ford 
D new Ford new Car 
E Compilation fails. 
F An exception is thrown at runtime. 
--------------------------------------------------------------------------------------------------------

1 Resposta

rodrigo.ferreira

Oi, tudo beleza ?

Vamos ver se conseguimos resolver algumas questões :wink:


Questão 1:

A alternativa correta é a letra D ;

Exatamente 4 opções compilam.

Explicação:

Todas as declarações EXCETO "%" irão compilar normalmente. O método ESTÁTICO Integer.getInteger(String) retornar um Integer (que, neste caso será automaticamente feito UnBoxing para um int primitivo).

Questão 2:

O primeiro if escreve “passo1”, muda o valor de “y” para “true” e incrementa a variável “z”, que passa a ter o valor de “43”.

O segundo if escreve “passo2” e incrementa “z”, que PASSA A SER 44.

A instrução “System.out.println” escreverá “z = 44”.

Chave da história:

O SEGUNDO IF USA UM OPERADOR DE CURTO-CIRCUITO "||" (OU), ou seja, SE A PRIMEIRA CONDIÇÃO FOR SATISFEITA (for true, o que realmente é), A SEGUNDA EXPRESSÃO NÃO SERÁ ANALIZADA/EFETUADA, portanto, "z" NÃO SERÁ INCREMENTADO.

Questão 3:

Essa é uma questão um pouco subjetiva, pois cada pessoa entende isso de uma maneira. Porém, preste bastante atenção na palavra APROPRIADA e não VÁLIDA; resumindo, TODAS AS EXPRESSÕES SERÃO COMPILADAS, PORÉM, EM ALGUNS CASOS SUA UTILIZAÇÃO NÃO É RECOMENDADA PELA SUN.

Creio que TODAS AS EXPRESSÕES estejam sendo usadas de forma INAPROPRIADA, pois, não DEVEMOS USAR ASSERTIONS EM MÉTODOS PÚBLICOS, por que não sabemos sequer de onde virá a chamada ao nosso método. A expressão assert no método estático doStuff(int args) ESTÁ SENDO USADA PARA DESVIAR O FLUXO DO PROGRAMA, e isso NÃO É RECOMENDADO, pois, para que essas assertivas sejas executadas, você precisa compilar o código e executá-lo com essa opção ativada, o que não pode ser totalmente garantido, e, por questões óbvias, essa prática não é recomendada pela SUN. A terceira expressão está sendo usada em um lugar no qual o sistema JAMAIS DEVERIA CHEGAR, portanto, deve-se alterar a lógica do sistema e não forçar um AssertionError (o que irá acontecer caso o fluxo chegue neste ponto).

Resumindo:

As assertivas devem ser usadas SOMENTE EM MODO DE TESTES e nunca em AMBIENTE DE PRODUÇÃO. As assertivas não devem ser usadas como modificadoras de fluxo, pois sua execução só será efetuada caso o sistema esteja rodando com essa opção ativada, o que, não pode ser garantido; e, finalmente, AS ASSERTIVAS NÃO DEVEM SER USADAS EM MÉTODOS PUBLIC.

A opção correta, na minha opinião é a opção “A” (A None of the assert statements are appropriate.)


Questão 4:

Você não postou quais foram as opções.

Neste caso, qualquer coisa que esteja em algum local no qual o compilador tenha certeza que o fluxo do programa JAMAIS CHEGARÁ (depois do lançamento de uma EXCEPTION, por exemplo), ele não deixará que o seu código seja compilado, apontando claramente o local do erro e dizendo algo como : “Essa instrução jamais será executada, portanto, tira isso do código por que eu já tenho muita coisa pra transformar em ByteCode” :wink:


Questão 5:

A opção correta é:

C w can be of type PrintWriter, but NOT of type BufferedWriter.

Somente a classe PrintWriter tem o método print, logo, todas as outras opções são inválidas.


Questão 6:

A opção correta é:

A new Car

Essa questão de serialização é um pouco complicada, você precisa estudar mais pra se adapatar as conceitos. Vou tentar explicar o que acontece:

A classe Ford estende Car e implementa Serializable (A interface Serializable serve apenas pra dizer: Quando você des-serializar essa classe, por favor, NÃO EXECUTE O CONSTRUTOR DELA NOVAMENTE, ok). Então, como marcamos Ford como Serializable, o construtor dela NÃO SERÁ EXECUTADO QUANDO ELA FOR DES-SERIALIZADA, só que, a classe Car (a qual a estendemos) NÃO IMPLEMENTA Serializable, logo, o CONSTRUTOR DA SUPER CLASSE SERÁ EXECUTADO, produzindo a saída acima.


Essas questões estão diretamente relacionadas a vários objetivos do exame, os quais devemos estudar a fundo, pois um conceito depende do outro pra ser bem compreendido.


Espero ter ajudado !!! :wink:

Grande abraço,
Até,
Rodrigo Lopes.

Criado 22 de outubro de 2008
Ultima resposta 23 de out. de 2008
Respostas 1
Participantes 2