Vad är skillnaden mellan slutlig och statisk i Java?


Bästa svaret

Uh, de är helt olika begrepp.

En medlem markerad statisk tillhör klassen snarare än till någon speciell instans. Ibland kan klasser bara ha statiska medlemmar, med ett uppenbart exempel som java.lang.Double-klassen som “boxar” dubbla primitiva: du kan få värdet av en enskild dubbel genom en instansmetod (myDouble.doubleValue()) men få ”universella” saker genom statiska medlemmar (Double.MAX\_VALUE).

En medlem markerad som slutlig kan inte * ha sitt värde (vilket är dess värde om den är primitiv, eller dess referens om objekt) ändrades när den initialiserades. Du kanske fortfarande kan ändra egenskaper för ett objekt (det kan vara mutabelt ) men du kunde inte * ersätta objektet med ett annat. (* Du kan tekniskt ”fuska” med reflektion, bytkodmanipulation eller andra sätt att ”bryta mot reglerna”, men om du gör dem vet du förmodligen du re “fusk”.)

Svar

Att veta när man ska använda

private static final X x;

Du borde veta vad användningen av dessa nyckelord är.

Låt oss se

  1. privat – Det används när du vill begränsa vissa medlemmar i en klass till vara inte tillgänglig utanför den klassen.
  2. statisk – När du förklarar någon medlem statisk är den länkad till sin klass och inte objekt. För att förenkla det initialiseras den statiska medlemmen när klassen laddas. Så när du uppdaterar värdet för den medlemmen kommer alla platser där det refereras också att uppdateras. Därför kommer statisk medlem att nås med klassnamn och inte deras objekt som värdet på medlem kommer att förbli densamma oavsett objekt.
  3. final – Det här nyckelordet, när det används med medlemsvariabler, definierar att när klassen har laddats och värdet har tilldelats kan det inte ändras.

Så låt oss se vad som händer när du förklarar en variabel som nedan:

private static final String PRIVATE\_STATIC\_FINAL\_STRING = "String";

Nu,

PRIVATE\_STATIC\_FINAL\_STRING definieras privat så den vann ”t vara tillgänglig utanför den” deklarerar klass. Det definieras också som statiskt, så värdet på det kommer att förbli detsamma oavsett det klassens objekt. Och det definieras som slutligt, så när klassen har laddats ändras inte värdet.

Därför kommer PRIVATE\_STATIC\_FINAL\_STRING att fungera som omodifierbar klassnivåsträng som inte kommer att vara tillgänglig utanför den deklarerar klass.

Jag hoppas att detta hjälper dig att rensa dina tvivel. Om du behöver ytterligare hjälp, du kan nå mig och jag kommer att försöka hjälpa dig så mycket jag kan.

Lycka till och lyckligt lärande!

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *