Вы находитесь на странице: 1из 4

INSTITUTO DE MATEMTICA - UFRJ MAB240- COMPUTAO II - CINCIA DA COMPUTAO 2011/2 PROVA 1- 19/9/2011 GABARITO DE SOLUO

1.

Se uma classe possui vrios construtores, o que eles devem ter em comum, e em que podem diferir? Resposta: o nome do construtor deve ser igual ao nome da classe. Podem diferir na lista de parmetros. Em um mtodo de instncia, ou um construtor, o que contm a referncia this? Resposta: this sempre contm a referncia do objeto que recebeu a mensagem que ativou esse mtodo, ou do objeto que est sendo criado pelo construtor. Posso usar a referncia this dentro de um mtodo de classe? Por qu sim, ou por qu no? Resposta: No pode, porque um mtodo de classe no ativado por mensagem enviada a um objeto e sim a uma classe. Qual o significado de usar o comando this(...argumentos...) dentro de um construtor? Resposta: esse comando chama outro construtor da mesma classe que tem essa lista de parmetros. Deve estar sempre na primeira linha do construtor, quando for usado. At quando um objeto vive na memria? O que faz com que seja removido? Resposta: um objeto vive enquanto houver referncias para ele. Quando o nmero de referncias cair a zero, o objeto removido pelo coletor de lixo.

2.

3.

4.

5.

6. Seja uma classe X, com subclasse X1, e seja X11 subclasse de X1. Suponha que na classe X exista um mtodo public void m1(), e que na classe X1 exista outro mtodo com a mesma assinatura (mesmo cabealho). Suponha tambm o mtodo public void m2() s exista na classe X11. Quais das afirmaes abaixo so corretas, e quais as falsas? a) Posso aplicar o mtodo m1() a uma referncia do tipo X. b) Um objeto da classe X11 pode ser apontado por uma referncia do tipo X. c) Posso aplicar o mtodo m2() a uma referncia do tipo X1. d) Se uma referncia x do tipo X aponta para um objeto da classe X1, ento x.m1() ativa o mtodo m1() da classe X. Respostas: a) Certo. b) Certo. c) Errado - no nvel X1 para cima no existe mtodo m2() d) Errado - ativa o da classe X1)
7.

Voc aplica um mtodo m() qualquer a uma referncia x, executando o comando x.m(), e o programa lana uma exceo do tipo NullPointerException. O que deve ter acontecido? Resposta: A referncia x contm o valor null, no est apontando para nenhum objeto. A linguagem Java prev que classes, variveis de instncia e mtodos podem ser prefixados por um modificador de acesso public, private ou protected. Explique de forma sucinta o efeito desses prefixos, e o que acontece quando o prefixo omitido. Resposta: o prefixo public permite visibilidade (acesso) a partir de qualquer classe; private s permite acesso em mtodos da prpria classe; protected somente para a

8.

prpria classe, suas subclasses, e as demais classes do mesmo pacote. No caso do prefixo ser omitido, a visibilidade se restringe s classes do mesmo pacote. 9. Sejam 2 pacotes pac1 e pac2. Em pac1 existem as classes A1 e B1. Em pac2 existe a classe C2. a) Qual o nome completo das classes A1, B1 e C2? b) Se quisermos que um mtodo da classe C2 use um objeto da classe A1 devemos necessariamente usar import pac1; na classe C2? Respostas: a) pac1.A1, pac1.B1 e pac2.C2 b) No necessariamente. Usando import pac1; na primeira linha da classe C2 evita ter que usar o nome completo pac1.A1 sempre que quisermos nos referir classe A1 dentro da classe C2. Mas podemos omitir o import, e usar o nome completo. 10. Seja uma classe C e sua subclasse C1. Suponha que na classe C exista um mtodo com assinatura: public void m(int x) a) Posso escrever em C1 um mtodo com a assinatura void m(int x)? Explique por qu sim, ou por qu no. b) Posso escrever em C1 um mtodo com a assinatura void m(int x, int y)? Explique por qu sim, ou por qu no. c) O que aconteceria se escrevssemos a linha @Override logo antes do mtodo void m(int x, int y) ? Respostas: a) No, porque estaria redefinindo um mtodo da superclasse, com reduo de visibilidade, o que proibido. b) Sim, porque no est redefinindo nenhum mtodo. c) Provavelmente daria um erro de compilao, porque essa anotao obriga a redefinir um mtodo de alguma superclasse, e esse mtodo no parece existir em C nem acima na hierarquia. 11. Seja X uma classe qualquer, e x uma referncia para um objeto desta classe. Qual o efeito do comando System.out.println(x) ? Resposta: A mensagem toString() ser enviada ao objeto x e um mtodo String toString() ser buscado a partir da classe X. Se em X e nas suas superclasses no existir esse mtodo, ser executado o mtodo toString() da classe Objecto e o comando imprimir essa string na console. 12. Seja um mtodo m() de uma classe X, com o contedo inicial seguinte, onde A outra classe: public void m() { A[] v = new A[4]; v[0] = new A(); v[1] = new A(); v[2] = v[0]; v[3] = v[1]; ... } Em outra classe qualquer, um mtodo executa os comandos: X x = new X(); x.m(); Faa um desenho ilustrativo de como ficar o contedo da memria, aps a execuo da parte que foi mostrada do mtodo m(). O desenho deve indicar o que

fica na memria esttica (stack) e na memria dinmica, indicando referncias por setas. Resposta: memria esttica (stack) memria dinmica

13. Seja a sequencia de comandos em Java: String s1,s2,s3,s4; s1 = new String("abc"); s2 = s1; s3 = "abc"; s4 = "abc"; Quantos objetos sero criados? Faa um desenho mostrando como fica a memria logo depois da execuo da sequencia acima. Explique o que ocorreu. Resposta: sero criados dois objetos. O construtor new String() cria uma string com contedo abc. O comando s3 = abc; cria outra string na rea de constantes. Ao fazer s4 = abc; Java procura na rea de constantes, encontra a est apontada por s3, e faz s4 apontar para a mesma string. E s2 vai apontar para o mesmo objeto apontado por s1.
s1 s2 s3 s4

abc

abc

14. Voc vai programar uma aplicao que precisa usar uma lista de objetos de alguma classe. Em que situaes seria recomendado usar um vetor, e em que situaes seria melhor usar um ArrayList? Resposta um vetor recomendado se o tamanho da lista for fixo, e no haver inseres ou remoes de elementos. Um ArrayList mais recomendado no caso da lista crescer e encolher muitas vezes, e houver muitas inseres e remoes de elementos. 15. Explique em suas palavras em que casos importante redefinir o mtodo boolean equals(Object obj), que existe na classe Object, quando voc constri uma classe. Resposta: importante redefinir esse mtodo se a aplicao permitir criar duas ou mais instncias distintas da classe que precisem ser consideradas iguais para fins da aplicao, como duas datas, duas strings.

Вам также может понравиться