Lista de Exercícios 3 Curso de Java Básico Entrega para o dia 20/07 1. Classpath e Packages Dada a seguinte árvore windows de diretórios: c: /util /classes /com /util /hp /classes /us /tools /ibm /db2 /classes /com /ibm /connection a. Como deveria ser setado o classpath para que o java encontre as seguintes classes: com.util.Utilities e com.ibm.DataSource b. Como deveria ser setado o classpath para que o java encontre as seguintes classes: com.ibm.connection.Conn e com.ibm.DataSource c. Como deveria ser setado o classpath para que o java encontre as seguintes classes: com.ibm.connection.Conn , us.Utils, us.tools.Tool , com.ibm.DataSource , com.util.Utilities e com.Test (Test está sob /util/classes/) d. Suponha que eu possua os seguintes arquivos na mesma árvore de diretórios mostrada acima: c:/ibm/db2/classes/com/Util.java que representa a classe com.Util da IBM c:/util/classes/com/Util.java que representa a classe com.Util da HP e dada a declaração da classe abaixo: package mypackage; import com.Util; public class MyClass { Util util = new Util(); } e. Qual classe que instanciaria o objeto util (IBM ou HP) utilizando o seguinte classpath: -classpath c:/ibm/db2/classes f. Qual classe que instanciaria o objeto util (IBM ou HP) utilizando o seguinte classpath: -classpath c:/util/classes g. Qual classe que instanciaria o objeto util (IBM ou HP) utilizando o seguinte classpath: -classpath c:/util/classes;c:/ibm/db2/classes h. Dadas as seguintes classes: c:/ibm/db2/classes/com/ibm/Empregado c:/util/classes/com/hp/Empregado Escreva um Contratador que contrate um empregado da IBM, e um empregado do HP (Ou seja uma classe Contratador que agregue um objeto com.ibm.Empregado e um com.hp.Empregado) 2. Exceptions a. Defina o que é uma exceção. b. Qual a diferença entre uma exceção e um erro. c. Qual a diferença entre checked e unchecked exceptions d. Qual será o resultado da execução abaixo: ... try{ if (1==1) throw new Exception(“”); System.out.println(“try”); }catch(Exception e){ System.out.println(“Exceção”); } ... f. Qual será o resultado da execução abaixo: ... try{ if (1==1) throw new NullPointerException(); System.out.println(“try”); }catch(Exception e){ System.out.println(“Exceção”); } ... g. Qual será o resultado da execução abaixo: ... try{ if (1==1) throw new NullPointerException(); System.out.println(“try”); }catch(Exception e){ System.out.println(“Exceção”); }finally{ System.out.println(“Finalizando”); } ... h. Qual será o resultado da execução abaixo, dado que ComplexException extende BasicException que extende Exception: ... try{ if (1==1) throw new BasicException(); System.out.println(“try”); }catch(ComplexException e){ System.out.println(“ComplexaExceção”); }catch(Exception e){ System.out.println(“Exceção”); }finally{ System.out.println(“Finalizando”); } ... i. Qual será o resultado da execução abaixo, dado que ComplexException extende BasicException que extende Exception: ... try{ if (1==1) throw new BasicException(); System.out.println(“try”); }catch(ComplexException e){ System.out.println(“ComplexaExceção”); }catch(BasicException e){ System.out.println(“BasicaExceção”); }finally{ System.out.println(“Finalizando”); } ... j. Responda se o código abaixo compila ou não, e por que? public class Control { public static void main(String[] args) { Control c = new Control(); c.doSomeRiskyAction(); } } public void doSomeRiskyAction() throws Exception { } h. O que poderia ser feito para que ele compile (não vale tirar o throws Exception do “método arriscado”)? 3. Referência a. Qual é o resultado do programa: public class Produto { private String nome; public static void main(String[] args) { Produto p1 = new Produto(); p1.setNome("p1"); Produto p2 = p1; Produto p3 = p2; System.out.println(p2.getNome()); p1.setNome("novoP1"); System.out.println(p3.getNome()); } public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } } b. O que deveria ser feito para que p3 mantivesse o valor inicial de p1 (ou seja nome igual a p1.) 4. Abstract a. Defina o que é uma classe abstrata. b. Crie uma classe abstrata Carro que implemente o método String buzinar(); e defina os métodos abstratos int getPreco(); e String getMarca(); c. Implemente duas classes que extendam da classe Carro, as classes Fusca e Limosine, implemente os métodos necessários de acordo. 5. Interface a. Defina o que o modificador “interface” causa. b. Qual a diferença entre uma interface e uma classe abstrata. c. Crie a interface Carro com os métodos String buzinar();, String getMarca(); e int getPreco(); diga qual a diferença desta para a classe criada no exercício 4a. d. Implemente as classes Fusca e Limosine que obedeçam ao contrato proposto pela classe automóvel. e. Implemente a classe Estrada que possua o método int valorPedagio(Carro c); o qual retorna o valor do pedágio para o carro passado no parametro c. O preço do pedágio será 10% do preço do carro. f. Adicione o método boolean temFrigoBar(); à classe Limosine que retorna true. Adicione o método boolean precisaRepararFrigobar(Carro c); à classe Estrada, o qual retorna true se a instância for uma Limosine. dica: use o comparador instanceof