exceções geradas pelo compilador e pelo programador

exceções geradas pelo compilador e pelo programador, como assim?

conheço as exceções:
NullPointerException
ClassCastException
ArrayIndexOutOfBoundsException
IndexOutOfBoundsException

mas não entendí o q exceções geradas pelo compilador e pelo programador q dizer… :shock: :?:

[quote=andredecotia]exceções geradas pelo compilador e pelo programador, como assim?

conheço as exceções:
NullPointerException
ClassCastException
ArrayIndexOutOfBoundsException
IndexOutOfBoundsException

mas não entendí o q exceções geradas pelo compilador e pelo programador q dizer… :shock: :?: [/quote]

Uma pergunta, vc esta estudando por qual livro?

O compilador não gera exceção nenhuma.

Existem as exceções geradas pela VM, ou seja, quando vc programador faz uma besteira como isso aqui:

Ou quando vc faz isso aqui:

int x[] = new Integer[10]; System.out.println(x[11]); //ArrayIndexOutOfBoundsException

E existem exceções que você mesmo cria. Como por exemplo:

public void escrever(String texto) { if (texto == null) { throw new TextoInvalidoException("O texto não pode ser nulo!"); } System.out.println(texto); }

Algumas exceções do Java são feitas exclusivamente para o programador lançar, como a IllegalArgumentException.

Não confundir as exceptions da VM com as exceções que a API do java lança. Por exemplo, a SQLException e a IOException não é uma exceção da VM. As exceções da VM geralmente referem-se a erros de programação.

Além das exceptions a VM também pode lançar Errors. São sinalizações de situações não recuperáveis, como falta de memória ou estouro da pilha.

Acho que quer dizer sobre as checkedException e uncheckedException.
UncheckedException são subclasses de RuntimeException ou Error, e acontecem em tempo de execução da aplicação. Geralmente não devem ser tratadas.
CheckedException são geralmente subclasses de Exception e devem ser tratadas.

É fácil reconhecer uma exceção de compilação(CheckedException) pois são aquelas que o IDE avisa você. Tipo IOException.
O programador também pode criar suas próprias exceções ou lançar uma “throws new Exception(“Erro”);”.

Eu falei superficialmente mas espero ter ajudado.

[quote=evertonsilvagomesjava][quote=andredecotia]exceções geradas pelo compilador e pelo programador, como assim?

conheço as exceções:
NullPointerException
ClassCastException
ArrayIndexOutOfBoundsException
IndexOutOfBoundsException

mas não entendí o q exceções geradas pelo compilador e pelo programador q dizer… :shock: :?: [/quote]

Uma pergunta, vc esta estudando por qual livro?[/quote]

cara essas exeções listadas como algumas outros são exceções não verificadas
ou seja são exceções que o programador não pressisa circundalas com bloco
try/catch. vc ate pode circundalas casso vc queira.

toda e qualquer exception que seja uma RuntimeException, o compilador não forçara
o programador a circundar o codigo que lança um RuntimeException. Por que as mesma
geralmete são exceções de tempo de execução, geralmente causadas por erros de logica
do proprio programador como tentar acessar um indece de matriz que não seja valido
como -1, ou dividir um numero por zero.

esses codigos serial compilados, mas no tempo de execução serial lançadas RuntimeExecption.

matrix[-1] = 10;
int a = 9/0;

So uma coisa, igual o Vini falou á exceçao NumberFormatException que herda de IllegalArgumentExceptio é unchecked, mas que geralmente tb fica por conta do programador lança-la.

A IllegalArgumentException é uma RuntimeException lançada pelo programador. IndexOutOfBoundsException também. Como o everton falou, NumberFormatException também.

É muito comum se criar filhas delas, com diversas exceções Unchecked, todas lançadas pelo programador. Não é muito incomum ver gente lançando diretamente a RuntimeException também.

É melhor não confundir.
Exceções lançadas pela VM são RuntimeExceptions ou Errors, e ocorrem por erros de programação, sem que alguém tenha escrito nenhum código com “throw” para lança-las.

Os casos mais comuns são:

  1. Fazer casts impossíveis:

String x = 10; Integer y = (Integer)x; //Lança automaticamente uma ClassCastException

  1. Acessar índices inválidos de arrays primitivos:

int x[] = 10; x[10] = 0; //ArrayIndexOutOfBoundsException

  1. Tentar acessar um objeto nulo:

String x = null; x.split(10); //NullPointerException

  1. Tentar dividir por zero:

int a = 10; int b = 10 - a; int c = a / b; //ArithmeticException

Além dessas, a VM lança automaticamente erros. Eles terminam com “Error” e nunca devem ser lançados pelo programador, ou capturados por catch (exceto para um log). São situações irreversíveis. O mais comum é o OutOfMemoryError, mas um erro de programação pode gerar o StackOverflowError. Também já presenciei algumas vezes o ThreadDeath, mas pq um programador fazia uso incorreto do método stop(). Se você tentar iniciar a AWT num sistema sem monitor, você também pode obter um AWTError (embora versões mais modernas do Java lancem apenas uma HeadlessException).

Agora, a regra é: Se for uma exception da VM, sempre será RuntimeException.
Se for uma exception do programador, pode ser uma Runtime ou uma Exception verificada.

O ViniGodoy com certeza leu um bom livro sobre exceções! :smiley:
Parabéns Vini, ótima explicação.

Um bom material sobre exceções é esse aqui:



Viny, ótimas explicações, eu tenho muitas duvidas com relação a isso, mas agora clareou um pouco mais minhas idéias, esse tópico com certeza vai para os meus favoritos, abraços a todos.

Vini, td bom?

Cara, não sei se vc é… Mas tenho certeza de q vc seria um excelente professor na faculdade…

Valeu de novo…

Só tá difícil de entender como gerar:

StackOverFlowError e ExceptionInInitializer…

Obrigado pela atenção de todos… :smiley: