clp-1999-01

Propaganda
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
Download