Wat is het verschil tussen definitief en statisch in Java?


Beste antwoord

Uh, het zijn totaal verschillende concepten.

Een lid gemarkeerd als statisch behoort tot de klasse, in plaats van tot een bepaald exemplaar. Soms hebben klassen alleen statische leden, met een voor de hand liggend voorbeeld is de klasse java.lang.Double die dubbele primitieven “boxen”: u kunt de waarde van een individuele dubbele krijgen via een instantiemethode (myDouble.doubleValue()) maar verkrijg “universele” dingen via statische leden (Double.MAX\_VALUE).

Een lid dat als final is gemarkeerd, kan niet * zijn waarde hebben (wat zijn waarde is if primitive, of zijn referentie if object) veranderde na initialisatie. Mogelijk kunt u nog steeds de eigenschappen van een object wijzigen (het kan veranderlijk zijn) maar je kon het object niet * vervangen door een ander. (* U kunt technisch “vals spelen” met reflectie, bytecode-manipulatie of andere manieren om “de regels te overtreden”, maar als u die doet, weet u re “cheating”.)

Antwoord

Om te weten wanneer je moet gebruiken

private static final X x;

Je moet weten wat het gebruik van die sleutelwoorden is.

Eens kijken

  1. privé – Het wordt gebruikt als je een bepaald lid van een klas wilt beperken tot niet toegankelijk zijn buiten die klasse.
  2. statisch – Wanneer je een lid statisch declareert, is het gekoppeld aan zijn klasse en niet aan een object. Om het te vereenvoudigen, wordt het statische lid geïnitialiseerd wanneer de klasse wordt geladen. Dus wanneer u de waarde van dat lid bijwerkt, worden alle plaatsen waar ernaar wordt verwezen, ook bijgewerkt. Vandaar dat statische leden worden benaderd via de klassenaam en niet hun objecten, aangezien de waarde van lid hetzelfde blijft, ongeacht de objecten.
  3. final – Dit trefwoord, wanneer gebruikt met lidvariabelen, definieert dat zodra de klasse is geladen en de waarde is toegewezen, deze niet kan worden gewijzigd.

Laten we dus eens kijken wat er gebeurt wanneer je een variabele zoals hieronder declareert:

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

Nu,

PRIVATE\_STATIC\_FINAL\_STRING is privé gedefinieerd, dus het won “niet toegankelijk zijn buiten zijn” declarerende klasse. Het is ook gedefinieerd als statisch, dus de waarde ervan blijft hetzelfde, ongeacht de objecten van de klasse. En het is gedefinieerd als definitief, dus zodra de klasse is geladen, wordt de waarde ervan niet gewijzigd.

Daarom zal PRIVATE\_STATIC\_FINAL\_STRING werken als niet-wijzigbare string op klassenniveau die niet toegankelijk zal zijn buiten de declarerende klasse.

Ik hoop dat dit je helpt om je twijfels weg te nemen. Als je meer hulp nodig hebt, je kunt contact met me opnemen en ik zal proberen je zo goed mogelijk te helpen.

Veel succes en veel plezier bij het leren!

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *