CESGRANRIO — Profissional Transpetro de Nível Superior - Junior: Ênfase: 4: Análise de Sistemas - Infraestrutura — Linguagens de programação — 2023

Enunciado

Considere as seguintes classes Java, que ocupam arquivos separados: public class Err01 extends Exception { public Err01() { } public Err01(String m) { super(m); } } public class Err02 extends Err01 { public Err02() { } public Err02(String m) { super(m); } } Qual classe NÃO produzirá erros de compilação?

Alternativas

  1. A)

    public class Main { public double m01(double a, double b) { try { if(a < 0) throw new Err01(); if(b < 0) throw new Err02(); if(b == 0) throw new Exception(); } catch(Err01 e) { System.out.println("a menor do que zero"); } return a / b; } public static void main(String[] args) throws Exception { Main m=new Main(); System.out.println( m.m01 (8.0, 4.0) ); } }

  2. B)

    public class Main { public double m01(double a, double b) { try { if(a < 0) throw new Err01(); if(b <= 0) throw new Err02(); } catch(Err02 e) { System.out.println("b menor ou igual a zero"); } return a / b; } public static void main(String[] args) throws Exception { Main m=new Main(); System.out.println( m.m01 (8.0, 4.0) ); } }

  3. C)

    public class Main { public double m01(double a, double b) { try { if(a < 0) throw new Err01(); if(b <= 0) throw new Err02(); } catch(Err01 e) { System.out.println("a menor do que zero"); } catch(Err02 e) { System.out.println("b menor ou igual a zero"); } catch(Exception e) { System.out.println("b igual a zero"); } return a / b; } public static void main(String[] args) throws Exception { Main m=new Main(); System.out.println( m.m01 (8.0, 4.0) ); } }

  4. D)

    public class Main { public double m01(double a, double b) throws Err01 { try { if(a < 0) throw new Err01(); if(b < 0) throw new Err02(); if(b == 0) throw new Exception(); } catch(Exception e) { System.out.println("b igual a zero"); } return a / b; } public static void main(String[] args) throws Exception { Main m=new Main(); System.out.println( m.m01 (8.0, 4.0) ); } }

  5. E)

    public class Main { public double m01(double a, double b) throws Exception { try { if(a < 0) throw new Err01(); if(b <= 0) throw new Err02(); } catch(Err01 e) { System.out.println("a menor do que zero"); } catch(Err02 e) { System.out.println("b menor ou igual a zero"); } return a / b; } public static void main(String[] args) throws Exception { Main m=new Main(); System.out.println( m.m01 (8.0, 4.0) ); } }

Gabarito e comentário

Resposta correta: D

Err02 é subclasse de Err01, o que influencia tanto a necessidade de tratar exceções verificadas quanto a ordem dos blocos catch. Nas alternativas C e E, um catch de Err01 aparece antes de catch de Err02, tornando o segundo inalcançável; em A e B permanecem exceções verificadas sem tratamento ou declaração adequada. Na alternativa D, o catch(Exception e) pode tratar Err01, Err02 e Exception lançadas no try, e a assinatura é válida. Assim, D é a classe que não produz erro de compilação.

Questões relacionadas