Dúvida Cap 05 Livro Kathy

9 respostas
dfsilva86

Pessoal,

Estava fazendo os exercícios do capítulo 05 do livro da Kathy e no 3º exercício que segue abaixo fiquei com dúvidas:

3º Dado:
import java.io.*;

class Master {

	String doFileStuff()throws FileNotFoundException{
		return "a";
	}

class Slave extends Master {

	public static void main(String[] args) {

		String s = null;
		try {
			s = new Slave().doFileStuff();

		} catch (Exception ex) {
			s = "b";
			System.out.println(s);
		}
		// insira o código aqui

	}// fim do metodo main
}

Qual opção, inserida independentemente em //insira seu código aqui , irá compilar e produzir a saida b? (Maque todas as corretas)

A. String doFileStuff() {return "b";}
B. String doFileStuff() throws IOException {return "b";}
C. String doFileStuff(int x) throws IOException {return "b";}
D. String doFileStuff() throws FileNotFoundException {return "b";}
E. String doFileStuff() throws NumberFormatException {return "b";}
F. String doFileStuff() throws NumberFormatException, FileNotFoundException {return "b";}

Minha dúvida:
1º Como vai ser impresso se no bloco Try não tem uma instrução para imprimir? eu pensei que fosse um erro pq eu uso a versão em português, mas mesmo na versão inglês está assim tbem.
2º Nenhuma das alternativas lançam uma exceção(estou certo? ), como vou capturá-las no bloco catch para imprimir?

Fiquei mto confuso nesse exercício, ele está na pág 228 do Livro para SCJP 5.

9 Respostas

dfsilva86

Descobri,

Analisando o código, vi que a linha para imprimir a variável “s” está fora do bloco catch!!!

D

Mas esta exceção não será lançada??
Como que alguma coisa será impressa??

B

Ele errou o código…Segue o correto:

import java.io.*; class Master { String doFileStuff() throws FileNotFoundException { return "a"; } } class Slave extends Master { public static void main(String[] args) { String s = null; try { s = new Slave().doFileStuff(); } catch ( Exception x) {s = "b"; } System.out.println(s); } // insert code here }

taaqui

brrodo:
Ele errou o código…Segue o correto:

import java.io.*; class Master { String doFileStuff() throws FileNotFoundException { return "a"; } } class Slave extends Master { public static void main(String[] args) { String s = null; try { s = new Slave().doFileStuff(); } catch ( Exception x) {s = "b"; } System.out.println(s); } // insert code here }

Até aonde eu sei, ele esta querendo ver seus conhecimento de subscrição, é só lembrar que o método subscrito na classe Slave não deve lançar exceçoes verificadas novas ou mais abrangentes que as declaradas pelo método subscrito.

A-) Esta certo, lançando nenhuma exceção.

B-) Esta lançando uma exceção mais ampla

java.lang.Object
extended byjava.lang.Throwable
extended byjava.lang.Exception
extended byjava.io.IOException [color=green]<-- Mais ampla que FileNotFoundException[/color]
extended byjava.io.FileNotFoundException

C-) Esta sobrecarregando não subscrevendo.

D-) Lançando a mesma exceçao, aceito.

E-) java.lang.Object
extended byjava.lang.Throwable
extended byjava.lang.Exception
extended byjava.lang.RuntimeException [color=green]<-- não-verificada.[/color]
extended byjava.lang.IllegalArgumentException
extended byjava.lang.NumberFormatException

F-) Aceita lançar 2 exceções mais lembre que as 2 excecões tem que seguir as regras básicas.

Se estiver errado me corrijam!

D

Mas ainda sim eu acho que este metodo nunca chegará no catch, portanto, nada será impresso.Eu acho…

B

Não precisa chegar no catch.

o “s” recebe o return do método “doFileStuff()”, no try. Essa questão se baseia em sobrescrição de métodos com lançamento de exceptions.

D

Mas questão pergunta quais das opções produzirá a saida “b”.
Nenhuma delas.

B

Daniel.F:
Mas questão pergunta quais das opções produzirá a saida “b”.
Nenhuma delas.

Como eu disse no meu post anterior, o código postado pelo autor do tópico está incorreto. Postei o código correto acima.

Da maneira correta, o Sys.out está fora do catch, produzindo a saída em “s”, através do retorno do método sobrescrito.

Acho q foi isso q te confundiu, estou certo?

D

brrodo, realmente não tinha reparado no código que vc tinha postado, que está certo.
Obrigado.

Criado 23 de fevereiro de 2009
Ultima resposta 25 de fev. de 2009
Respostas 9
Participantes 4