Zoeken…


Syntaxis

  • public static int myVariable; // Een statische variabele declareren
  • public static myMethod () {} // Statische methode declareren
  • openbare statische finale dubbele MY_CONSTANT; // Een constante variabele declareren die wordt gedeeld tussen alle instanties van de klasse
  • openbare finale dubbele MY_CONSTANT; // Declareren van een constante variabele specifiek voor deze instantie van de klasse (het beste gebruikt in een constructor die voor elke instantie een andere constante genereert)

Statisch gebruiken om constanten te declareren

Aangezien het static sleutelwoord wordt gebruikt voor toegang tot velden en methoden zonder een geïnstantieerde klasse, kan het worden gebruikt om constanten te declareren voor gebruik in andere klassen. Deze variabelen blijven constant bij elke instantiatie van de klasse. Volgens afspraak zijn static variabelen altijd ALL_CAPS en gebruiken ze onderstrepingstekens in plaats van kamelen. ex:

 static E STATIC_VARIABLE_NAME

Omdat constanten niet kunnen veranderen, kan static ook worden gebruikt met de final modifier:

Om bijvoorbeeld de wiskundige constante van pi te definiëren:

public class MathUtilities {
    
    static final double PI = 3.14159265358

}

Die in elke klasse als constante kan worden gebruikt, bijvoorbeeld:

public class MathCalculations {
   
    //Calculates the circumference of a circle
    public double calculateCircumference(double radius) {
        return (2 * radius * MathUtilities.PI);
    }

}

Hiermee statisch gebruiken

Statisch geeft een methode of variabele opslag die niet is toegewezen voor elke instantie van de klasse. Integendeel, de statische variabele wordt gedeeld door alle klasleden. Overigens zal het proberen om de statische variabele te behandelen als een lid van de klasse-instantie een waarschuwing:

public class Apple {
    public static int test;
    public int test2;
}

Apple a = new Apple();
a.test = 1; // Warning
Apple.test = 1; // OK
Apple.test2 = 1; // Illegal: test2 is not static
a.test2 = 1; // OK

Methoden die statisch worden verklaard, gedragen zich op vrijwel dezelfde manier, maar met een extra beperking:

U kunt het trefwoord this hier niet gebruiken!

public class Pineapple {

    private static int numberOfSpikes;   
    private int age;

    public static getNumberOfSpikes() {
        return this.numberOfSpikes; // This doesn't compile
    }


    public static getNumberOfSpikes() {
        return numberOfSpikes; // This compiles
    }

}

Over het algemeen is het het beste om generieke methoden die van toepassing zijn op verschillende instanties van een klasse (zoals kloonmethoden) static te verklaren, terwijl methoden zoals equals() niet-statisch blijven. De main werkwijze voor een Java-programma altijd statisch, waardoor het zoekwoord this kan niet worden gebruikt binnen main() .

Verwijzing naar niet-statisch lid uit statische context

Statische variabelen en methoden maken geen deel uit van een instantie. Er is altijd een kopie van die variabele, ongeacht hoeveel objecten u van een bepaalde klasse maakt.

U wilt bijvoorbeeld een onveranderlijke lijst met constanten hebben, het is een goed idee om het statisch te houden en het slechts eenmaal te initialiseren in een statische methode. Dit zou u een aanzienlijke prestatiewinst opleveren als u regelmatig meerdere instanties van een bepaalde klasse maakt.

Verder kun je ook een statisch blok in een klas hebben. U kunt het gebruiken om een standaardwaarde toe te wijzen aan een statische variabele. Ze worden slechts eenmaal uitgevoerd wanneer de klasse in het geheugen wordt geladen.

Instantievariabele zoals de naam suggereert, is afhankelijk van een instantie van een bepaald object, ze leven om de grillen ervan te dienen. Je kunt ermee spelen tijdens een bepaalde levenscyclus van een object.

Alle velden en methoden van een klasse die in een statische methode van die klasse worden gebruikt, moeten statisch of lokaal zijn. Als u instantie (niet-statische) variabelen of methoden probeert te gebruiken, wordt uw code niet gecompileerd.

public class Week {
    static int daysOfTheWeek = 7; // static variable
    int dayOfTheWeek; // instance variable
    
    public static int getDaysLeftInWeek(){
        return Week.daysOfTheWeek-dayOfTheWeek; // this will cause errors
    }

    public int getDaysLeftInWeek(){
        return Week.daysOfTheWeek-dayOfTheWeek; // this is valid
    }

    public static int getDaysLeftInTheWeek(int today){
        return Week.daysOfTheWeek-today; // this is valid
    }
    
}


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow