"Throwable" is de bovenliggende klasse van de klassen Error and Exception. De klasse "RuntimeException" en de bijbehorende subklassen, de klasse "Error" en de onderliggende klassen zijn de "Niet-gecontroleerde uitzonderingen", terwijl de resterende subklassen van de klasse "Uitzondering" behalve "RuntimeException" de gecontroleerde uitzonderingen zijn. Het belangrijkste verschil tussen gecontroleerde en niet-gecontroleerde uitzonderingen is dat de gecontroleerde uitzonderingen worden gecontroleerd door de compiler, terwijl de compiler de ongecontroleerde uitzonderingen niet controleert.
Laten we de andere verschillen tussen aangevinkte en niet-gecontroleerde uitzonderingen bespreken met behulp van de vergelijkingsgrafiek.
Vergelijkingstabel
Basis voor vergelijking | Gecontroleerde uitzondering | Niet-gecontroleerde uitzondering |
---|---|---|
basis- | De compiler controleert de gecontroleerde uitzondering. | De compiler controleert de uitzondering Niet gecontroleerd niet. |
Uitzonderingsklasse | Met uitzondering van de klasse "RuntimeException", zijn alle onderliggende klassen van de klasse "Uitzondering" en de klasse "Error" en de onderliggende klassen de gecontroleerde uitzondering. | De klasse "RuntimeException" en de bijbehorende onderliggende klassen zijn "Niet-gecontroleerde uitzonderingen". |
behandeling | Als we de gecontroleerde uitzondering niet afhandelen, maakt de compiler objecten. | Zelfs als we de ongecontroleerde uitzondering niet afhandelen, maakt de compiler geen bezwaar. |
Compilatie | Het programma compileert niet als er een niet-afgehandelde gecontroleerde uitzondering in de programmacode staat. | Het programma compileert met succes, zelfs als er een niet-afgehandelde niet-gecontroleerde uitzondering in de programmacode staat. |
Definitie van gecontroleerde uitzondering
De gecontroleerde uitzonderingen zijn die uitzonderingen die worden gecontroleerd door de compiler voor de vlotte uitvoering van het programma. De compiler controleert of het programma de gecontroleerde uitzondering aankan of niet. Als de code de uitzondering niet aankan, treedt er een compilatiefout op. Alle subklassen van klasse "Uitzondering" behalve de klasse RuntimeException zijn de gecontroleerde uitzonderingen.
Laten we de gecontroleerde uitzondering bestuderen met een voorbeeld.
importeer java.io. *; class Voorbeeld {public static void main (String args []) {FileInputStream fis = null; fis = nieuwe FileInputStream ("B: /myfile.txt"); // Deze constructor FileInputStream (bestandsbestandsnaam) genereert FileNotFoundException, een gecontroleerde uitzondering. int k; while ((k = fis.read ())! = -1) {// Met de methode read () van de klasse FileInputStream wordt ook een gecontroleerde uitzondering gegenereerd: IOException. System.out.print ((char) k); } fis.close (); // De methode close () sluit de bestandsinvoerstroom die IOException genereert. }}
In bovenstaande code proberen we bestandsinhoud te openen, lezen en weergeven. Het kan voorkomen dat het bestand niet aanwezig is, dan treedt FileNotFoundException op wat een gecontroleerde uitzondering is. Als de aangevraagde uitzondering niet wordt afgehandeld, staat de compiler niet toe dat het programma soepel wordt gecompileerd. Er wordt een compileerfout weergegeven. Dus voor een vlotte compilatie moet de gecontroleerde uitzondering worden opgevangen of verklaard te worden gegooid.
Definitie van niet-gecontroleerde uitzondering
Niet-gecontroleerde uitzonderingen zijn uitzonderingen die niet worden gecontroleerd door de compiler. De compiler compileert het programma met succes zelfs als de uitzonderingen niet door de code worden afgehandeld. De klasse "Fout" en de onderliggende klassen, de klasse "Runtime" en de subklassen daarvan zijn de ongecontroleerde uitzonderingen.
Laten we een voorbeeld van een niet-gecontroleerde uitzondering bekijken.
klasse Voorbeeld {public static void main (String args []) {int arr [] = {1, 2, 3, 4, 5}; System.out.println (arr [7]); // ArrayIndexOutOfBoundsException. }}
In de bovenstaande code kun je zien dat er een ArrayIndexOutOfBoundsException is, omdat ik probeer toegang te krijgen tot het element dat niet bestaat. Aangezien dit een ongecontroleerde uitzondering is, zal de compilatietijdfout niet optreden en zal het bestand zonder enige fout worden gecompileerd. Maar het programma zal niet worden uitgevoerd totdat de uitzondering is afgehandeld. Dus voor een vlotte uitvoering moeten de uitzonderingen worden gevangen of verklaard te worden gegooid
Belangrijkste verschillen tussen gecontroleerde en niet-gecontroleerde uitzondering
- Gecontroleerde uitzonderingen zijn in kennis van de compiler, terwijl niet-gecontroleerde uitzonderingen niet in kennis zijn van de compiler.
- Behalve RuntimeException en Error-klasse zijn alle klassen een uitgezonderde uitzondering. Aan de andere kant zijn RuntimeException- en Error-klassen niet-gecontroleerde uitzonderingen.
- Als de gecontroleerde uitzonderingen niet worden afgehandeld door de code, maakt de compiler bezwaar. Aan de andere kant, als we geen ongecontroleerde uitzonderingen in de code hanteren, maakt de compiler geen bezwaar.
- Als gecontroleerde uitzonderingen in de code voorkomen, compileert de code niet terwijl de compiler nog steeds de code compileert, zelfs als niet-gecontroleerde uitzonderingen niet worden afgehandeld door de code.
Notitie :
Zowel gecontroleerde als niet-gecontroleerde uitzonderingen zijn verplicht tijdens runtime. Ze worden alleen gecontroleerd of uitgeschakeld door de compiler tijdens het compileren.
Conclusie:
Zowel de aangevinkte als de niet-gecontroleerde uitzonderingen moeten worden afgehandeld om het programma soepel uit te voeren.