Inhoudsopgave:
Video: Linux Tutorial for Beginners: Introduction to Linux Operating System 2024
Fouten in Java-toepassingen kunnen op verschillende tijdstippen optreden. U kunt echter in grote lijnen classificeren wanneer een fout optreedt in twee categorieën, tijdens compileertijd en runtime, zoals beschreven in de volgende secties.
Compileertijdfouten
De compiler converteert uw toepassingscode naar Java-bytecode. Tijdens dit proces is de door mensen leesbare code nodig die u schrijft en converteert deze naar iets dat de Java Runtime Environment (JRE) begrijpt.
Om dit proces uit te voeren, moet de compiler de code parseren, wat betekent dat het de code leest op een manier die ondubbelzinnig precies bepaalt wat u wilt dat de toepassing doet, wanneer u wil dat het het doet en hoe je wilt dat de taak wordt volbracht. Als u de regels voor het schrijven van eenduidige code overtreedt, geeft de compiler een foutmelding weer. Dit bericht is eigenlijk een soort uitzondering.
Parsing betekent dat u de ingevoerde gegevens, zoals code in een voor mensen leesbare vorm, leest en deze in iets anders verandert, zoals Java-bytecode. Een toepassing kan ook gebruikersinvoer parseren. Een gebruiker kan bijvoorbeeld een tekenreeks typen waarvan de toepassingscode een getal wordt.
Dus, parsing is de handeling van het lezen van een bepaald type invoer, het interpreteren van die invoer op een specifieke manier en het produceren van uitvoer op basis van de geïnterpreteerde invoer. Een parser genereert een foutmelding als de invoer niet is wat hij verwacht.
Als de gebruiker bijvoorbeeld een tekenreeks invoert die de letter C bevat en u een tekenreeks verwachtte die een getal bevat, zoals 123, genereert de parser een uitzondering die aangeeft dat de invoer onjuist is.
Compileertijdfouten zijn de gemakkelijkste om te verwerken omdat de compiler u normaal precies vertelt wat er fout is en waar de fout is opgetreden. Zelfs als de informatie niet exact is, brengt de compiler u in ieder geval naar het rechtergedeelte van de afgebroken code, zodat u kunt zoeken naar de fout die erin zit.
Om ervoor te zorgen dat iedereen precies begrijpt hoe de Java-taal moet werken, maken ontwikkelaars hiervoor een specificatie. Deze specificatie bevat de taalelementen in een speciale taal genaamd Backus-Naur Form (BNF). Het gebruik van BNF is een uiterst precieze methode om een taal te beschrijven, zodat niemand het risico loopt verkeerd geïnterpreteerd te worden.
U kunt een voorbeeld van de BNF voor de Java-taal bekijken bij Department of Computer Science - Daimi. Maak je niet al te veel zorgen over het kunnen lezen van deze specificatie. De meeste ontwikkelaars leren nooit om de BNF te interpreteren voor de talen die ze gebruiken - dat is het domein van de ontwikkelaars van compilers.
Runtime-fouten
De Java-compiler kan niet elke fout in uw code vinden. Als de vorm van de code correct is (dat wil zeggen dat u geen fouten hebt gemaakt bij het typen van de elementen die de toepassing maken), vindt de compiler de fout niet.
Als u bijvoorbeeld een numerieke waarde naar 5 in plaats van 4 initialiseert, kan de compiler de fout niet voor u vinden, omdat de compiler geen idee heeft dat u werkelijk 4 wilt typen. Dit soort fouten creëert runtime-fouten : fouten die zich op enig moment tijdens de uitvoering van de toepassing voordoen.
Runtime-fouten kunnen op allerlei tijdstippen optreden. Sommige fouten treden vaker op specifieke tijden op. In de volgende lijst vindt u enkele ideeën over wanneer runtime-fouten optreden:
-
Initialisatie: Wanneer de toepassing voor het eerst wordt gestart - voordat deze een interface voor de gebruiker weergeeft of nuttig werk uitvoert, wordt deze uitgevoerd een initialisatiefase. Dit is wanneer het instellen van een variabele op het onjuiste type of het proberen om een variabele te gebruiken voordat je het initialiseert, opgemerkt zal worden. Veel resourcegerelateerde fouten komen ook voor tijdens de initialisatie, omdat de meeste applicaties tijdens deze periode benodigde bronnen openen.
-
Bedrijfsmodus: Nadat een toepassing is geïnitialiseerd, bevindt deze zich in de bedieningsmodus. Als het een gebruikersinterface heeft, begint het interactie te hebben met de gebruiker. Dit is het moment waarop gebruikersinput het belangrijkst is.
U vindt op dit moment ook onjuist geïnitialiseerde variabelen omdat de gebruiker (of de ontvanger van de uitvoer van de toepassing, zoals het systeem) ziet dat de uitvoer incorrect is. Gebruikersverzoeken voor bronnen, zoals een gegevensbestand, creëren ook fouten tijdens deze periode.
-
Achtergrondverwerking: De meeste achtergrondverwerkingsfouten komen voort uit de omgeving (zoals het verlies van een netwerkverbinding), ontbrekende bronnen (zoals een verloren bestand), onjuist geïnitialiseerde variabelen of fouten in de manier waarop u de toepassing hebt verteld om een taak uit te voeren. Sommige taken worden vaker op de achtergrond uitgevoerd dan andere.
Het afdrukken van een document of het downloaden van bronnen van internet wordt bijvoorbeeld meestal op de achtergrond uitgevoerd, terwijl de gebruiker blijft werken met de toepassing op de voorgrond.
-
Afsluiten: Wanneer de gebruiker (inclusief de systeemaccounts) de toepassing vertelt dat deze niet langer nodig is, doorloopt de toepassing een afsluitingsfase. Tijdens deze afsluitingsfase sluit de toepassing bestanden en voert andere huishoudelijke klusjes uit die ervoor zorgen dat de toepassing geen rommel achterlaat voor het besturingssysteem.
De meest voorkomende fouten die tijdens deze fase kunnen optreden, zijn het niet vrijgeven van bronnen die uw toepassing heeft gebruikt en het niet opslaan van gegevens op schijf. Uiteraard kunnen coderingsfouten op elk moment optreden en deze werkingsfase vormt hierop geen uitzondering. Je zou de applicatie kunnen vertellen om vijf bestanden te sluiten als er maar vier open zijn.
De JRE geeft de meeste runtimefouten weer die hij als uitzonderingen detecteert. De JRE zal echter niet elke fout in uw toepassing ontdekken.Je moet ook kijken naar de output van je applicatie om te bepalen of de output overeenkomt met de verwachtingen die je hebt voor een bepaalde input.
Bovendien is het belangrijk om te kijken naar de status van alle bronnen die u gebruikt om ervoor te zorgen dat ze op geen enkele manier worden beschadigd. U moet er bijvoorbeeld voor zorgen dat alle gegevens die u in een bestand moet opslaan, daadwerkelijk in het bestand terechtkomen wanneer uw toepassing wordt afgesloten.
Java 8 heeft een sterkere nadruk op beveiliging, wat betekent dat u meer SecurityException-exemplaren zult zien terwijl u met uw toepassing werkt.
Het zien van een toename van beveiligingsuitzonderingen betekent niet dat uw code defect is of dat Java 8 vol zit met bugs - het betekent dat Java 8 automatisch lokaliseert en vertelt u over problemen die beveiligingsproblemen kunnen veroorzaken als mensen uw applicatie gebruiken.
De documentatie van SecurityException wordt weergegeven op Java. netto. Natuurlijk wil je weten waar al het rumoer over gaat.