Pessoal,
Meu voucher está pra chegar essa semana e pretendo fazer a prova assim que ele chegar (no máximo 1 semana depois).
Esse fim de semana dei uma revisada no livro. Estou fazendo uma leitura dele novamente para ver se ficaram alguns pontos que eu possa ter esquecido. Estudei até o capítulo 5 e seguem algumas dúvidas que tive(ainda bem que não foram muitas):
-
Mesmo se uma classe tem nível de acesso default, seu construtor pode
ser tanto public quanto protected. Mas por que isso? Acredito que não seja
possível chamar o construtor de uma classe com acesso default através de
uma classe fora do pacote, já que fora do pacote é como se a classe não
existisse. Se eu estiver certo, não deveria dar erro de compilação quando
uma classe tiver acesso default e tentarmos escrever um construtor public
ou protected? -
Existe especificação quanto à forma que a JVM carrega as classes? Se
algum subconjunto ao iniciar, ou se à medida que vai precisando usar uma
classe que ainda não foi carregada, ou alguma outra forma? Essa
informação é necessária para responder questões que envolvem 2 ou
mais classes com blocos de inicialização static, para sabermos se é
possível dizer qual dos blocos será executado primeiro. -
Eu aprendi que não podemos acessar membros de instância antes de
chamar this() ou super() ou nem mesmo passando como um argumento a this(meuAtributo) ou super(meuAtributo) dentro de um construtor (Ver
página 79 do livro). Mas qual o motivo dessa restrição? Antes eu achava que talvez fosse porque o atributo não teria sido inicializado, mas segundo
a página 260 (lá no final, onde mostra a ordem de execução na construção de um objeto) os atributos de instância são inicializados com o
valor default antes da chamada a super(). Assim sendo, não vejo motivo
para o compilador não permitir acessarmos atributos de instância antes de
chamada a super(); -
Se os wrappers são imutáveis, porque não posso colocar a seguinte
variável em uma cláusula case, do switch: final Integer i = 10; ? (já
aprendi que apenas constantes podem ser colocadas em case, mas
concordam que o valor de i sempre será 10? Só não entendi porque não é
possível fazer isso) -
Qual a saída (essa eu respondi, mas achei interessante colocar aqui)?
public static void main(String[] args) {
int b = 1;
if(b-->b+2==((b=1)==b--)){
System.out.println("true: " + b);
}else{
System.out.println("false: " + b);
}
}
Tirando a dúvida do item 2, acredito que as demais não são cobradas com esse nível de detalhe na prova, mas fiquei curioso pra conhecer as explicações.
Estou meio apertado essa semana, mas se comnseguir um tempinho, acredito que até sexta terei terminado de revisar o livro e colocarei as próximas perguntas.
[]'s
