ProgrammatieJava ontwikkelaar

Leg het verschil uit tussen lokale variabelen, instantievariabelen en statische variabelen in Java. Hoe kunnen de kenmerken van hun gebruik leiden tot fouten?

Slaag voor sollicitatiegesprekken met de Hintsage AI-assistent

Antwoord

Lokale variabelen — worden gedeclareerd en bestaan alleen in de methode- of bloklichaam, worden niet automatisch geïnitialiseerd. Het gebruik van een niet-geïnitialiseerde lokale variabele leidt tot een compileerfout.

Instantievariabelen (velden, niet static) — behoren tot elk object afzonderlijk, worden geïnitialiseerd bij het aanmaken van een objectinstantie.

Statische variabelen (static fields) — gemeenschappelijk voor alle instanties van de klasse, bestaan in één exemplaar voor de hele klasse. Wijzigingen in één object zijn zichtbaar in alle andere objecten van die klasse.

Voorbeeldcode
public class Example { private int instanceVar; // instantievartsen private static int staticVar; // statische variabele public void foo() { int localVar = 0; // lokale variabele } }

Misleidende vraag

Kunnen statische variabelen privé zijn en hoe zijn ze zichtbaar tussen verschillende exemplaren van de klasse?

Antwoord: Ja, statische variabelen kunnen privé zijn. Wijzigingen worden weerspiegeld voor alle instanties van de klasse, omdat ze tot de klasse behoren en niet tot het object.

public class MyClass { private static int counter = 0; public MyClass() { counter++; } public static int getCounter() { return counter; } }

Het aanmaken van meerdere instanties van MyClass verhoogt dezelfde teller.

Voorbeelden van echte fouten door onbekendheid met de nuances van het onderwerp


Verhaal

In een enterprise-applicatie plaatste de ontwikkelaar per ongeluk de gebruikersstatus in een static veld. Dit leidde ertoe dat gebruikers elkaars gegevens "zagen" in een multi-user omgeving.


Verhaal

Bij het schrijven van een multi-threaded applicatie werd een instantievaarlijke gebruikt binnen een static methode zonder juiste synchronisatie. Dit veroorzaakte race-omstandigheden en onverwachte resultaten.


Verhaal

De ontwikkelaar besloot een lokale variabele te gebruiken in plaats van een klasveld om een tussenresultaat op te slaan. De variabele werd vernietigd na het verlaten van de methode, en het programma retourneerde altijd null, wat niet onmiddellijk tijdens de testfase werd opgemerkt.