Tratamento de Erros com Excepções

Tamanho: px
Começar a partir da página:

Download "Tratamento de Erros com Excepções"

Transcrição

1 Programação Orientada por Objectos 87 Tratamento de Erros com Excepções Idealmente os erros de um programa deviam ser apanhados em tempo de compilação porque código errado não deveria ser executado. Mas como nem todos os erros podem ser detectados em tempo de compilação, deve existir um formalismo de tratamento de erros em tempo de execução. Em muitas linguagens o formalismo consiste no retorno de um valor especial ou na colocação de uma flag pela função na qual se verificou o erro, e o programa que chamou a função devia testar o valor retornado ou a flag, e determinar qual o problema. Mas, a maior parte das vezes, os programas não testam as condições de erro. Se testassem todos os potenciais erros sempre que uma função era chamada o código tornar-se-ia ilegível. Benefícios das excepções No ponto do programa onde ocorre um problema, conhecem-se as características do problema que ocorreu, mas em geral, nesse contexto (contexto corrente) não se tem informação suficiente para lidar com o problema. Num contexto mais alto, noutra parte do programa, existe a informação necessária para decidir o que fazer. Outro benefício das excepções resulta num programa limpo de código de tratamento de erros. Não é necessário testar a ocorrência de um erro particular e tratá-lo em vários sítios de um programa. A excepção garante que o erro é tratado. Deste modo o problema só é tratado num sítio. Além de se poupar código, separa-se código com o que se pretende fazer, do código de tratamento de erros. Lançamento de uma excepção Uma excepção (condição excepcional) é um problema que não permite a continuação do método ou scope em execução. Quando ocorre uma excepção não se pode continuar o processamento corrente porque não se tem informação necessária para tratar do problema no contexto corrente e relega-se o problema para um contexto mais alto, lançando uma excepção. Quando se lança uma excepção (usa-se a palavra-chave throw), um objecto excepção é criado (através da chamado de um construtor da respectiva classe) e sai-se do método ou do scope corrente, sendo retornada a referência ao objecto excepção criado. O fluxo de execução corrente é parado e passa do contexto corrente para o local de tratamento da excepção para onde também é passada a referência do objecto excepção. Exemplo de lançamento de uma excepção: if (t == null) throw new NullPointerException();

