fcojj:
Capturando exceções com escopos externos
Escreva um programa que mostre um método com seu próprio bloco try não precisa capturar todo possível erro gerado dentro de try. Algumas exceções podem seguir para, e serem tratadas em, outros escopos.
PESSOAL VCS PODEM ME EXPLICAR ESSE PROBLEMA QUE O PROFESSOR DE TECNICAS DE PROGRAMAÇÃO PASSOU EU NÃO ENTENDI BEM O PROBLEMA…O QUE É ESCOPO?POR FAVOR ALGUEMN
Para ajudar caso alguém procure o tópico, segue um exemplo é claro, pois o tópico é de 5 anos atrás e nem sei se estou certo (como disse, segue para ajudar alguém que for pesquisar):
import java.util.InputMismatchException;
import java.util.Scanner;
public class TestaCapturaExcecoesEscoposExternos {
// para as entradas do usuário
private static Scanner input = new Scanner(System.in);
// controla os loops para o numerador e denominador
private static boolean aux;
// vetor para gerar exceção
private static int[] vetor;
// escopo do método main
public static void main(String[] args) {
aux = true;// inicializa a variável booleana
// estrutura de repetição do..while
do {
try {
// obtém a entrada do numerador
System.out.print( "Informe o numerador: " );
int num = input.nextInt();
// obtém a entrada do denominador
System.out.print( "Informe o denominador: " );
int den = input.nextInt();
// atribui o resultado chamando o método
int res = lancaPrimeira( num, den );
// exibe o resultado
System.out.printf( "O resultado é: %d\n", res );
// entrada bem sucedida para divisão numerador, denominador
aux = false;
// valor para o tamanho do vetor
System.out.print( "\nInforme o tamanho do vetor: " );
int tam = input.nextInt();
// valor para total de elementos do vetor; deve ser igual a tam
System.out.print( "Quantos valores serão inseridos no vetor: " );
int tam2 = input.nextInt();
// chama o método que trata a possível exceção de tamanho e
// quantidade de elementos do vetor
lancaSegunda( tam, tam2 );
// trata a exceção ArithmeticException
} catch ( ArithmeticException arithmeticException ) {
System.err.printf( "\nException: %s\n",
arithmeticException );
System.out.println( "Denominador zero é inválido, " +
"tente novamente.");
// trata a exceção InputMismatchException
} catch ( InputMismatchException inputMismatchException ) {
System.err.printf( "\nException: %s\n",
inputMismatchException );
input.nextLine();
System.out.println( "Informe valores inteiros, " +
"tente novamente.");
}
// fim da instrução do..while, que faz primeiramente as instruções e
// depois testa se a variável booleana aux teve o seu valor alterado
// para false
} while ( aux );
}
// método que realiza a divisão e pode lançar uma exceção
// ArithmeticException
public static int lancaPrimeira(int num, int den)
throws ArithmeticException {
return num / den;// possível divisão por zero
}
// método que carrega o vetor e seus elementos e que podem
// lançar uma exceção ArrayIndexOutOfBoundsException
public static void lancaSegunda( int tam, int tam2 )
throws ArrayIndexOutOfBoundsException {
// atribui o valores informados no try do main e que devem ser
// idênticos no escopo deste método para que não seja gerada a
// exceção ArrayIndexOutOfBoundsException
try {
// parâmetro do método atribuído ao tamanho do vetor
vetor = new int[ tam ];
// carrega o vetor com o valor informado no bloco try que
// se for idêntico exibirá a impressão que está abaixo ou
// caso contrário, gera um estouro de índice no vetor
for ( int i = 0; i < tam2; i++ ) {
vetor[ i ] = i;
}
// caso o valor de tam2 seja idêntico ao de tam
System.out.printf( "\nÍndice\tValores\n" );
for ( int i = 0; i < vetor.length; i++ ) {
System.out.printf( "%d\t%d\n", i, vetor[ i ] );
}
// trata a exceção arrayIndexOutOfBoundsException
} catch ( ArrayIndexOutOfBoundsException
arrayIndexOutOfBoundsException ) {
System.err.printf( "\nException: %s\n",
arrayIndexOutOfBoundsException );
System.out.println( "Erro, estouro do índice do vetor!" );
}
}
}