Exceções no Java envolvem a questão da classe pai-filho, que pode ser resumida em uma frase: a exceção lançada pelo construtor de uma subclasse deve conter exceções da classe pai. O método da subclasse pode optar por lançar uma exceção do escopo da classe pai "menor ou igual a" ou não lançar uma exceção.
1. Por que o construtor precisa lançar uma exceção contendo a classe pai?
Há uma passagem em "Thingking in java":
Limitação de exceção: Ao substituir um método, apenas as exceções listadas na descrição de exceção do método da classe base podem ser lançadas.
As restrições de exceção não funcionam para o construtor, você descobrirá que o construtor do Stormyinning pode lançar qualquer exceção sem prestar atenção às exceções lançadas pelo construtor da classe base. No entanto, como o construtor deve ser chamado de uma maneira ou de outra, a descrição de exceção do construtor de subclasse deve conter a descrição de exceção do construtor da classe base
Esta passagem é um pouco confusa no começo, mas você entenderá depois de lê -la:
Primeiro de tudo, a descrição da exceção é apenas para o método de substituição, e o construtor obviamente não está dentro desse intervalo; portanto, o construtor da subclasse pode lançar qualquer exceção sem levar em consideração a exceção lançada pelo construtor pai. No entanto, quando novo objeto de subclasse, o construtor da classe pai será definitivamente chamado; portanto, a exceção lançada pelo construtor de classe pai correspondente chamado pelo construtor de subclasse deve ser levada em consideração. Neste momento, porque "o construtor da subclasse não pode pegar a exceção lançada pelo construtor da classe pai (que será mencionado posteriormente)", o construtor de subclasse deve lançar essa exceção.
A classe ASSEMEXCECTIONS estende a exceção {} classe TheotheRexception estende a exceção {} classe Basec {public Basec () lança algumacepção {} public basec (int a) lança TheotheRexception {}} classe Subc estende Basec {public Subc () Throws ASSUSTRUPECECTIONS // se a exceção não é thold, um Errorning (public Subc ()) // super (37) deve ser jogado; // Se você substituir Super () por isso, a theotherexception deve ser jogada}}2. Por que o construtor de subclasse não pode pegar a exceção lançada pelo construtor da classe pai?
Porque se uma subclasse quiser pegar a exceção lançada pela classe pai, ele deve exibir a chamada super (); ou super (xxx ...); No entanto, super () e este () têm um recurso, que é que eles devem ser colocados na primeira linha, que contradiz, tente {} catch {}, para que não possa ser capturado
3. Quando a classe pai e a interface herdadas pela subclasse têm o mesmo nome de método, o método de processamento deve seguir o limite de exceção.
a classe ASSEMEXCECIÇÃO Estende a exceção {} classe TheotheRexception estende a exceção {} interface interf {public void function () lança a theotheRexception; } classe Basec {public void function () lança alguma forma {}} classe Subc estende a Basec implementa interf {// Neste momento, você pode optar apenas por não lançar exceção public void function () {} // um erro: exceção que alguma exceção não é compatível com a cláusula de arremesso em interf.function () //; // ERRO: Exceção A theotheRexception não é compatível com a cláusula de arremessos em basec.function () // public void function () lança a theotherexception {}; }4. Por que as subclasses jogam apenas essas exceções listadas na descrição de exceção do método da classe base?
Como a subclasse tem a possibilidade de conversão ascendente para a classe pai, se a subclasse puder lançar exceções à vontade, então quando a subclasse for convertida para a classe pai, a interface do método (vamos chamar que é o caso) se tornará o tipo de método da classe pai. Neste momento, o problema é que a subclasse lançará exceções, mas a classe pai não pode lidar com a exceção. Portanto, para garantir o tipo substituível do objeto, é obrigatório que "apenas as exceções listadas na descrição de exceção do método da classe base sejam arremessadas".
As "exceções" mencionadas aqui também incluem as subexcepções dessas exceções!
5. Não sei se isso conta. Talvez eu seja relativamente estúpido. Pensei nisso por muito tempo antes de entender. Vamos escrever por enquanto.
class SomeException extends Exception{} class BaseC { public void function()throws SomeException{}//If the exception thrown here is a runtime exception subclass, it can not be handled exception} class SubC extends BaseC {<BR>//The super.function() performed by these two functions() belong to normal function calls and does not fall within the scope of exception handling, but this function itself must comply with the specifications of Manipulação de exceção! /* public void function () lança algumaceção {super.function (); } */ public void function () {try {super.function (); } catch (alguma exceção e) {e.printStackTrace (); }}}A explicação detalhada acima das exceções envolvendo aulas de pai e filho com base no Java é todo o conteúdo que compartilho com você. Espero que possa lhe dar uma referência e espero que você possa apoiar mais o wulin.com.