2 88 Programação Orientada por Objectos Em todas as excepções standard (classes) há 2 construtores: um sem argumentos, e outro com 1 argumento do tipo String. Normalmente lança-se uma excepção de uma classe diferente para cada tipo diferente de erro, para que no contexto mais amplo se possa determinar o que fazer (tomar a decisão apropriada) apenas através do conhecimento do tipo de objecto excepção. Quando uma excepção é lançada o mecanismo de tratamento de excepções toma conta do controlo do fluxo do programa e termina a execução do método no qual a excepção é lançada, assim como os métodos dos quais este método foi chamado e a execução continua numa parte do programa que se destina a tratar excepções daquele tipo ( exception handler ). Bloco try - região guardada Para que throw não cause a saída de um método, deve existir dentro desse método um bloco para capturar a excepção Uma excepção lançada é capturada imediatamente a seguir a um bloco try por cláusulas denotadas pela palavra-chave catch, designadas cláusulas catch ou cláusulas de tratamento de excepções (exception handlers). Cada cláusula catch toma 1 e só 1 argumento de um tipo particular. try { código que pode gerar excepções catch (Type1 id1) { // tratamento de excepções do tipo Type1 catch (Type2 id2) { // tratamento de excepções do tipo Type2... Normalmente o tratamento da excepção é baseado no tipo da excepção sem necessidade de usar o identificador, mas em qualquer dos casos o identificador tem de ser declarado. As cláusulas catch devem aparecer directamente depois do bloco try, tendo cada cláusula sempre 1 só argumento. Este tratamento de excepções separa o código colocado num bloco try (código com o que se pretende fazer), do tratamento de erros colocado nas cláusulas onde se capturam e tratam as excepções (cláusulas catch). Se uma excepção é lançada, o mecanismo de tratamento de excepções procura a primeira cláusula catch com um argumento do tipo da excepção. Se encontra executa o código dessa cláusula catch e sai.

3 Programação Orientada por Objectos 89 Lista de Especificação das Excepções Java obriga a declarar as excepções que um método lança na declaração do método depois da lista de argumentos. A especificação das excepções é feita através da palavrachave throws seguida de uma lista de todos os tipos de potenciais excepções. void método() throws excepção1, excepção2 {... Se a especificação das excepções declaradas não estiver correcta, o compilador detecta isso e informa que determinada excepção deve ser tratada, ou então indicada na especificação das excepções, significando que pode ser lançada do método. Java contem um classe chamada Throwable que descreve tudo o que pode ser lançado como excepção. Throwable tem 2 subclasses: Error descreve erros de compilação e do sistema; Exception é o tipo de erros que podem ser lançados de qualquer método das classes de bibliotecas standard ou de métodos que escrevemos. Todas as excepções que possam ocorrer são objectos de classes que são subclasses do tipo Exception. É possível capturar qualquer tipo de excepção capturando uma excepção do tipo base Exception. catch (Exception e) { System.out.println( Capturando a excepção + e.getmessage()); Ao objecto excepção podem aplicar-se métodos da classe Throwable, ou ainda métodos da classe Object (superclasse de todas as classes). Métodos da classe Throwable String getmessage() - retorna a mensagem de erro associada com a excepção. String tostring() - retorna uma descrição do objecto. void printstacktrace() - imprime para o standard erro. void printstacktrace(printstream) - imprime para um stream especificado (por exemplo System.out). printstacktrace() mostra a sequência dos métodos invocados que levaram ao ponto onde a excepção foi lançada. Método da classe Object: getclasse() - retorna um objecto pertencente à classe Class representando a classe desse objecto excepção. A este objecto retornado pode aplicar-se o método getname(), que retorna o nome da classe.

4 90 Programação Orientada por Objectos Criação de Excepções Podemos criar as nossas próprias excepções para denotar algum erro especial. Para criar uma classe de excepções é necessário herdar de um tipo existente de excepções. Mostramos, em seguida, um exemplo no qual o método main() chama o método f(), o qual chama o método divide(). O método divide() pode lançar uma excepção. Apresentamos em seguida várias várias situações. Consideremos em todas essas situações, difinida a seguinte classe Excepcao1: class Excepcao1 extends Exception { public Excepcao1() { public Excepcao1(String msg) { super(msg); 1. Sem tratamento das excepções. O programa dá erro de execução. public class Teste0 { public static int divide(int a,int b) { return a/b; public static int f(int a,int b) { return divide(a, b); public static void main(string args []) { System.out.println(f(5, 2)); System.out.println(f(3, 0)); System.out.println(f(4, 1));

5 Programação Orientada por Objectos O método divide() pode lançar uma excepção, mas não é capturada nem declarada. Dá erro de compilação. public class Teste { public static int divide(int a,int b) { if (b==0) throw new Excepcao1("Divisao por zero!"); return a/b; public static int f(int a,int b) { return divide(a, b); public static void main(string args []) { System.out.println(f(5, 2)); System.out.println(f(3, 0)); System.out.println(f(4, 1)); error J0122: Exception 'Excepcao1' not caught or declared by 'int Teste.divide(int a, int b)' 3. O método divide() declara a excepção, mas o método f() não a captura nem a declara. Dá erro de compilação. public class Teste { public static int divide(int a,int b) throws Excepcao1 { if (b==0) throw new Excepcao1("Divisao por zero!"); return a/b; public static int f(int a,int b) { return divide(a, b); public static void main(string args []) { System.out.println(f(5, 2)); System.out.println(f(3, 0)); System.out.println(f(4, 1)); error J0122: Exception 'Excepcao1' not caught or declared by 'int Teste.f(int a, int b)'

6 92 Programação Orientada por Objectos 4. O método divide() e o método f() declaram a excepção, mas o método main() não a captura nem a declara. Dá erro de compilação. public class Teste { public static int divide(int a,int b) throws Excepcao1 { if (b==0) throw new Excepcao1("Divisao por zero!"); return a/b; public static int f(int a,int b) throws Excepcao1 { return divide(a, b); public static void main(string args []) { System.out.println(f(5, 2)); System.out.println(f(3, 0)); System.out.println(f(4, 1)); error J0122: Exception 'Excepcao1' not caught or declared by 'void Teste.main(String[] args)' 5. Os métodos divide(), f() e main() declaram a excepção. O programa compila mas dá erro de execução. public class Teste { public static int divide(int a,int b) throws Excepcao1 { if (b==0) throw new Excepcao1("Divisao por zero!"); return a/b; public static int f(int a,int b) throws Excepcao1 { return divide(a, b); public static void main(string args []) throws Excepcao1 { System.out.println(f(5, 2)); System.out.println(f(3, 0)); System.out.println(f(4, 1));

7 Programação Orientada por Objectos A excepção é capturada no método divide(). O método main() é completado. public class Teste { public static int divide(int a,int b) { try { if (b==0) throw new Excepcao1("Divisao por zero!"); return a/b; catch (Exception e) { e.printstacktrace(); System.out.println("Resultado nao valido:"); return 0; public static int f(int a,int b) { return divide(a, b); public static void main(string args []) { System.out.println(f(5, 2)); System.out.println(f(3, 0)); System.out.println(f(4, 1)); 7. A excepção é capturada no método f(). O método main() é completado. public class Teste { public static int divide(int a,int b) throws Excepcao1 { if (b==0) throw new Excepcao1("Divisao por zero!"); return a/b;

8 94 Programação Orientada por Objectos public static int f(int a,int b) { try { return divide(a, b); catch (Exception e) { e.printstacktrace(); System.out.println("Resultado nao valido:"); return 0; public static void main(string args []) { System.out.println(f(5, 2)); System.out.println(f(3, 0)); System.out.println(f(4, 1)); 8. A excepção é capturada no método main(). O método main() não é completado, porque o lançamento da excepção causado pela invocação da 2ª instrução do método main() causa o abandono do código do bloco try. public class Teste { public static int divide(int a,int b) throws Excepcao1 { if (b==0) throw new Excepcao1("Divisao por zero!"); return a/b; public static int f(int a,int b) throws Excepcao1 { return divide(a, b);

9 Programação Orientada por Objectos 95 public static void main(string args []) { try { System.out.println(f(5, 2)); System.out.println(f(3, 0)); System.out.println(f(4, 1)); catch (Exception e) { e.printstacktrace(); System.out.println("Resultado nao valido:"); // return 0; Excepções em subclasses Quando se reescreve um método só se podem lançar excepções que foram especificadas no método da classe base. Deste modo código que funciona com a classe base também funcionará com qualquer objecto derivado da classe base incluindo excepções. Cláusula finally Por vezes há a necessidade de executar algum código, quer ocorra ou não uma excepção num bloco try, para colocar qualquer coisa no seu estado inicial, tal como um ficheiro aberto ou uma ligação a outro computador. Isso consegue-se usando uma cláusula finally no fim do tratamento das excepções. try { //... região guardada catch ( Excepção1 e1 ) {... catch ( Excepção2 e2 ) {... finally {...

10 96 Programação Orientada por Objectos Exemplo: public class Teste1 { static int count = 0; public static void main (String args []) { while (true) { try { if (count++ == 0) throw new Exception(); System.out.println("Excepcao lancada"); catch (Exception e) { System.out.println("Execepcao capturada"); finally { System.out.println("Clausula finally"); if (count == 2) break; Cláusula catch que captura uma excepção lançada Na determinação da cláusula catch que captura uma excepção lançada, o mecanismo de tratamento das excepções procura a primeira cláusula catch para a qual o tipo de excepção é o tipo ou subtipo do argumento da cláusula catch. class A extends Exception { class B extends A { public class Teste2 { public static void main(string args []) { try { throw new B(); catch (A a) { System.out.println("Capturada excepcao A");

11 Programação Orientada por Objectos 97 A excepção B é capturada pela cláusula catch(a a). O código seguinte dará erro de compilação porque a cláusula catch (B b) nunca será atingida: class A extends Exception { class B extends A { public class Teste { public static void main(string args []) { try { throw new B(); catch (A a) { System.out.println( Capturada excepção A ); catch (B b) { System.out.println( Capturada excepção B ); Mensagem de erro produzida: error J0102: Handler for 'B' hidden by earlier handler for 'A' Relançamento de uma Excepção (Rethrowing an exception) Para voltar a lançar uma excepção que foi capturada executa-se throw referência. Uma excepção depois de capturada (por uma cláusula catch) pode voltar a ser relançada para ser tratada num contexto mais alto. catch (Exception e) { System.out.println( Excepção: ); e.printstacktrace(); throw e;

12 98 Programação Orientada por Objectos Exemplo: public class RelancamentoExcepcoes { public static void f() throws Exception { System.out.println("No metodo f()"); throw new Exception("Excepcao lancada em f()"); public static void g() throws Throwable { try { f(); catch (Exception e) { System.out.println("No metodo g()"); e. printstacktrace(); throw e; public static void main(string args []) throws Throwable { try { g(); catch (Exception e) { System.out.println("Capturada no main, e.printstacktrace()"); e.printstacktrace(); System.in.read();

13 Programação Orientada por Objectos 99 Excepções RunTimeException Java realiza verificações, em tempo de execução, de excepções da classe RuntimeException. Excepções deste tipo são automaticamente lançadas e não é necessário incluí-las nas especificações das excepções. Todos os tipos de potenciais excepções têm de ser incluídos na declaração de um método (lista com a especificação das excepções) excepto excepções do tipo RuntimeException. Excepções do tipo RuntimeException representam erros de programação. Estes erros tais como NullPointException ou ArrayIndexOutOfBoundsException se não forem capturados são reportados na saída do programa auxiliando no processo de depuração ( debugging ). Excepções do tipo RuntimeException ou de classes que herdam deste tipo não necessitam de pertencer à lista de especificação de excepções na declaração de um método. Exemplo: Saída produzida: public class RuntimeExcepcao { static void f() { throw new RuntimeException( Do metodo f() ); public static void main(string args()) { f();

14 100 Programação Orientada por Objectos Se uma excepção do tipo RuntimeException é lançada e não é apanhada, na saída do programa printstacktrace() é chamado para essa excepção. Exemplos Exemplo 1: Programa que efectua 3 leituras de um número inteiro. Se a entrada não pode ser convertida num número, lança uma excepção que é capturada e imprime a mensagem Errado. import java.io.*; class Numero1{ public static String lerstring(string msg) throws java.io.ioexception { DataInputStream din = new DataInputStream(System.in); System.out.print(msg); return din.readline(); public static void main(string args []) throws java.io.ioexception { int n; for(int i=0; i<3; i++) { String s = lerstring("digite um numero: "); try { n = Integer.parseInt(s); System.out.println("Numero valido: " +n); catch (NumberFormatException nfe) { //nfe.printstacktrace(); System.out.println("Errado."); System.out.println("Fim."); System.in.read();

15 Programação Orientada por Objectos 101 Exemplo 2: Programa que efectua a leitura de um número inteiro até a entrada poder ser convertida num número. import java.io.*; class Numero2{ public static String lerstring(string msg) throws java.io.ioexception { DataInputStream din = new DataInputStream(System.in); System.out.print(msg); return din.readline(); public static void main(string args []) throws java.io.ioexception { boolean lido = false; int n; do { String s = lerstring("digite um numero: "); try { n = Integer.parseInt(s); lido = true; catch (NumberFormatException nfe) { //nfe.printstacktrace(); System.out.println("Tente outra vez:"); while (!lido); System.out.println("Fim."); System.in.read();

16 102 Programação Orientada por Objectos Ficheiros e Streams O armazenamento de dados em variáveis, arrays ou objectos é sempre temporário, porque os dados são perdidos quando as variáveis ou as referências aos objectos saem fora do âmbito de validade ou quando o programa termina. Os ficheiros são usados para retenção dos dados. Dados mantidos em ficheiros designam-se por dados persistentes. Os browsers não permitem aos applets ler ou escrever em ficheiros por razões de segurança. Por isso, programas de processamento de ficheiros são implementados como aplicações. Para realizar processamento de ficheiros em Java temos de importar o package java.io. Apresenta-se a seguir a hierarquia de classes de ficheiros e streams mais importantes: Object File InputStream FileInputStream FiterInputStream DataInputStream BufferedInputStream ObjectInputStream OutputStream FileOutputStream FiterOutputStream DataOutputStream BufferedOutputStream PrintStream ObjectOutputStream RandomAccessFile As entradas e saídas de dados em Java são baseados no uso de streams, que são sequências de bytes ou caracteres que fluem de uma fonte para um destino através de um dado caminho de comunicação. InputStream e OutputStream são classes abstractas que declaram métodos para realizar input e output. As classes derivadas destas reescrevem estes métodos. As classes FileInputStream e FileOutputStream destinam-se a criar objectos que abrem ficheiros para leitura ou para escrita, passando aos construtores uma string com o nome do ficheiro. Um ficheiro aberto para escrita, se já existe é inicializado (perdendo-se todo o seu conteúdo) e se não existe é criado.

17 Programação Orientada por Objectos 103 Não há o conceito de abrir um ficheiro para escrita de texto ASCII ou de dados binários. Pode-se escrever qualquer coisa sem fazer distinção entre caracteres e outros dados. Interface DataInput e interface DataOutput O interface DataInput é implementado pela classe DataInputStream e pela classe RandomAccessFile, declarando métodos para ler tipos primitivos de dados de streams. O interface DataOutput é implementado pela classe DataOutputStream e pela classe RandomAccessFile, declarando métodos para escrever tipos primitivos de dados em streams. Os interfaces DataInput e DataOutput fornecem métodos que suportam o input/output independente da máquina. Escrever Dados num Ficheiro Para abrir um ficheiro para escrita, usa-se um FileOutputStream construído com um objecto String ou File para o nome do ficheiro. Para escrever de um modo formatado temos que construir um objecto DataOutputStream usando como argumento do construtor o objecto FileOutputStream. A classe DataOutputStream fornece a capacidade de escrever objectos String e tipos primitivos para uma stream de saída. Podemos escrever dados num ficheiro criando um objecto do tipo DataOutputStream passando como argumento ao seu construtor um objecto FileOutputStream representando o ficheiro. FileOutputStream fileoutput = new FileOutputStream( info.dat ); DataOutputStream output = new DataOutputStream(fileOutput); Esta técnica designa-se por encadeamneto de objectos e é normalmente realizada apenas pela instrução: DataOutputStream output = new DataOutputStream( new FileOutputStream( info.dat )); Ler Dados de um Ficheiro Para abrir um ficheiro para leitura, usa-se um FileInputStream construído com um objecto String ou File para o nome do ficheiro. Para ler de um modo formatado temos que construir um objecto DataInputStream usando como argumento do construtor o objecto FileInputStream.

18 104 Programação Orientada por Objectos A classe DataInputStream fornece a capacidade de ler objectos String e tipos primitivos de uma stream de entrada. Podemos ler dados de um ficheiro criando um objecto do tipo DataInputStream passando como argumento ao seu construtor um objecto FileInputStream representando o ficheiro. FileInputStream fileinput = new File InputStream( info.dat ); DataInputStream input = new DataInputStream(fileInput); De um modo idêntico à escrita em ficheiros este encadeamneto de objectos é normalmente realizada apenas pela instrução: DataInputStream input = new DataInputStream( new FileInputStream( info.dat )); Excepções Quando se cria um objecto FileOutputStream para abrir um ficheiro, o programa testa se a operação de abertura teve sucesso. Se a operação falha (por exemplo se não há espaço de disco disponível) gera-se uma excepção IOException que pode ser capturada pelo programa. Exemplo: try { DatOutputStream output = new DataOutputStream( new FileOutputStream( info.dat )); catch (IOException e) { System.err.println( Ficheiro não aberto\n + e.tostring()); System.exit(1); Neste exemplo se a tentativa de abrir o ficheiro gera uma excepção IOException a mensagem de erro é mostrada e o programa termina. O argumento do método exit() é retornado ao ambiente do qual o programa foi invocado, normalmente o sistema operativo. O argumento 0 indica que o programa terminou normalmente e qualquer outro valor indica que o programa terminou devido a um erro. Este valor pode ser usado pelo ambiente que invocou o programa para reagir em conformidade. De um modo semelhante, quando se cria um objecto FileInputStream para abrir um ficheiro para leitura, o programa testa se a operação de abertura teve sucesso. Se a operação falha (ficheiro não existente, ou não permissão de leitura do ficheiro) gera-se uma excepção IOException que pode ser capturada pelo programa.

19 Programação Orientada por Objectos 105 Exemplo: try { DataInputStream input = new DataInputStream( new FileInputStream( info.dat )); catch (IOException e) { System.err.println( Ficheiro não aberto\n + e.tostring()); System.exit(1); Os dados devem ser lidos de ficheiros no mesmo formato no qual foram escritos no ficheiro. Os interfaces DataInput e DataOutput definem métodos que transmitem tipos primitivos de dados através de um stream. As classes DataInputStream e DataOutputStream fornecem uma implementação para cada interface. Os métodos de leitura e escrita existentes aos pares para cada tipo são: Leitura: Escrita: Tipo: boolean readboolean() void writeboolean(boolean) boolean byte readbyte() void writebyte(byte) byte short readshort() void writeshort(short) short int readint() void writeint(int) int long readlong() void writelong(long) long float readfloat() void writefloat(float) float double readdouble() void writedouble(double) double char readchar() void writechar(char) char String readutf() void writeutf(string) String Os métodos readutf() e writeutf() leêm e escrevem no formato UTF. UTF (Unicode Transmission Format) é o formato de transmissão Unicode. É uma forma binária que compacta caracteres Unicode de 16 bits em bytes de 8 bits. De um modo semelhante, quando se cria um objecto FileInputStream para abrir um ficheiro para leitura, o programa testa se a operação de abertura teve sucesso. Se a operação falha (ficheiro não existente, ou não permissão de leitura do ficheiro) gera-se uma excepção IOException que pode ser capturada pelo programa. Exemplo: try { DataInputStream input = new DataInputStream( new FileInputStream( info.dat )); catch (IOException e) { System.err.println( Ficheiro não aberto\n + e.tostring()); System.exit(1);

20 106 Programação Orientada por Objectos Para além destes métodos ainda referimos outro de leitura: String readline() throws IOException lê uma String até atingir \n, \r ou o par \r\n. A sequência fim de linha não é incluída na String. Retorna null se atinge o fim do input. E outro de escrita: void writechars(string s) throws IOException escreve uma string como uma sequência de char. Uma string escrita com o método writechars() deve ser lida usando um ciclo com readchar. É necessário escrever primeiro o comprimento da string ou usar um separador para marcar o fim. Os métodos complementares, tais como writedouble() e readdouble(), permitem recuperar a informação armazenada num ficheiro, mas para os métodos de leitura funcionarem correctamente deve-se conhecer a colocação exacta dos dados no ficheiro. Portanto ou os dados são armazenados no ficheiro num formato fixo ou informação extra deve ser armazenada no ficheiro que permita determinar onde e como os dados estão localizados (por exemplo precedendo cada item de dados por um par de bytes que informam o tipo e comprimento). O método close() fecha uma stream de entrada ou de saída e liberta os recursos associados com a stream. No caso de uma stream de saída qualquer dado escrito para a stream é armazenado antes de a stream ser desalocada. O método available() retorna o número de bytes que podem ser lidos sem bloqueamento, o que para um ficheiro significa até ao fim do ficheiro. Exemplos Exemplo 1: Programa que grava num ficheiro os primeiros 1000 números naturais e em seguida lê o mesmo ficheiro testando o fim de ficheiro com o método available(). import java.io.*; public class File1 { public static void main (String args []) throws java.io.ioexception { int [] valores = new int[1000]; for (int i=0; i<1000; i++) valores[i]=i+1;

21 Programação Orientada por Objectos 107 FileOutputStream fileoutput = new FileOutputStream("out.txt"); DataOutputStream output = new DataOutputStream(fileOutput); for (int i=0; i<valores.length; i++) output.writeint(valores[i]); output.close(); FileInputStream fileinput = new FileInputStream("out.txt"); DataInputStream input = new DataInputStream(fileInput); int v; while (input.available()!= 0) { v=input.readint(); System.out.println(v); input.close(); System.in.read(); Exemplo 2: Aplicação que grava no ficheiro nomes.dat um array de strings, usando o método writechars() e um separador para marcar o fim de cada string. O tamanho do array é gravado no início para permitir na leitura criar um array do mesmo tamanho. Depois o programa abre o ficheiro para leitura, lê o seu conteúdo para outro array de strings que cria, e mostra essas strings. import java.io.*; public class DataIO { static char SEP = ' '; static String readchars(datainputstream in, char separador) throws IOException { String s=""; char ch = in.readchar(); while (ch!= separador) { s += ch; ch = in.readchar(); return s; public static void writedata(string[] s, String fich) throws IOException { FileOutputStream fout = new FileOutputStream(fich); DataOutputStream out = new DataOutputStream(fout); out.writeint(s.length); for (int i=0; i< s.length; i++) { out.writechars(s[i]);

22 108 Programação Orientada por Objectos out.writechar(sep); out.close(); public static String [] readdata(string fich) throws IOException { FileInputStream fin = new FileInputStream(fich); DataInputStream in = new DataInputStream(fin); String [] s2 = new String[in.readInt()]; for (int i=0; i< s2.length; i++) s2[i] = readchars(in, SEP); in.close(); return s2; public static void main (String args []) throws java.io.ioexception { String [] nomes ={"Miguel", "Ana", "Carlos", "Joaquim"; writedata(nomes, "nomes.txt"); String [] nomes2; nomes2 = readdata("nomes.txt"); for (int i=0; i<nomes2.length; i++) System.out.println(nomes2[i]); System.in.read(); Exemplo 3: Aplicação que cria vários objectos da classe Conta, coloca-os num array e grava-os num ficheiro. Em seguida cria um novo vector de referências para objectos Conta e preenche-o com objectos lidos do mesmo ficheiro. Finalmente mostra o conteúdo do vector criado. A classe Conta permite construir uma conta com um dado número (num), primeiro nome (pnome), último nome (unome), e saldo (saldo), e também gravar num dado stream o conteúdo de um objecto Conta (writeconta()) assim como ler de um stream o conteúdo de um objecto (readconta()) criando o respectivo objecto. import java.io.*; class Conta { private int num; private String pnome, unome; private double saldo; public Conta(int num, String pnome, String unome, double saldo) { this.num = num; this.pnome = pnome;

23 Programação Orientada por Objectos 109 this.unome = unome; this.saldo = saldo; public void writeconta(dataoutputstream out) throws java.io.ioexception { out.writeint(num); out.writeutf(pnome); out.writeutf(unome); out.writedouble(saldo); public static Conta readconta(datainputstream in) throws java.io.ioexception { return new Conta( in.readint(), in.readutf(), in.readutf(), in.readdouble() ); public void print() { System.out.println(num + ": " + pnome + " " + unome + " -> saldo = " + saldo); public class DataIO { static void writedata(conta [] c, String ficheiro) throws java.io.ioexception { DataOutputStream out = new DataOutputStream( new FileOutputStream( ficheiro ) ); out.writeint(c.length); for (int i=0; i<c.length; i++) c[i].writeconta(out); out.close(); static Conta [] readdata (String ficheiro) throws java.io.ioexception { DataInputStream in = new DataInputStream( new FileInputStream(ficheiro)); Conta [] c = new Conta[in.readInt()]; for (int i=0; i< c.length; i++) c[i] = Conta.readConta(in); in.close(); return c;

24 110 Programação Orientada por Objectos public static void main (String args []) throws java.io.ioexception { Conta vect[] = new Conta[3]; vect[0] = new Conta (1, "Carlos", "Miguel", ); vect[1] = new Conta (2, "Jorge", "Silva", ); vect[2] = new Conta (3, "Manuel", "Santos", ); writedata(vect, "contas.dat"); Conta [] v = readdata("contas.dat"); for (int i=0; i<v.length; i++) v[i].print(); System.in.read(); O método writedata da classe DataIO abre o ficheiro para escrita e escreve o tamanho do array. Depois escreve, objecto a objecto, o conteúdo do array. Finalmente fecha o ficheiro. O método readdata da classe DataIO abre o ficheiro para leitura, lê o tamanho do array e cria um array de objectos. Depois, para cada elemento do array, invoca o método readdata da classe Conta que retorna um objecto criado com o conteúdo lido do ficheiro. Finalmente fecha o ficheiro. RandomAccessFile RandomAccessFile é uma classe que descende directamente da classe Object, mas que implementa os interfaces DataInput e DataOutput. Esta classe fornece a capacidade ler ou escrever directamente em localizações específicas de um ficheiro (movendo o apontador do ficheiro para uma posição arbitrária). Este acesso aleatório é suportado pelos seguintes métodos: getfilepointer() - retorna a localização corrente do apontador do ficheiro; seek() - move o apontador do ficheiro para uma nova localização; length() - retorna o tamanho do ficheiro em bytes. O construtor desta classe necessita de dois parâmetros do tipo String: o 1.º com o nome do ficheiro e o 2.º indicando o modo de abertura do ficheiro - só para leitura ( r ) ou para leitura e escrita ( rw ). O acesso só para leitura evita um ficheiro de ser inadvertidamente modificado. import java.io.*; class File1 { public static void main (String args []) throws java.io.ioexception { int [] valores = new int[10]; for (int i=0; i<1000; i++) valores[i]=i+1; int v; // escrita dos dados RandomAccessFile fo = new RandomAccessFile("out.txt", "rw"); for (int i=0; i<valores.length; i++) fo.writeint(valores[i]); fo.close(); // leitura aleatória dos dados

25 Programação Orientada por Objectos 111 RandomAccessFile fi = new RandomAccessFile("out.txt", "r"); // Exemplo da leitura dos dados armazenados de 8 em 8 bytes for (int i=0; i<fi.length(); i=i+8) { fi.seek(i); v=fi.readint(); System.out.println(v); fi.close(); System.in.read(); /* Outro exemplo com ficheiro de acesso aleatório */ import java.io.*; class File1 { public static int lerinteiro(string s) throws java.io.ioexception { System.out.print(s); BufferedReader d = new BufferedReader( new InputStreamReader(System.in)); int x = Integer.parseInt(d.readLine()); return x; public static void main (String args []) throws java.io.ioexception { int [] valores = new int[20]; for (int i=0; i<20; i++) valores[i]=i+1; RandomAccessFile fo = new RandomAccessFile("out.txt", "rw"); // escrita dos dados for (int i=0; i<valores.length; i++) fo.writeint(valores[i]); fo.close(); // leitura e escrita aleatoria dos dados RandomAccessFile fi = new RandomAccessFile("out.txt", "r"); int i=lerinteiro("escreva uma posicao do ficheiro: "); int v; System.out.println( "Leitura e escrita aleatoria dos dados (termine com a posicao -1)"); fi = new RandomAccessFile("out.txt", "rw"); i=lerinteiro("escreva uma posicao do ficheiro: "); while (i!=-1) { fi.seek(i); v=fi.readint(); System.out.println("Valor existente: " + v); int j= lerinteiro("valor a reescrever nessa posicao : "); fi.seek(i); fi.writeint(j); i=lerinteiro("escreva uma posicao do ficheiro: "); fi.close();

26 112 Programação Orientada por Objectos /* Aplicação que cria vários objectos da classe Conta, coloca-os num array e grava-os num ficheiro. Em seguida cria um novo array de referências para objectos Conta, preenche-o com objectos lidos do mesmo ficheiro e mostra o conteúdo do vector criado. Ainda é criado mais um objecto da classe Conta que é adicionado ao ficheiro. No fim todo o conteúdo do ficheiro é listado. */ import java.io.*; class Conta { private int num; private String pnome, unome; private double saldo; public Conta( int num, String pnome, String unome, double saldo) { this.num = num; this.pnome = pnome; this.unome = unome; this.saldo = saldo; public void writeconta(dataoutputstream out) throws java.io.ioexception { out.writeint(num); out.writeutf(pnome); out.writeutf(unome); out.writedouble(saldo); public void writeconta(randomaccessfile out) throws java.io.ioexception { out.writeint(num); out.writeutf(pnome); out.writeutf(unome); out.writedouble(saldo); public static Conta readconta(datainputstream in) throws java.io.ioexception { return new Conta( in.readint(), in.readutf(), in.readutf(), in.readdouble() ); public void print() { System.out.println( num + ": " + pnome + " " + unome +" -> saldo = " + saldo);

27 Programação Orientada por Objectos 113 class DataIO { static void writedata(conta [] c, String ficheiro) throws java.io.ioexception { DataOutputStream out = new DataOutputStream( new FileOutputStream( ficheiro ) ); out.writeint(c.length); for (int i=0; i<c.length; i++) c[i].writeconta(out); out.close(); static Conta [] readdata (String ficheiro) throws java.io.ioexception { DataInputStream in = new DataInputStream(new FileInputStream(ficheiro)); Conta [] c = new Conta[in.readInt()]; for (int i=0; i< c.length; i++) c[i] = Conta.readConta(in); in.close(); return c; public static void main (String args []) throws java.io.ioexception { Conta vect[] = new Conta[3]; vect[0] = new Conta (1, "Carlos", "Miguel", ); vect[1] = new Conta (2, "Jorge", "Silva", ); vect[2] = new Conta (3, "Manuel", "Santos", ); writedata(vect, "contas.dat"); Conta [] v1 = readdata("contas.dat"); for (int i=0; i<v1.length; i++) v1[i].print(); // append de uma nova Conta Conta nova = new Conta (4, "Outra", "Conta", 0.5); RandomAccessFile f = new RandomAccessFile("contas.dat", "rw"); int quant = f.readint() + 1; f.seek(0); f.writeint(quant); f.seek(f.length()); nova.writeconta(f); f.close(); Conta [] v2 = readdata("contas.dat"); for (int i=0; i<v2.length; i++) v2[i].print(); System.in.read();

28 114 Programação Orientada por Objectos Serialização Serialização é o processo de converter objectos para um formato adequado para entrada ou saída de stream. Des-serialização é o processo de voltar a converter um objecto serializado numa instância de um objecto. Para que um objecto possa ser serializado tem de implementar o interface Serializable. O mecanismo de des-serialização para objectos restaura o conteúdo de cada campo com o valor e tipo que tinha quando foi escrito. Referências a outros objectos faz com que esses objectos sejam lidos do stream. Grafos de objectos são restaurados correctamente usando um mecanismo de partilha de referências. Novos objectos são sempre alocados quando des-serializados, o que evita que objectos existentes sejam reescritos. Os interfaces DataInput e DataOutput fornecem métodos que suportam o input/output independente da máquina. Os interfaces ObjectInput e ObjectOutput extendem os interfaces DataInput e DataOutput para trabalhar com objectos. Input/Output de Objectos As classes ObjectOutputStream e ObjectInputStream permitem escrever e ler de streams, objectos e tipos primitivos de dados. Estas classes implementam os interfaces ObjectOutput e ObjectInput. Dos métodos especificados por ObjectOutput, o método writeobject() é o mais importante escreve objectos que implementem o interface Serializable para um stream. O interface ObjectInput declara o método readobject() para ler os objectos escritos para um stream pelo método writeobject(). Quando um objecto é escrito na forma serializado, juntamente com o objecto é armazenada informação que identifica a classe Java a partir da qual o conteúdo do objecto foi gravado, o que permite restaurar o objecto como uma nova instância dessa classe. Quando um objecto é serializado, todos os objectos não estáticos atingíveis a partir desse objecto são também armazenados com esse objecto. O interface Serializable é usado para identificar objectos que podem ser escritos para um stream. Este interface não define quaisquer constantes ou métodos.

29 Programação Orientada por Objectos 115 import java.io.*; class Conta implements Serializable { private int num; private String pnome, unome; private double saldo; public Conta( int num, String pnome, String unome, double saldo) { this.num = num; this.pnome = pnome; this.unome = unome; this.saldo = saldo; public void print() { System.out.println( num + ": " + pnome + " " + unome +" -> saldo = " + saldo); class DataIO { public static void main (String args []) throws java.io.ioexception, java.lang.classnotfoundexception { Conta vect[] = new Conta[3]; vect[0] = new Conta (1, "Carlos", "Miguel", ); vect[1] = new Conta (2, "Jorge", "Silva", ); vect[2] = new Conta (3, "Manuel", "Santos", ); String fich = "contas.dat"; ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(fich)); out.writeint(vect.length); for (int i=0; i<vect.length; i++) out.writeobject(vect[i]); out.close(); ObjectInputStream in = new ObjectInputStream( new FileInputStream(fich)); Conta [] v = new Conta[in.readInt()]; for (int i=0; i< v.length; i++) v[i] = (Conta) in.readobject(); in.close(); for (int i=0; i<v.length; i++) v[i].print(); System.in.read();

30 116 Programação Orientada por Objectos /* Versão com a escrita e leitura de um único objecto: o array de objectos Conta */ class DataIO { public static void main (String args []) throws java.io.ioexception, java.lang.classnotfoundexception { Conta vect[] = new Conta[3]; vect[0] = new Conta (1, "Carlos", "Miguel", ); vect[1] = new Conta (2, "Jorge", "Silva", ); vect[2] = new Conta (3, "Manuel", "Santos", ); String fich = "contas.dat"; ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(fich)); out.writeobject(vect); out.close(); ObjectInputStream in = new ObjectInputStream( new FileInputStream(fich)); Conta [] v = (Conta []) in.readobject(); in.close(); for (int i=0; i<v.length; i++) v[i].print(); System.in.read();

31 Programação Orientada por Objectos 117 Threads A estruturação de um programa em classes e a criação de objectos permitem dividir um programa em secções independentes. Por vezes, surge também a necessidade de separar um programa em subtarefas que possam correr independentemente. Cada subtarefa independente designa-se por thread. Um processo - é um programa autónomo em execução com o seu próprio espaço de endereçamento. Um sistema operativo multitarefa - é um sistema operativo capaz de correr mais que um processo de cada vez. Um thread - é um fluxo de controlo sequencial único dentro de um processo. Um só processo pode ter múltiplos threads em execução corrente. Usos de Multithreading Suponhamos que temos um botão quit que quando pressionado termina o programa. Pretendemos que o botão responda rapidamente quando pressionado. Para não termos que verificar o estado do botão regularmente em todas as partes do código que escrevemos, criámos um thread para fazer essa verificação e colocámo-lo a correr independentemente. Normalmente cria-se um thread para qualquer parte do programa ligada a um determinado evento ou recurso, que corre independentemente do programa principal. O tempo do CPU é repartido entre todos os threads, o que reduz a eficiência da computação, mas o melhoramento no projecto do programa e no balanceamento de recursos compensa. Programas com 1 único thread podem conseguir uma ilusão de múltiplos threads quer através de interrupções ou por polling (algumas actividades do programa intercaladas com outras). Mas, num programa, a mistura de 2 funções não relacionadas, resulta num código complexo e de difícil manutenção. Muitos problemas de software são melhor resolvidos usando múltiplos threads de controlo. Um thread de controlo pode actualizar o que é mostrado, outro responde a entradas do utilizador, etc. Criação de Threads Os threads existem definidos numa classe Thread da biblioteca standard Java. Para criar um thread, poder-se-ia criar um objecto thread: ( Thread t = new Thread(); ), e em seguida configurar o thread colocando a prioridade inicial e nome, e invocando o método start() que bifurca um thread de controlo com os dados do objecto thread, e retorna.

32 118 Programação Orientada por Objectos Depois a máquina virtual Java (interpretador) invocaria o método run() do thread, tornando o thread activo até que esse método run() retorne, altura em que o thread termina. Mas a implementação do método run() da classe Thread não faz nada. Para ter um thread que faça qualquer coisa temos que reescrever o método run() e para isso é necessário criar uma subclasse de Thread. Outro processo para criar um thread consiste em criar um objecto que implemente o interface Runnable (definindo o método run()) e passando esse objecto Runnable ao construtor da classe Thread. Classe Thread public class Thread extends Object implements Runnable Construtores: public Thread() public Thread(String nome) public Thread(Runnable obj) public Thread(Runnable obj, String nome) Métodos de classe: public static boolean interrupted(); public static void sleep(long milis) throws InterruptedException; Métodos instância: public synchronized void start(); public void run(); public final void suspend(); public final void resume(); public final void stop(); start() inicia a execução de um thread, stop() pára essa execução, suspend() pára o thread temporariamente, resume() retoma a execução do thread, sleep(t) pára o thread durante uma quantidade especificada de tempo em milisegundos. O método run() do thread é o corpo do thread. Começa a executar quando o método start() do objecto thread é chamado. O thread corre até que o método run() retorne ou o método stop() seja invocado.

33 Programação Orientada por Objectos 119 Exemplos A maneira mais simples de criar um thread é herdar da classe Thread a qual possui os métodos necessários para criar e correr threads. O método mais importante é run(), o qual se deve reescrever com o código que será executado simultaneamente com os outros threads no programa. Exemplo 1: Programa cria 2 threads que imprimem as palavras sim e nao com cadências diferentes. public class T extends Thread { private String palavra; private int temp; private int cont=0; public T( String p, int t, int c) { palavra = p; temp = t; cont = c; public void run() { int i = 0; try { while ( i++ <= cont ) { System.out.println(palavra); sleep(temp); catch (InterruptedException e) { return; public static void main(string args []) throws java.io.ioexception { T t = new T("sim", 20, 10); t.start(); t = new T("nao", 100, 5); t.start(); System.in.read();

34 120 Programação Orientada por Objectos O método sleep(t) da classe Thread causa uma paragem durante t milisegundos. Este método pode lançar uma excepção do tipo InterruptedException se interrompido. Mas o método T.run() não pode lançar excepções porque reescreve o método Thread.run() e este não lança qualquer excepção. Assim é necessário capturar a excepção que sleep() pode lançar dentro do método T.run(). O método T.main() cria 2 objectos do tipo T (threads) e invoca o método start() para cada objecto. Exemplo 2: Programa cria 3 threads. Cada thread imprime o seu número seguido do valor de um contador que decrementa de 5 até 1. public class A extends Thread { private int cont = 5; private int id; private static int ultid=0; public A() { id = ++ultid; System.out.println("Criado thread n. " + id); public void run() { while (true) { System.out.println( "Thread n. " + id + "(" + cont + ")"); if (--cont == 0) return;

35 Programação Orientada por Objectos 121 public static void main (String args []) throws java.io.ioexception { for (int i=0; i<3; i++) // A a = new A(); // a.start(); new A().start(); System.out.println("Todos os threads iniciados."); System.in.read(); Usando Runnable O interface Runnable abstrai o conceito de tudo o que executa código enquanto activo. O interface Runnable declara 1 único método: public void run() A classe Thread implementa o interface Runnable. Thread pode ser estendida para criar threads com execuções específicas, mas esta aproximação pode ser difícil de usar, porque Java só permite herança simples. Se uma classe é estendida (como subclasse de Thread) já não pode ser estendida como subclasse de outra classe, mesmo que se precise. Implementando Runnable é mais simples em muitos casos. Pode-se executar um objecto Runnable num thread próprio passando-o ao construtor Thread. Se um objecto thread é construído com um objecto Runnable, a implementação de Thread.run() invocará o método run() do objecto Runnable. Vejamos uma versão Runnable do 1.º exemplo apresentado. public class RunT implements Runnable { private String palavra;

36 122 Programação Orientada por Objectos private int temp; private int cont=0; public RunT( String p, int t, int c) { palavra = p; temp = t; cont = c; public void run() { int i = 0; try { while ( i++ <= cont ) { System.out.println(palavra); Thread.sleep(temp); catch (InterruptedException e) { return; public static void main(string args []) throws java.io.ioexception { Runnable sim = new RunT("sim", 20, 10); Runnable nao = new RunT("nao", 100, 5); Thread t = new Thread(sim); t.start(); t = new Thread(nao); t.start(); System.in.read();

37 Programação Orientada por Objectos 123 Este programa é muito idêntico ao 1.º exemplo apresentado, diferindo apenas na superclasse (Runnable versus Thread) e no método main(). A implementação do método run() é a mesma. Nesta implementação criam-se 2 objectos Runnable (RunT) e em seguida 2 objectos Thread, passando cada objecto runnable como argumento ao construtor do objecto Thread. Sincronização Um thread pode realizar uma tarefa independentemente de outro thread. Também dois threads podem partilhar o acesso ao mesmo objecto. Quando dois threads podem modificar o mesmo dado, se ambos os threads realizam a sequência ler-modificar-escrever de um modo intercalado podem corromper esse dado. Como exemplo suponhamos que 2 threads actualizam o saldo de uma conta (objecto c) após um depósito, aproximadamente ao mesmo tempo. thread1 thread2 s1 = c.getsaldo(); s2 = c.getsaldo(); s1 += deposito; s2 += deposito; c.setsaldo(s1); c.setsaldo(s2); Se as sequências ler-modificar-escrever são realizadas intercaladamente só o último depósito afecta o saldo perdendo-se a primeira modificação. Um modo de resolver este problema é não permitir o acesso ao objecto enquanto estiver a ser usado. O 2º thread terá de esperar até o objecto ser liberto pelo 1º thread. Sempre que 2 threads necessitam de usar o mesmo objecto, há a possibilidade de operações intercaladas corromperem os dados. Para sincronizar os acessos de vários threads a um dado objecto de modo a não corromperem os dados, um thread coloca um lock (fecho) no objecto, e quando outro thread tenta aceder ao objecto, fica bloqueado até que o primeiro thread termine.

38 124 Programação Orientada por Objectos Mas nem todos os métodos de um thread podem corromper os dados (por exemplo métodos de leitura). Por isso só os métodos de um thread que possam interferir com outros são declarados synchronized. Se um thread invoca um método sincronizado num objecto, esse objecto fica no estado locked (fechado) por esse thread. Se outro thread invocar um método sincronizado para esse mesmo objecto, bloqueará até o objecto ser liberto do lock. A invocação de um método não sincronizado prossegue normalmente sem ser afectado por qualquer lock. Cada estado locked de um objecto existe por thread, por isso a invocação de um método sincronizado num objecto de dentro de outro método sincronizado que colocou esse objecto no estado locked prossegue sem bloqueamento, ficando o objecto liberto de lock quando o método sincronizado mais externo retorna. Threads sincronizados são mutuamente exclusivos no tempo. O exemplo da actualização do saldo da mesma conta após um depósito por mais que um thread poderia ser feito a partir da seguinte classe Conta: class Conta { private double saldo; public Conta( double depositoinicial ) { saldo = depositoinicial; public synchronized double getsaldo() { return saldo; public synchronized void deposito( double deposito ) { saldo += deposito; Se o valor de um campo pode mudar, não deve ser permitido ler esse valor ao mesmo tempo que outro thread o escreve, pois a leitura pode retornar um valor inválido. O acesso ao campo deve ser sincronizado e por isso o campo não deve poder ser acedido directamente fora da classe (campo público ou protected). O campo deve ser declarado private e deve existir um método de acesso sincronizado ao valor desse campo. Instruções sincronizadas Uma instrução sincronizada permite executar código sincronizado que coloca um objecto no estado locked durante a execução desse código sem necessidade de invocar um método sincronizado para esse objecto. synchronized (expr) { instruções

1. Estude e implemente a classe Exemplo1 apresentada abaixo:

1. Estude e implemente a classe Exemplo1 apresentada abaixo: P. Fazendeiro & P. Prata POO FP09/1 Exceções Uma exceção (Exception) é um sinal gerado pela máquina virtual de Java em tempo de execução indicando uma situação de erro da qual é possível recuperar. O objectivo

Leia mais

Prof. A. G. Silva. 13 de novembro de Prof. A. G. Silva INE5603 Introdução à POO 13 de novembro de / 1

Prof. A. G. Silva. 13 de novembro de Prof. A. G. Silva INE5603 Introdução à POO 13 de novembro de / 1 INE5603 Introdução à POO Prof. A. G. Silva 13 de novembro de 2017 Prof. A. G. Silva INE5603 Introdução à POO 13 de novembro de 2017 1 / 1 Introdução à manipulação de arquivos Prof. A. G. Silva INE5603

Leia mais

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Programação Orientada a Objectos - P. Prata, P. Fazendeiro 8.1 - A classe File Antes de podermos ler/escrever de/para um ficheiro temos que criar um objecto do tipo File e associar esse objecto ao ficheiro a que queremos aceder. Para isso usamos um dos construtores

Leia mais

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Programação Orientada a Objectos - P. Prata, P. Fazendeiro Quando um programa viola as restrições semânticas da linguagem, a JVM assinala um erro ao programa, sob a forma de exceção. Uma exceção é um erro recuperável O controlo da execução do programa é transferido

Leia mais

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Programação Orientada a Objectos - P. Prata, P. Fazendeiro 6 Exceções Quando um programa viola as restrições semânticas da linguagem, a JVM assinala um erro ao programa, sob a forma de exceção. Uma exceção é um erro recuperável O controlo da execução do programa

Leia mais

Quando um programa viola as restrições semânticas da linguagem, a JVM assinala um erro ao programa, sob a forma de exceção.

Quando um programa viola as restrições semânticas da linguagem, a JVM assinala um erro ao programa, sob a forma de exceção. 6 Exceções Quando um programa viola as restrições semânticas da linguagem, a JVM assinala um erro ao programa, sob a forma de exceção. Uma exceção é um erro recuperável - O controlo da execução do programa

Leia mais

Tratamento de Exceções

Tratamento de Exceções Tratamento de Exceções Universidade Católica de Pernambuco Ciência da Computação Prof. Márcio Bueno poonoite@marciobueno.com Fonte: Material da Profª Karina Oliveira Introdução Exceções São eventos que

Leia mais

InputStream e OutputStream para ler/ escrever bytes e das classes abstractas Reader e Writer para ler /escrever caracteres (texto).

InputStream e OutputStream para ler/ escrever bytes e das classes abstractas Reader e Writer para ler /escrever caracteres (texto). Input e Output 8 Streams Uma stream é uma abstracção que representa uma fonte genérica de entrada de dados ou um destino genérico para escrita de dados que é definida independentemente do dispositivo físico

Leia mais

Tratamento de Exceções. LPG II Java. Tratamento de Exceções. Conceito de Exceções. Exemplo

Tratamento de Exceções. LPG II Java. Tratamento de Exceções. Conceito de Exceções. Exemplo Tratamento de Exceções LPG II Java Tratamento de Exceções Introdução Princípios do tratamento de exceções em Java Cláusula try Cláusula catch Cláusula finally Hierarquia de exceções em Java Considerações

Leia mais

Como pôde verificar, a criação de um objecto do tipo File não cria o ficheiro em disco.

Como pôde verificar, a criação de um objecto do tipo File não cria o ficheiro em disco. Folha 1-1 I/O em java (pakage java.io) A classe File A classe File (subclasse de Object) permite manipular os ficheiros e as directorias de um sistema de ficheiros. 1 - Substituindo o texto d:\\my_work\\

Leia mais

Tratamento de Exceções. Java Avançado. Tratamento de Exceções. Conceito de Exceções. Exemplo

Tratamento de Exceções. Java Avançado. Tratamento de Exceções. Conceito de Exceções. Exemplo Tratamento de Exceções Java Avançado Tratamento de Exceções Roberto Vedoato vedoato@joinville.udesc.br Introdução Princípios do tratamento de exceções em Java Cláusula try Cláusula catch Cláusula finally

Leia mais

Motivação. Java First-Tier: Aplicações. Entrada & Saída. Stream de Entrada. Stream de Saída. Pacote java.io. Leitura e Escrita de Streams

Motivação. Java First-Tier: Aplicações. Entrada & Saída. Stream de Entrada. Stream de Saída. Pacote java.io. Leitura e Escrita de Streams Java First-Tier: Aplicações Entrada & Saída Grupo de Linguagens de Programação Departamento de Informática PUC-Rio Motivação Uma aplicação normalmente precisa obter e/ou enviar informações a fontes/destinos

Leia mais

Tratamento de Exceções cont. Profa. Thienne Johnson EACH/USP

Tratamento de Exceções cont. Profa. Thienne Johnson EACH/USP Tratamento de Exceções cont. Profa. Thienne Johnson EACH/USP Java, como programar Deitel & Deitel Capítulo 14 continuação Todas as classes de exceção de Java herdam, direta ou indiretamente, da classe

Leia mais

Reader e Writer para streams de caracteres (texto).

Reader e Writer para streams de caracteres (texto). Folha 1-1 Recordando POO: Streams Uma stream é uma abstracção que representa uma fonte genérica de entrada de dados ou um destino genérico para escrita de dados que é definida independentemente do dispositivo

Leia mais

Programação Java. Entrada & Saída

Programação Java. Entrada & Saída Programação Java Entrada & Saída Grupo de Linguagens de Programação Departamento de Informática PUC-Rio Motivação Uma aplicação normalmente precisa obter e/ou enviar informações a fontes/destinos externos

Leia mais

Arquivos continuação. Profa. Thienne Johnson EACH/USP

Arquivos continuação. Profa. Thienne Johnson EACH/USP Arquivos continuação Profa. Thienne Johnson EACH/USP Java, como programar, 6ª edição Deitel & Deitel Capítulo 14 Serialização de objetos Lê e escreve objetos inteiros em arquivo; Arquivo em formato binário.

Leia mais

PROGRAMAÇÃO ORIENTADA A OBJETOS -TRATAMENTO DE EXCEÇÕES. Prof. Angelo Augusto Frozza, M.Sc.

PROGRAMAÇÃO ORIENTADA A OBJETOS -TRATAMENTO DE EXCEÇÕES. Prof. Angelo Augusto Frozza, M.Sc. PROGRAMAÇÃO ORIENTADA A OBJETOS -TRATAMENTO DE EXCEÇÕES Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br ROTEIRO 4. Sistemas de Tratamento de Exceções Exceções genéricas Classes de exceções

Leia mais

Notas de Aula 09: Tratamento de exceções

Notas de Aula 09: Tratamento de exceções Notas de Aula 09: Tratamento de exceções Objetivos da aula: Compreender o conceito de exceção Aprender a tratar exceções nos programas Entender a hierarquia das exceções Criar e lançar uma exceção proprietária

Leia mais

TRATAMENTO DE EXCEÇÕES

TRATAMENTO DE EXCEÇÕES Uma exceção em Java é um sinal que alguma condição excepcional aconteceu; Algo de errado aconteceu! Exemplos: solicitação de abertura de um arquivo não encontrado; índice de um array fora de faixa; uma

Leia mais

ESQUEMA AULA PRÁTICA 1

ESQUEMA AULA PRÁTICA 1 P. Fazendeiro & P. Prata POO FP1/1 ESQUEMA AULA PRÁTICA 1 Familiarização com o Ambiente JBuilder Introdução à Linguagem de Programação JAVA 0 Inicie o ambiente de desenvolvimento integrado JBuilder. Start

Leia mais

ESQUEMA AULA PRÁTICA 1

ESQUEMA AULA PRÁTICA 1 P. Fazendeiro & P. Prata POO FP1/1 ESQUEMA AULA PRÁTICA 1 Familiarização com o Ambiente JBuilder Introdução à Linguagem de Programação JAVA 0 Inicie o ambiente de desenvolvimento integrado JBuilder. Start

Leia mais

Pontifícia Universidade Católica de São Paulo Departamento de Ciência da Computação

Pontifícia Universidade Católica de São Paulo Departamento de Ciência da Computação Pontifícia Universidade Católica de São Paulo Departamento de Ciência da Computação LP: Laboratório de Programação Apontamento 14 Prof. ISVega Maio de 2004 Mecanismo de Exceções em Java CONTEÚDO 14.1Erros,

Leia mais

Palavras Reservadas da Linguagem Java

Palavras Reservadas da Linguagem Java Palavras Reservadas da Linguagem Java Palavras Reservadas da Linguagem Java: Categorias Tipos de dados primitivos Literais Pseudo-variáveis Desvio e controle de fluxo Pacotes Exceções Modificadores de

Leia mais

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Programação Orientada a Objectos - P. Prata, P. Fazendeiro 3 Classes e instanciação de objectos (em Java) Suponhamos que queremos criar uma classe que especifique a estrutura e o comportamento de objectos do tipo Contador. As instâncias da classe Contador devem

Leia mais

Hierarquia de classes. Veja as diversas classes do pacote

Hierarquia de classes. Veja as diversas classes do pacote Entrada e Saída Introdução Input e Output fazem parte do pacote java.io Esse pacote tem uma quantidade grande de classes que dão suporte a operações de entrada e saída As classes básicas são InputStream

Leia mais

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Programação Orientada a Objectos - P. Prata, P. Fazendeiro 9 Classes Abstractas e Interfaces Classe Abstracta Classe em que pelo menos um dos métodos de instância não é implementado. Exemplo: public abstract class Forma{ public abstract double area(); public abstract

Leia mais

Linguagem de Programação II Implementação

Linguagem de Programação II Implementação Linguagem de Programação II Implementação Prof. Alessandro Borges 2 Tópicos Implementação em Java Variáveis Palavras reservadas Pacotes Identificador this Acessando membros de outros objetos API Java Nossa

Leia mais

Tratamento de Exceção. Tratamento de Exceções. Vantagens de TE. Exemplos de Exceções. Exemplo: Divide1 (sem TE)

Tratamento de Exceção. Tratamento de Exceções. Vantagens de TE. Exemplos de Exceções. Exemplo: Divide1 (sem TE) DCC / ICEx / UFMG Tratamento de Exceção Tratamento de Exceções Eduardo Figueiredo http://www.dcc.ufmg.br/~figueiredo Uma exceção é uma indicação de problema na execução do programa Exceção foge ao fluxo

Leia mais

Programação por Objectos. Java

Programação por Objectos. Java Programação por Objectos Java Parte 6: Herança e Polimorfismo LEEC@IST Java 1/50 Herança revisão (1) A herança é um mecanismo em que a subclasse constitui uma especialização da superclasse. A superclasse

Leia mais

JAVA. Tópicos Especiais de Programação Orientada a Objetos. sexta-feira, 28 de setembro de 12

JAVA. Tópicos Especiais de Programação Orientada a Objetos. sexta-feira, 28 de setembro de 12 JAVA Tópicos Especiais de Programação Orientada a Objetos 1 TRY CATCH 2 O que fazer quando algo inesperado acontece? 3 O que fazer quando algo inesperado acontece? Com JAVA podemos nos prevenir!!! 3 O

Leia mais

Exceções AULA 13. Ricardo Massa F. Lima Sérgio C. B. Soares

Exceções AULA 13. Ricardo Massa F. Lima Sérgio C. B. Soares Introdução a Programação IF669 http://www.cin.ufpe.br/~if669 Exceções AULA 13 Ricardo Massa F. Lima rmfl@cin.ufpe.br Sérgio C. B. Soares scbs@cin.ufpe.br Exceções Objetivo Depois desta aula você será capaz

Leia mais

[Magee 1999] Concurrency State Models and Java Programs, Jeff Magee, Jeff Kramer, John Wiley 1999.

[Magee 1999] Concurrency State Models and Java Programs, Jeff Magee, Jeff Kramer, John Wiley 1999. Cap. IV - Programação Concorrente [Magee 1999] Concurrency State Models and Java Programs, Jeff Magee, Jeff Kramer, John Wiley 1999. [Gosling] The Java Language Specification James Gosling, Bill Joy and

Leia mais

Tipos, Literais, Operadores

Tipos, Literais, Operadores Tipos, Literais, Operadores Identificadores São palavras utilizadas para nomear variáveis, métodos e classes Na linguagem Java, o identificador sempre começa por letra, sublinhado(_) ou cifrão ($) Não

Leia mais

Tipos, Literais, Operadores

Tipos, Literais, Operadores Tipos, Literais, Operadores Identificadores São palavras utilizadas para nomear variáveis, métodos e classes Na linguagem Java, o identificador sempre começa por letra, sublinhado(_) ou cifrão ($) Não

Leia mais

Instituto Superior de Engenharia de Lisboa

Instituto Superior de Engenharia de Lisboa Instituto Superior de Engenharia de Lisboa Introdução à Programação (PG) Docente: Pedro Viçoso Fazenda (pfazenda@cedet.isel.ipl.pt) Professor Responsável: Pedro Alexandre Pereira (palex@cc.isel.ipl.pt)

Leia mais

9 Classes Abstractas e Interfaces

9 Classes Abstractas e Interfaces 9 Classes Abstractas e Interfaces Classe Abstracta Classe em que pelo menos um dos métodos de instância não é implementado. Exemplo: public abstract class Forma{ public abstract double area(); public abstract

Leia mais

22/9/16. Agenda. Erros. Erros. Exceções. Mecanismo de exceções

22/9/16. Agenda. Erros. Erros. Exceções. Mecanismo de exceções Agenda Desenvolvimento OO com Java Exceções Vítor E. Silva Souza (vitorsouza@inf.ufes.br) http://www.inf.ufes.br/ ~ vitorsouza Apresentar o mecanismo de tratamento de exceções de Java; Explicar os diferentes

Leia mais

Tratamento de Exceções. Profa. Thienne Johnson EACH/USP

Tratamento de Exceções. Profa. Thienne Johnson EACH/USP Tratamento de Exceções Profa. Thienne Johnson EACH/USP Java, como programar Deitel & Deitel Capítulo 14 Uma exceção é uma indicação de um problema que ocorre durante a execução de um programa O tratamento

Leia mais

Recapitulando. Construtores: (Overload assinatura) public Circle() {...} public Circle(double x, double y, double r) {... }

Recapitulando. Construtores: (Overload assinatura) public Circle() {...} public Circle(double x, double y, double r) {... } Recapitulando Orientação a objetos: programas organizados em torno da definição de classes, instanciação de objetos e troca de mensagens. Declaração de variáveis de referencia: Circle c; Criação/instanciação

Leia mais

9 Exceções. Desenvolvimento OO com Java. Vítor E. Silva Souza ~ vitorsouza

9 Exceções. Desenvolvimento OO com Java. Vítor E. Silva Souza  ~ vitorsouza Desenvolvimento OO com Java 9 Exceções Vítor E. Silva Souza (vitorsouza@inf.ufes.br) http://www.inf.ufes.br/ ~ vitorsouza Departamento de Informática Centro Tecnológico Universidade Federal do Espírito

Leia mais

Threads. O que é uma Thread? Paralelismo

Threads. O que é uma Thread? Paralelismo Threads em Java 1 O que é uma Thread? Paralelismo Threads Multi- threading é o mecanismo de concorrência suportado explicitamente pela linguagem Java. Os mecanismos de gerenciamento e sincronização de

Leia mais

Programação Concorrente com Thread Java. Luiz Affonso Guedes Sistemas Distribuidos

Programação Concorrente com Thread Java. Luiz Affonso Guedes Sistemas Distribuidos Programação Concorrente com Thread Java Luiz Affonso Guedes Sistemas Distribuidos Definições Básicas Threads são sub-procesos no sistema operacional. É menos custoso gerenciar threads do que processos.

Leia mais

Programação Orientada a Objectos - P. Prata, P. Fazendeiro. Hierarquia de classes e mecanismo de ligação

Programação Orientada a Objectos - P. Prata, P. Fazendeiro. Hierarquia de classes e mecanismo de ligação 4 Conceito de Herança Hierarquia de classes e mecanismo de ligação Herança Uma classe pode herdar operações de uma superclasse e as suas operações podem ser herdadas por subclasses. O mecanismo de herança

Leia mais

Programação de Computadores II TCC /Turma A 1

Programação de Computadores II TCC /Turma A 1 Programação de Computadores II TCC 00.174/Turma A 1 Professor Leandro A. F. Fernandes http://www.ic.uff.br/~laffernandes Conteúdo: Tratamento de exceções Material elaborado pelos profs. Anselmo Montenegro

Leia mais

Tratamento de Exceção. Programação Orientada a Objetos Java (Rone Ilídio)

Tratamento de Exceção. Programação Orientada a Objetos Java (Rone Ilídio) Tratamento de Exceção Programação Orientada a Objetos Java (Rone Ilídio) Tratamento de exceção Exceção é uma contração de Evento de Exceção Evento de exceção impede a execução normal de um programa Quando

Leia mais

4 Conceito de Herança

4 Conceito de Herança 4 Conceito de Herança Hierarquia de classes e mecanismo de ligação Herança Uma classe pode herdar operações de uma superclasse e as suas operações podem ser herdadas por subclasses. O mecanismo de herança

Leia mais

Tratamento de Exceções. Grupo de Linguagens de Programação Departamento de Informática PUC-Rio

Tratamento de Exceções. Grupo de Linguagens de Programação Departamento de Informática PUC-Rio Tratamento de Exceções Grupo de Linguagens de Programação Departamento de Informática PUC-Rio Terminologia Definições: Exceção é a ocorrência de uma condição anormal durante a execução de um método Falha

Leia mais

Tratamento de Exceções, Multithreads e arquivos (em Java) Programação Orientada a Objetos

Tratamento de Exceções, Multithreads e arquivos (em Java) Programação Orientada a Objetos Tratamento de Exceções, Multithreads e arquivos (em Java) Programação Orientada a Objetos Nesta unidade vamos ver os últimos assuntos de interesse em java. O primeiro deles, bem simples, é o tratamento

Leia mais

Mecanismo de exceções em Java

Mecanismo de exceções em Java Mecanismo de exceções em Java (POO) Centro de Cálculo Instituto Superior de Engenharia de Lisboa Pedro Alexandre Pereira (palex@cc.isel.ipl.pt) Conceito de exceção Erro de execução provocado por condição

Leia mais

CETEC Centro Paula Souza

CETEC Centro Paula Souza Atualização da Competição Maratona de Programação 2018 2º Semestre Finalidade Este documento tem por finalidade informar aos professores responsáveis pelos times das unidades participantes da Maratona

Leia mais

Prof. Fernando V. Paulovich 8 de novembro de SCC Programação Orientada a Objetos

Prof. Fernando V. Paulovich  8 de novembro de SCC Programação Orientada a Objetos Tratamento de Exceções SCC0604 - Programação Orientada a Objetos Prof. Fernando V. Paulovich http://www.icmc.usp.br/~paulovic paulovic@icmc.usp.br Instituto de Ciências Matemáticas e de Computação (ICMC)

Leia mais

Laboratório de Programação

Laboratório de Programação Arquivos Binários 1 Laboratório de Programação Dr. Italo Santiago Vega Curso de Graduação Ciência da Computação Pontifícia Universidade de São Paulo Copyright 1998-2004, Italo S. Vega Arquivos Binários

Leia mais

Unidade VIII Persistência de Dados em Java

Unidade VIII Persistência de Dados em Java Universidade Federal da Paraíba Centro de Informática Departamento de Informática Unidade VIII Persistência de Dados em Java Linguagem de Programação I Daniela Coelho Batista Guedes Pereira Unidade VIII

Leia mais

PROGRAMAÇÃO JAVA. Parte 3

PROGRAMAÇÃO JAVA. Parte 3 PROGRAMAÇÃO JAVA Parte 3 O PRIMEIRO PROGRAMA O Java executa uma instrução a seguir a outra, pela ordem em que estão escritas. Essa sequência poderá ser contrariada de forma especial: Alternativas: Ciclos

Leia mais

Programação Java. Tratamento de Exceções

Programação Java. Tratamento de Exceções Programação Java Tratamento de Exceções Grupo de Linguagens de Programação Departamento de Informática PUC-Rio Motivações para Exceções Um método pode detectar uma falha mas não estar apto a resolver sua

Leia mais

Prof. Rogério Albuquerque de Almeida. Programação Orientada a Objetos II JAVA Décima Segunda Aula

Prof. Rogério Albuquerque de Almeida. Programação Orientada a Objetos II JAVA Décima Segunda Aula Prof. Rogério Albuquerque de Almeida Programação Orientada a Objetos II JAVA Décima Segunda Aula 1 Prof. Rogério Albuquerque de Almeida Programação Orientada a Objeto II Vetores Tratamento de Exceções

Leia mais

Introdução a classes e objetos. Prof. Marcelo Roberto Zorzan Prof a. Rachel Reis

Introdução a classes e objetos. Prof. Marcelo Roberto Zorzan Prof a. Rachel Reis Introdução a classes e objetos Prof. Marcelo Roberto Zorzan Prof a. Rachel Reis Estruturas de Seleção if... else Operador condicional (? : ) switch Aula de Hoje Estruturas de Repetição: while/do... while/for

Leia mais

AULA TEÓRICA 3. Tema 4. Excepções Ø Tratamento de excepções

AULA TEÓRICA 3. Tema 4. Excepções Ø Tratamento de excepções AULA TEÓRICA 3 Tema 4. Excepções Ø Tratamento de excepções 1 Excepções Uma excepção é um evento que ocorre durante a execução de um programa que interfere no fluxo normal das instruções deste programa.

Leia mais

Exceções. Profa. Patrícia A. Jaques Slides alterados por Leandro Tonietto Mar-12. quarta-feira, 21 de março de 12

Exceções. Profa. Patrícia A. Jaques Slides alterados por Leandro Tonietto Mar-12. quarta-feira, 21 de março de 12 Exceções Profa. Patrícia A. Jaques Slides alterados por Leandro Tonietto Mar-12 Tratamento de Exceções O tratamento de exceções em Java permite o gerenciamento de erros em tempo de execução. Uma exceção

Leia mais

Só podem ser executados por uma Thread que detenha o lock do objecto

Só podem ser executados por uma Thread que detenha o lock do objecto Transferência de controle entre Threads Os métodos wait(), notify() notifyall(), da classe Object, Permitem a transferência de controlo de uma Thread para outra. Só podem ser executados por uma Thread

Leia mais

INF1636 PROGRAMAÇÃO ORIENTADA A OBJETOS

INF1636 PROGRAMAÇÃO ORIENTADA A OBJETOS INF1636 PROGRAMAÇÃO ORIENTADA A OBJETOS Departamento de Informática PUC-Rio Ivan Mathias Filho ivan@inf.puc-rio.br Programa Capítulo 9 Tratamento de Exceções Assertivas 1 Programa Capítulo 9 Tratamento

Leia mais

Persistência. Prof. Alberto Costa Neto Linguagens de Programação. Departamento de Computação Universidade Federal de Sergipe

Persistência. Prof. Alberto Costa Neto Linguagens de Programação. Departamento de Computação Universidade Federal de Sergipe Persistência alberto@ufs.br de Programação Departamento de Computação Universidade Federal de Sergipe Retrospectiva Quanto ao Tempo de Vida Variáveis Estáticas Variáveis Stack-Dinâmicas Variáveis Heap-Dinâmicas

Leia mais

ESQUEMA AULA PRÁTICA 0 Familiarização com o Ambiente de Desenvolvimento NetBeans Construção do primeiro programa em java.

ESQUEMA AULA PRÁTICA 0 Familiarização com o Ambiente de Desenvolvimento NetBeans Construção do primeiro programa em java. P. Fazendeiro & P. Prata POO FP0/1 ESQUEMA AULA PRÁTICA 0 Familiarização com o Ambiente de Desenvolvimento NetBeans Construção do primeiro programa em java. 0 Iniciar o ambiente de desenvolvimento integrado

Leia mais

Classes e Objetos. Sintaxe de classe em Java

Classes e Objetos. Sintaxe de classe em Java Classes e Objetos Classes e Objetos A Programação Orientada a Objetos (POO) é uma técnica de programação que se baseia na construção de classes e utilização de objetos. Os objetos são formados por dados

Leia mais

No final deste curso, saberás criar programas através da linguagem de programação Java.

No final deste curso, saberás criar programas através da linguagem de programação Java. Programação em Java Programação Formato: Mentored - Online Preço: 415 ( Os valores apresentados não incluem IVA. Oferta de IVA a particulares e estudantes. ) Horário: Flexível das 24h/24h Duração: ~45h

Leia mais

INF1337 LINGUAGEM DE PROGRAMAÇÃO ORIENTADA A OBJETOS

INF1337 LINGUAGEM DE PROGRAMAÇÃO ORIENTADA A OBJETOS INF1337 LINGUAGEM DE PROGRAMAÇÃO ORIENTADA A OBJETOS Departamento de Informática PUC-Rio Andrew Diniz da Costa andrew@les.inf.puc-rio.br Programa Capítulo 9 Tratamento de Exceções Assertivas Programa Capítulo

Leia mais

Tratamento de Exceções

Tratamento de Exceções Tratamento de Exceções Carlos Bazilio Isabel Rosseti Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense Motivação prever na implementação do sistema situações

Leia mais

Tratamento de Erro e Javadoc. Professor: Norton T. Roman

Tratamento de Erro e Javadoc. Professor: Norton T. Roman Tratamento de Erro e Javadoc Professor: Norton T. Roman Tratamento de Erro import java.lang.string; import java.io.bufferedreader; import java.io.inputstreamreader; import java.lang.integer; O que vai

Leia mais

Exceções. SCC0504 Programação Orientada a Objetos. Luiz Eduardo Virgilio da Silva ICMC, USP

Exceções. SCC0504 Programação Orientada a Objetos. Luiz Eduardo Virgilio da Silva ICMC, USP SCC0504 Programação Orientada a Objetos Exceções Luiz Eduardo Virgilio da Silva ICMC, USP Parte do material foi obtido com os professores: José Fernando Junior (ICMC/USP) Sumário Introdução Tipos de exceção

Leia mais

Array em Java. Figura 1 - Exemplo de um array de inteiros

Array em Java. Figura 1 - Exemplo de um array de inteiros Array em Java 1. Objetivos Nesta lição, abordaremos Array em Java. Primeiro, definiremos o que é array e, então, discutiremos como declará-los e usá-los. Ao final desta lição, o estudante será capaz de:

Leia mais

Programação Orientada a Objetos

Programação Orientada a Objetos Programação Orientada a Objetos Prof. Kléber de Oliveira Andrade pdjkleber@gmail.com Tratamento de Exceções Quem pensa pouco, erra muito Leonardo da Vinci Exceções!!! 12/09/2011 Prof. Kléber de Oliveira

Leia mais

Programação de Computadores II

Programação de Computadores II Programação de Computadores II TCC- 00.174 Profs.: Leandro A. F. Fernandes (A1) & Marcos Lage (B1) & Isabel RosseJ (C1) (Turma A1) www.ic.uff.br/~laffernandes (Turma B1) www.ic.uff.br/~mlage (Turma C1)

Leia mais

Laboratório de Programação. Aula 12 Java 5COP088. Aula 12 Exceções Prof. Dr. Sylvio Barbon Junior. Sylvio Barbon Jr

Laboratório de Programação. Aula 12 Java 5COP088. Aula 12 Exceções Prof. Dr. Sylvio Barbon Junior. Sylvio Barbon Jr 5COP088 Laboratório de Programação Aula 12 Exceções Prof. Dr. Sylvio Barbon Junior 1 Sumário: 1) Manipulação de Exceções; 1) Try e Catch 2) Finally 3) Propagação (Throw e Throws) 2) Erros e Exceções Comuns;

Leia mais

Objetivos deste capítulo

Objetivos deste capítulo Objetivos deste capítulo Mostrar como Java lida com arquivos e fluxos de dados; Apresentar as classes que permitem leitura e escrita em diversas fontes de dados; Explicar o que é serialização e como funciona.

Leia mais

Reader e Writer para streams de caracteres (texto).

Reader e Writer para streams de caracteres (texto). Folha 1-1 Recordando POO: Streams Uma stream é uma abstracção que representa uma fonte genérica de entrada de dados ou um destino genérico para escrita de dados que é definida independentemente do dispositivo

Leia mais

[Magee 1999] Concurrency State Models and Java Programs, Jeff Magee, Jeff Kramer, John Wiley 1999.

[Magee 1999] Concurrency State Models and Java Programs, Jeff Magee, Jeff Kramer, John Wiley 1999. Cap. IV - Programação Concorrente [Magee 1999] Concurrency State Models and Java Programs, Jeff Magee, Jeff Kramer, John Wiley 1999. [Gosling] The Java Language Specification James Gosling, Bill Joy and

Leia mais

Tratamento de Exceções

Tratamento de Exceções Fundamentos de Programação Tratamento de Exceções Givanaldo Rocha de Souza http://docente.ifrn.edu.br/givanaldorocha givanaldo.rocha@ifrn.edu.br O que é??? É um evento que interrompe o fluxo normal de

Leia mais

Tratamento de Exceções. Prof. Marcelo Roberto Zorzan

Tratamento de Exceções. Prof. Marcelo Roberto Zorzan Tratamento de Exceções Prof. Marcelo Roberto Zorzan Tratamento de Exceções Aula de Hoje Problema 1 Desenvolva uma aplicação Java que receba como entrada dois valores numéricos, calcule a divisão entre

Leia mais

Aula 13 Tratamento de Exceções. Disciplina: Programação Estruturada e Orientada a Objetos Prof. Bruno Gomes

Aula 13 Tratamento de Exceções. Disciplina: Programação Estruturada e Orientada a Objetos Prof. Bruno Gomes Aula 13 Tratamento de Exceções Disciplina: Programação Estruturada e Orientada a Objetos Prof. Bruno Gomes http://www.profbrunogomes.com.br/ Agenda da Aula Exceções; Por que tartar Exceções? Durante a

Leia mais

Tratamento de Exceções. Prof. Leonardo Barreto Campos 1

Tratamento de Exceções. Prof. Leonardo Barreto Campos 1 Tratamento de Exceções Prof. Leonardo Barreto Campos 1 Sumário Introdução; Tratamento de Exceções Java; Hierarquia de Exceções Java; Bloco finally - Java Bibliografia; Prof. Leonardo Barreto Campos 2/24

Leia mais

[Magee 1999] Concurrency State Models and Java Programs, Jeff Magee, Jeff Kramer, John Wiley 1999.

[Magee 1999] Concurrency State Models and Java Programs, Jeff Magee, Jeff Kramer, John Wiley 1999. Programação Concorrente [Magee 1999] Concurrency State Models and Java Programs, Jeff Magee, Jeff Kramer, John Wiley 1999. [Gosling] The Java Language Specification James Gosling, Bill Joy and Guy Steele,

Leia mais

Programação Estruturada e Orientada a Objetos

Programação Estruturada e Orientada a Objetos INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DO RIO GRANDE DO NORTE Programação Estruturada e Orientada a Objetos Docente: Éberton da Silva Marinho e-mail: ebertonsm@gmail.com eberton.marinho@ifrn.edu.br

Leia mais

Tratamento de Erros. Sérgio Luiz Ruivace Cerqueira

Tratamento de Erros. Sérgio Luiz Ruivace Cerqueira Tratamento de Erros Sérgio Luiz Ruivace Cerqueira sergioruivace@gmail.com Agenda Introdução Try, catch, finally Unchecked Exceptions Como levantar exceções Boas práticas O problema Calculadora numero1:

Leia mais

Programação Orientada a Objetos. Manipulação de Exceções

Programação Orientada a Objetos. Manipulação de Exceções Programação Orientada a Objetos Manipulação de Exceções Cristiano Lehrer, M.Sc. Introdução à Manipulação de Exceções (1/2) Em uma linguagem sem manipulação de exceção: Quando ocorre uma exceção, o controle

Leia mais

Herança. Prof. Fernando V. Paulovich 23 de agosto de 2010

Herança. Prof. Fernando V. Paulovich  23 de agosto de 2010 Herança SCC0604 - Programação Orientada a Objetos Prof. Fernando V. Paulovich http://www.icmc.usp.br/~paulovic paulovic@icmc.usp.br Instituto de Ciências Matemáticas e de Computação(ICMC) Universidade

Leia mais

CONCEITOS BÁSICOS DE ORIENTAÇÃO A OBJETOS PROF. ME. HÉLIO ESPERIDIÃO

CONCEITOS BÁSICOS DE ORIENTAÇÃO A OBJETOS PROF. ME. HÉLIO ESPERIDIÃO CONCEITOS BÁSICOS DE ORIENTAÇÃO A OBJETOS PROF. ME. HÉLIO ESPERIDIÃO CLASSES E OBJETOS PARA PROGRAMAÇÃO ORIENTADA A OBJETOS Classes são estruturas das linguagens de POO criadas para conter os dados que

Leia mais

Linguagem de Programação III

Linguagem de Programação III Linguagem de Programação III Aula-4 Construtores e Sobrecarga Prof. Esbel Tomás Valero Orellana Até Aqui Modelos e POO Classes e sua implementação em Java Encapsulamento Tipos de dados nativos em Java

Leia mais

[Desenvolvimento OO com Java] Exceções e controle de erros

[Desenvolvimento OO com Java] Exceções e controle de erros Centro Tecnológico Departamento de Informática Prof. Vítor E. Silva Souza http://www.inf.ufes.br/~vitorsouza [Desenvolvimento OO com Java] Exceções e controle de erros Este obra está licenciada com uma

Leia mais

Controlando Erros com Exceções

Controlando Erros com Exceções Controlando Erros com Exceções 1 Motivação p O que aconteceria ao tentar chamar o método saca com um valor fora do limite? p O sistema mostraria uma mensagem de erro, mas quem chamou o método saca não

Leia mais

Java para Desktop. Exceções JSE

Java para Desktop. Exceções JSE Java para Desktop Exceções JSE ocorrência que altera o fluxo do programa. As exceções podem ocorrer por falhas de hardware, exaustão de recursos e erros. Usar tratamento de exceções permite detectar erros

Leia mais

Manipulação de Arquivos

Manipulação de Arquivos Manipulação de Arquivos SCC0604 - Programação Orientada a Objetos Prof. Fernando V. Paulovich http://www.icmc.usp.br/~paulovic paulovic@icmc.usp.br Instituto de Ciências Matemáticas e de Computação (ICMC)

Leia mais

Paradigmas de Programação. Java First-Tier: Aplicações. Orientação a Objetos em Java (I) Nomenclatura. Paradigma OO. Nomenclatura

Paradigmas de Programação. Java First-Tier: Aplicações. Orientação a Objetos em Java (I) Nomenclatura. Paradigma OO. Nomenclatura Java First-Tier: Aplicações Orientação a Objetos em Java (I) Paradigmas de Programação Programação Funcional Programação Procedural Programação Orientada por Objetos Grupo de Linguagens de Programação

Leia mais

Notas de POO: interfaces, excepções e input/output

Notas de POO: interfaces, excepções e input/output Notas de POO: interfaces, excepções e input/output 2006/07 Conteúdo 1 Considerações gerais 1 2 Interfaces 1 2.1 Hierarquia das Interfaces........................... 2 2.2 Interfaces e Classes Abstractas........................

Leia mais

Pontifícia Universidade Católica de São Paulo Departamento de Ciência da Computação

Pontifícia Universidade Católica de São Paulo Departamento de Ciência da Computação Pontifícia Universidade Católica de São Paulo Departamento de Ciência da Computação LP: Laboratório de Programação Apontamento 16 Prof. ISVega Maio de 2004 Arquivos Binários CONTEÚDO 16.1 Processamento

Leia mais

Programação Orientada a Objetos SANTOS, Rafael (PLT)

Programação Orientada a Objetos SANTOS, Rafael (PLT) Programação Orientada a Objetos SANTOS, Rafael (PLT) Possibilita atribuições em sequência na mesma instrução Retorna o valor atribuído Atribuições compostas: incluem a própria variável: +=, *=, -=, etc

Leia mais

O problema da herança múltipla e o uso de Interfaces. Herança múltipla. Interfaces. Definindo Interfaces 30/11/2016

O problema da herança múltipla e o uso de Interfaces. Herança múltipla. Interfaces. Definindo Interfaces 30/11/2016 O problema da herança múltipla e o uso de Interfaces Herança múltipla O Java não permite o uso de herança múltipla. Cada classe só pode herdar de uma única classe diretamente. X X Interfaces Uma interface

Leia mais

Tratamento de Exceções. Julio Cesar Nardi

Tratamento de Exceções. Julio Cesar Nardi Tratamento de Exceções Julio Cesar Nardi Tratamento de Exceções Objetivos: Identificar os tipos de erros em programas Java; Compreender o mecanismo de controle de exceções; Agenda Controle de Exceções

Leia mais