Prova Final de Características das Linguagens de Programação – 1999 – 10 período 1a questão: Explique, minuciosamente a funcionalidade do código JAVA que se segue. Como os comandos abaixo implementam essa funcionalidade? Observação: O arquivo .../Provas_de_CaracteristicasJ/99_Final/example.html contém uma referência a este applet. import java.awt.*; public class BullsEye extends java.applet.Applet { public void init() { add( new BullsEyeArea(200, 200) ); } } class BullsEyeArea extends Canvas { int xpos, ypos, radius=20, rings=4; BullsEyeArea( int w, int h ) { setBackground( Color.white ); resize( w, h ); } public boolean mouseMove( Event e, int x, int y ) { xpos=x; ypos=y; repaint(); return true; } public void paint( Graphics g ) { for (int i=0; i<rings; i++) { int r = radius - radius/rings*i; g.drawOval( xpos-r, ypos-r, r*2, r*2); } } } 2a questão: Descreva a classe java.util.Hashtable do jdk1.2 (fale sobre os seus métodos e variáveis de instância.). Dê um exemplo de sua utilização. 3a questão: Explique, pormenorizadamente, o que é uma máquina virtual java (“java virtual machine”). 4a questão: Explique a funcionalidade do Servidor cujo código em java é dado a seguir. Como os comandos abaixo implementam essa funcionalidade? // inicío do código do servidor import java.io.*; import java.net.*; class ThreadedEchoHandler extends Thread { Socket incoming; int counter; ThreadedEchoHandler(Socket i, int c) { incoming = i; counter = c; } public void run() { try { DataInputStream in = new DataInputStream(incoming.getInputStream()); PrintStream out = new PrintStream(incoming.getOutputStream()); out.println( "Hello! Enter BYE to exit.\r" ); boolean done = false; while (!done) { String str = in.readLine(); if (str == null) done = true; else { out.println("Echo (" + counter + "): " + str + "\r"); if (str.trim().equals("BYE")) done = true; } } incoming.close(); } catch (Exception e) { System.out.println(e); } } } class ThreadedEchoServer { public static void main(String[] args ) { int i = 1; try { ServerSocket s = new ServerSocket(8189); for (;;) { Socket incoming = s.accept( ); System.out.println("Spawning " + i); new ThreadedEchoHandler(incoming, i).start(); i++; } } catch (Exception e) { System.out.println(e); } } } 5a questão: Como você faria para testar o servidor acima, via telnet? (Neste caso, a estação de onde você efetuar o telnet comportar-se-á como um cliente). Escreva todos os passos necessários a este teste. 6a questão: Explique o que é, do ponto de vista de um programador java, a política de scheduling round robin. 7a questão: Leia atentamente o código abaixo. Como, fundamentado no output deste código, você conseguiria afirmar qual a política de scheduling adotada pela sua Java Virtual Machine? Justifique a sua resposta. //codigo para descobrir qual a politica de Scheduling da sua MVJ: //round robin ou time-slicing??? class Thready { public static void main(String args[]) { new MyThread("Foo").start(); new MyThread("Bar").start(); } } class MyThread extends Thread { String message; MyThread (String message) { this.message = message; } public void run() { while (true) System.out.println(message); } } 8a questão: Em Java o programador pode lançar (throw) suas próprias exceções (exceptions). Normalmente isto acontece quando algo indesejável, correspondente a uma situação anormal, acontece em um programa. Dê um exemplo, de sua autoria, de um programa simpels, escrito em Java, que lance as suas próprias exceções. Sugestão: inspire-se no código situado no diretório chap09/bankaccount do livro Java Now. Em nosso lab ele situa-se no path ../Java/javacode/javanow/chap09/bankaccount. Boa Sorte! Prof. Oscar Luiz Monteiro de Farias