what is static keyword java
Deze tutorial legt statische sleutelwoorden in Java uit en het gebruik ervan in variabelen, methoden, blokken en klassen. Geeft ook het verschil aan tussen statische en niet-statische leden:
Java ondersteunt verschillende soorten declaraties om de reikwijdte en het gedrag van zijn variabelen, methoden, klassen, enz. Bijvoorbeeld, het sleutelwoord final, verzegeld, statisch, enz. Al deze verklaringen hebben een specifieke betekenis wanneer ze in het Java-programma worden gebruikt.
We zullen al deze sleutelwoorden onderzoeken terwijl we doorgaan met deze tutorial. Hier bespreken we de details van een van de belangrijkste sleutelwoorden in Java, namelijk 'statisch'.
Wat je leert:
- Statisch trefwoord in Java
- Gevolgtrekking
Statisch trefwoord in Java
Een lid in een Java-programma kan als statisch worden gedeclareerd met het sleutelwoord “statisch” voorafgaand aan de declaratie / definitie. Wanneer een lid statisch wordt verklaard, betekent dit in wezen dat het lid wordt gedeeld door alle instanties van een klas zonder kopieën per instantie te maken.
Statisch is dus een niet-klasse-modifier die in Java wordt gebruikt en kan worden toegepast op de volgende leden:
- Variabelen
- Methoden
- Blokken
- Klassen (meer specifiek geneste klassen)
Wanneer een lid statisch wordt verklaard, kan het worden benaderd zonder een object te gebruiken. Dit betekent dat voordat een klasse wordt geïnstantieerd, het statische lid actief en toegankelijk is. In tegenstelling tot andere niet-statische class-leden die ophouden te bestaan wanneer het object van de class buiten bereik gaat, is het statische lid duidelijk nog steeds actief.
Statische variabele in Java
Een lidvariabele van een klasse die als statisch wordt gedeclareerd, wordt de statische variabele genoemd. Het wordt ook wel de “klassenvariabele” genoemd. Zodra de variabele als statisch is gedeclareerd, wordt geheugen slechts één keer toegewezen en niet elke keer wanneer een klasse wordt geïnstantieerd. Daarom hebt u toegang tot de statische variabele zonder een verwijzing naar een object.
Het volgende Java-programma geeft het gebruik van statische variabelen weer:
Uitgang:
In het bovenstaande programma hebben we twee statische variabelen, namelijk a en b. We wijzigen deze variabelen zowel in een functie 'printStatic' als in 'main'. Merk op dat de waarden van deze statische variabelen over de functies behouden blijven, zelfs wanneer het bereik van de functie eindigt. De uitvoer toont de waarden van variabelen in twee functies.
Waarom hebben we statische variabelen nodig en waar zijn ze nuttig?
Statische variabelen zijn vooral handig in toepassingen die tellers nodig hebben. Zoals u weet, geven tellers verkeerde waarden als ze als normale variabelen worden gedeclareerd.
Als u bijvoorbeeld een normale variabele hebt ingesteld als teller in een toepassing die een klasse heeft, zeg auto. Wanneer we vervolgens een auto-object maken, wordt de normale tellervariabele bij elke instantie geïnitialiseerd. Maar als we een tellervariabele hebben als een statische of klassevariabele, dan wordt deze slechts één keer geïnitialiseerd wanneer de klasse wordt gemaakt.
Later, bij elke instantie van de klasse, wordt deze teller met één verhoogd. Dit is in tegenstelling tot de normale variabele waarbij bij elke instantie de teller wordt verhoogd, maar de waarde van de teller altijd 1 is.
Dus zelfs als u honderd objecten van de klassewagen maakt, zal de teller als een normale variabele altijd de waarde 1 hebben, terwijl deze met een statische variabele het juiste aantal van 100 zal weergeven.
Hieronder is een ander voorbeeld van statische tellers in Java gegeven:
Uitgang:
De werking van de statische variabele is duidelijk in het bovenstaande programma. We hebben de statische variabele count gedeclareerd met de beginwaarde = 0. Vervolgens verhogen we in de constructor van de klasse de statische variabele.
In de hoofdfunctie maken we drie objecten van de klassenteller. De uitvoer toont de waarde van de statische variabele elke keer dat het tellerobject wordt gemaakt. We zien dat bij elk gecreëerd object de bestaande statische variabele waarde wordt verhoogd en niet opnieuw geïnitialiseerd.
Java Statische methode
Een methode in Java is statisch als deze wordt voorafgegaan door het trefwoord “statisch”.
Enkele punten die u moet onthouden over de statische methode zijn:
in unix staat de w (schrijf) toegangsrechten toe
- Een statische methode behoort tot de klasse in tegenstelling tot andere niet-statische methoden die worden aangeroepen met behulp van de instantie van een klasse.
- Om een statische methode aan te roepen, heb je geen klasseobject nodig.
- De statische gegevensleden van de klasse zijn toegankelijk voor de statische methode. De statische methode kan zelfs de waarden van het statische gegevenslid wijzigen.
- Een statische methode mag geen verwijzing hebben naar ‘dit’ of ‘super’ leden. Zelfs als een statische methode ze probeert te verwijzen, zal het een compilatiefout zijn.
- Net als statische gegevens kan de statische methode ook andere statische methoden aanroepen.
- Een statische methode kan niet verwijzen naar niet-statische gegevensleden of variabelen en kan ook geen niet-statische methoden aanroepen.
Het volgende programma toont de implementatie van de statische methode in Java:
Uitgang:
Dit is een eenvoudige illustratie. We definiëren een statische methode die eenvoudig een bericht afdrukt. Vervolgens wordt in de hoofdfunctie de statische methode aangeroepen zonder enig object of instantie van een klasse.
Nog een voorbeeld van statische sleutelwoordimplementatie in Java.
In het bovenstaande programma hebben we, zoals u kunt zien, twee methoden. De methode printStatic is een statische methode terwijl inst_print een instantiemethode is. We hebben ook twee variabelen, static_count is een statische variabele en b is een instantievariabele.
In de statische methode - printStatic, geven we eerst een bericht weer en vervolgens proberen we de waarde van de instantievariabele b te wijzigen en ook de niet-statische methode aan te roepen.
Vervolgens proberen we het zoekwoord ‘super’ te gebruiken.
b = 20;
inst_print ();
System.out.println (super.count_static);
Wanneer we het programma uitvoeren met de bovenstaande regels, krijgen we compilatiefouten voor het gebruik van instantievariabelen, het aanroepen van niet-statische methoden en het verwijzen naar super in een statische context. Dit zijn de beperkingen van de statische methode.
Als we commentaar geven op de bovenstaande drie regels, alleen dan werkt het bovenstaande programma prima en produceert het de volgende uitvoer.
Uitgang:
Overbelasting en overschrijven van statische methoden
Zoals jullie allemaal weten, zijn zowel Overloading als Overriding de kenmerken van OOPS en ze helpen bij polymorfisme. Overbelasting kan worden geclassificeerd als polymorfisme tijdens het compileren, waarbij u methoden kunt hebben met dezelfde naam maar met verschillende parameterlijsten.
Overschrijven is een kenmerk van runtime-polymorfisme en hierin wordt de basisklassemethode overschreven in de afgeleide klasse, zodat de handtekening of het prototype van de methode hetzelfde is maar de definitie verschilt.
Laten we bespreken hoe overbelasting en overschrijving de statische klasse in Java beïnvloeden.
Overbelasting
U kunt een statische methode in Java overbelasten met verschillende parameterlijsten maar met dezelfde naam.
Het volgende programma toont Overbelasting:
Uitgang:
Dit programma heeft twee statische methoden met dezelfde naam ‘static_method’ maar een andere lijst met argumenten. De eerste methode heeft geen enkel argument en de tweede methode heeft een stringargument.
Een punt om op te merken is dat u de methode niet kunt overbelasten alleen afhankelijk van het ‘statische’ zoekwoord. Bijvoorbeeld, als je een instantiemethode ‘som’ hebt en als je een andere methode ‘som’ definieert en deze als statisch declareert, dan zal het niet werken. Deze poging tot overbelasting op basis van een 'statisch' sleutelwoord zal resulteren in een compilatiefout.
Overschrijven
Aangezien statische methoden worden aangeroepen zonder enig object van de klasse, zal deze, zelfs als u een statische methode met dezelfde handtekening in de afgeleide klasse heeft, niet worden overschreven. Dit komt omdat er geen run-time polymorfisme is zonder een instantie.
Daarom kunt u een statische methode niet negeren. Maar als er überhaupt een statische methode is met dezelfde handtekening in de afgeleide klasse, dan is de aanroepmethode niet afhankelijk van de objecten tijdens runtime, maar van de compiler.
Houd er rekening mee dat hoewel statische methoden niet kunnen worden overschreven, de Java-taal geen compileerfouten geeft als u een methode in de afgeleide klasse heeft met dezelfde handtekening als een methode uit de basisklasse.
De volgende implementatie bewijst dit punt.
Uitgang:
gratis sites voor het delen van bestanden om te downloaden
In het bovenstaande programma kun je zien dat de statische methode die wordt aangeroepen niet afhankelijk is van het object waarnaar de aanwijzer verwijst. Dit komt doordat objecten helemaal niet worden gebruikt met statische methoden.
Statisch blok in Java
Net zoals je functieblokken hebt in programmeertalen zoals C ++, C #, etc. in Java, is er ook een speciaal blok genaamd 'statisch' blok dat meestal een blok code bevat dat betrekking heeft op statische gegevens.
Dit statische blok wordt uitgevoerd op het moment dat het eerste object van de klasse wordt gemaakt (precies op het moment van classloading) of wanneer het statische lid binnen het blok wordt gebruikt.
Het volgende programma toont het gebruik van een statisch blok.
Uitgang:
Let op de volgorde van uitvoering van uitspraken in het bovenstaande programma. De inhoud van het statische blok wordt eerst uitgevoerd, gevolgd door het hoofdprogramma. De statische variabelen sum en val1 hebben beginwaarden, terwijl val2 niet is geïnitialiseerd (standaard is dit 0). Dan is in het statische blok val2 nog steeds geen waarde toegewezen en daarom wordt de waarde ervan weergegeven als 0.
De variabele val2 krijgt een waarde toegewezen na het afdrukken in het statische blok en de som wordt opnieuw berekend. Daarom krijgen we in de hoofdfunctie verschillende waarden van som en waarde2.
Als u een constructor opgeeft, wordt de inhoud van het statische blok zelfs vóór de constructor uitgevoerd. De statische blokken worden meestal gebruikt om statische leden van de klasse te initialiseren en andere initialisatie met betrekking tot statische leden.
Java Static Class
In Java heb je statische blokken, statische methoden en zelfs statische variabelen. Daarom is het duidelijk dat u ook statische klassen kunt hebben. In Java is het mogelijk om een klasse binnen een andere klasse te hebben en dit wordt een geneste klasse genoemd. De klasse die de geneste klasse omsluit, wordt de klasse Outer genoemd.
In Java, hoewel u een geneste klasse als statisch kunt declareren, is het niet mogelijk om de buitenste klasse als statisch te hebben.
Laten we nu eens kijken naar de statisch geneste klassen in Java.
Statische geneste klasse in Java
Zoals eerder vermeld, kunt u een geneste klasse in Java als statisch laten declareren. De statische geneste klasse verschilt in bepaalde aspecten van de niet-statische geneste klasse (innerlijke klasse), zoals hieronder vermeld.
In tegenstelling tot de niet-statische geneste klasse, heeft de geneste statische klasse geen verwijzing naar de buitenste klasse nodig.
Een statische geneste klasse heeft alleen toegang tot statische leden van de buitenste klasse, in tegenstelling tot de niet-statische klassen die toegang hebben tot zowel statische als niet-statische leden van de buitenste klasse.
levenscyclus van de systeemontwikkeling van het watervalmodel
Een voorbeeld van een statische geneste klasse wordt hieronder gegeven.
Uitgang:
In het bovenstaande programma zie je dat de statische geneste klasse toegang heeft tot de statische variabele (string) vanuit de buitenste klasse.
Statische import in Java
Zoals u weet, nemen we meestal verschillende pakketten en voorgedefinieerde functionaliteit op in het Java-programma met behulp van de 'import' -instructie. Als u het woord statisch gebruikt met de importrichtlijn, kunt u de klassenfunctionaliteit gebruiken zonder de klassenaam te gebruiken.
Voorbeeld:
Uitgang:
In dit programma gebruiken we statische import voor de klasse java.lang.System.
Opmerking: In de hoofdfunctie hebben we zojuist out.println gebruikt om het bericht weer te geven.
Hoewel de statische importfunctie code beknopter en leesbaarder maakt, creëert het soms dubbelzinnigheid, vooral wanneer sommige pakketten dezelfde functies hebben. Daarom mag statische import alleen worden gebruikt als dit zeer nodig is.
Statisch versus niet-statisch
Laten we de belangrijkste verschillen bespreken tussen statische en niet-statische leden van Java.
Hieronder staan de verschillen tussen Statische en niet-statische variabelen
Statische variabelen | Niet-statische variabelen |
---|---|
Het is alleen toegankelijk met de naam van de klas. | Vereist objecten van een klasse om toegang te krijgen. |
Zijn toegankelijk voor zowel statische als niet-statische methoden. | Zijn alleen toegankelijk voor niet-statische methoden. |
Een geheugen voor statische variabelen wordt slechts eenmaal per klasse toegewezen. | Per object wordt een geheugen voor niet-statische variabelen toegewezen. |
Gedeeld door alle objecten van de klas. | Er wordt een kopie van de variabele per object gemaakt. |
Heeft een globaal bereik en is beschikbaar voor alle methoden en blokken. | Heeft een lokaal bereik en is zichtbaar voor objecten van de klasse. |
Hieronder wordt het verschil weergegeven tussen statische en niet-statische methoden
Statische methoden | Niet-statische methoden |
---|---|
Een methode die wordt voorafgegaan door een statisch trefwoord en beschikbaar is op klassenniveau. | Een methode die niet wordt voorafgegaan door een statisch sleutelwoord en die beschikbaar is voor elk van de instanties van de klasse. |
Ondersteunt compilatietijd of vroege binding. | Ondersteunt runtime of dynamische binding. |
Heeft alleen toegang tot statische gegevensleden van zijn klasse en een andere klasse. | Heeft toegang tot zowel statische als niet-statische leden van de klas en andere klassen. |
Statische methoden kunnen niet worden overschreven. | Kan worden overschreven. |
Geheugen wordt slechts één keer toegewezen. Daarom is het gebruikte geheugen minder. | Het geheugengebruik is groter omdat geheugen wordt toegewezen telkens wanneer de methode wordt aangeroepen. |
Statisch versus definitief
Statisch en definitief zijn twee sleutelwoorden in Java die een speciale betekenis kunnen geven aan de entiteit waarmee het wordt gebruikt. Bijvoorbeeld, wanneer een variabele als statisch wordt gedeclareerd, wordt het een klassevariabele die toegankelijk is zonder verwijzing naar het object.
Evenzo, wanneer een variabele als definitief wordt verklaard, wordt deze onveranderlijk, d.w.z. een constante.
Laten we enkele van de belangrijkste verschillen tussen statische en definitieve zoekwoorden in Java in een tabel zetten.
Statisch | Laatste |
---|---|
Een statisch gegevenslid (geneste klasse, variabele of methode) is een gegevenslid voorafgegaan door een statisch sleutelwoord en is toegankelijk zonder een object. | Het laatste trefwoord kan worden toegepast op een variabele, methode, klasse, enz. en legt beperkingen op aan de entiteiten. |
Het is niet verplicht om de statische variabele met waarde te initialiseren tijdens het declareren. | Het is vereist dat de laatste variabele wordt geïnitialiseerd op een waarde op het moment van declaratie |
U kunt de statische variabelen opnieuw initialiseren. | Het is niet mogelijk om definitieve variabelen opnieuw te initialiseren. |
Statische methoden zijn methoden die alleen toegang hebben tot statische leden. | Laatste methoden zijn de methoden die niet kunnen worden overgenomen / overschreven. |
Statische klassen zijn klassen waarvan de objecten niet kunnen worden gemaakt. | Laatste klassen zijn klassen die niet kunnen worden overgenomen. |
Veel Gestelde Vragen
V # 1) Kan Java Class statisch zijn?
Antwoord: Ja, een klasse in Java kan statisch zijn, op voorwaarde dat het niet de buitenste klasse is. Dit betekent dat alleen geneste klassen in Java statisch kunnen zijn.
V # 2) Wanneer moet ik Static gebruiken in Java?
Antwoord: Wanneer u een gegevenslid in uw programma wilt dat zijn waarde over de objecten heen moet behouden, moet u static gebruiken. Bijvoorbeeld, een teller. Een methode kan als statisch worden gedeclareerd als u deze niet met een object wilt aanroepen.
V # 3) Kan een statische klasse een constructor hebben?
Antwoord: Ja, een statische klasse kan een constructor hebben en het doel ervan is uitsluitend om statische gegevensleden te initialiseren. Het wordt alleen voor de eerste keer aangeroepen wanneer de gegevensleden worden geopend. Het wordt niet aangeroepen voor latere toegang.
Vraag 4) Wat is het nut van Static Constructor?
Antwoord: Over het algemeen wordt de constructor gebruikt om statische gegevensleden te initialiseren. Het wordt ook gebruikt om bewerkingen / acties uit te voeren die maar één keer hoeven te worden uitgevoerd.
V # 5) Worden statische methoden overgenomen in Java?
Antwoord: Ja, statische methoden in Java worden overgeërfd, maar worden niet overschreven.
Gevolgtrekking
In deze tutorial hebben we het statische sleutelwoord van Java in detail besproken, samen met het gebruik ervan in gegevensleden, methoden, blokken en klassen. Het statische trefwoord is een trefwoord dat wordt gebruikt om het klassenniveau of het globale bereik aan te geven.
U hoeft geen toegang te hebben tot statische leden met instanties van de klas. U hebt rechtstreeks toegang tot de statische gegevensleden met behulp van de klassenaam. We hebben ook de belangrijkste verschillen tussen statische en niet-statische leden besproken, evenals statische en definitieve zoekwoorden.
In onze volgende onderwerpen zullen we meer trefwoorden en hun betekenis in de Java-taal onderzoeken.
Aanbevolen literatuur
- Statisch in C ++
- Java-interface en abstracte les met voorbeelden
- Java-implementatie: creatie en uitvoering van Java JAR-bestand
- Java Virtual Machine: hoe JVM helpt bij het uitvoeren van Java-applicaties
- C # Concepts: Constructor, Destructor, Static Class, Struct & Enum
- Toegang tot modificatoren in Java - Tutorial met voorbeelden
- Zelfstudie over reflectie in Java met voorbeelden
- Inleiding tot de programmeertaal van Java - videozelfstudie