Le modificateur static permet de déclarer une variable, une méthode de classe ou un intialisateur statique, c'est-à-dire que le membre demeure disponible dans une classe entière plutôt que dans un objet spécifique.

Une déclaration de méthodes et de variables de classe permet également de rendre ces derniers, exploitables même si la classe n'a pas été instanciée.

Une variable statiques peuvent être référencées par toutes les instances de sa propre classe ou par l'identificateur de sa classe ele-même.

static type identificateur;

static int nombre = 3;

static String chaine = "Une chaîne de caractères...";

Par exemple, une classe Classe possède une variable statique var et RefClasse1 et RefClasse2 sont des références à des instances de Classe. La variable statique var peut être référencée comme RefClasse1.var, RefClasse2.var et Classe.var. Toutes ces références pointent la même valeur ou le même objet.

Les méthodes statiques sont utilisées uniquement pour accéder aux variables statiques et appeler les méthodes statiques, de sa classe d'appartenance.

public class calcul{
  static int nombre = 0;
  public void calcul(valeur1, valeur2){
    i = valeur1;
    j = valeur2;
  }

  static int compteur(){
    return nombre++;
  }
}

les variables et les méthodes non statiques ne peuvent être respectivement ni accédées et ni appelées par des méthodes statiques.

Une méthode portant le modificateur static ne peut pas être outrepassée.

Les initialisateurs statiques sont des blocs d'instructions encadrées par des accolades sans identificateur, destinés à être exécutés lorsque leur propre classe d'appartenance est chargée et après que les variables statiques soient allouées et initialisées.

static {
  // Bloc d'instructions...
}

public class Increment {
  static int i = 0;
  static int j = 0;
  static int k = 0;

  // Déclaration d'un initialisateur statique
  static {
    System.out.println("Exemple de membres statiquesrn");
    for(;i < 5; i++) {
      System.out.println("i = " + i + "rn");
      j++;
    }
  }

  public static void main(String[] args) {
    for(;j < 10; j++)
      System.out.println("j = " + j + "rn");
    for(;k < 10; k++)
      System.out.println("k = " + k + "rn");
  }
  // A la fin des boucles :
  // j aura parcouru de 0 jusqu'à 4
  // j aura parcouru de 5 jusqu'à 9
  // k aura parcouru de 0 jusqu'à 9
}

Il n'est pas possible d'utiliser la référence this dans les méthodes statiques et encore moins dans les initialisateurs.