Normalment, s'accedeix a un membre d'una classe a través d'un objecte d'aquesta (instanciació). No obstant, quan declarem un membre com a static podrem accedir a aquest abans de crear objectes d'aquesta classe i sense referències a cap objecte.
![]() |
L'escriptor suïs Robert Walser |
Si ens fixem en el codi de l'entrada anterior veiem que no ens ha calgut crear o instanciar cap objecte de la classe exempleOl per a cridar els diferents métodes sobrecarregats. En aquest exemple, estem cridant métodes que es troben dins de la mateixa classe. Si vulguessim executar métodes d'una altra classe
només hauríem d'especificar el nom d'aquesta seguit de l'operador punt i el métode en qüestió:
nomClasse.nomMetodeEstatic
Els métodes static tenen una sèrie de restriccions:
- Només poden invocar directament altres métodes static
- Només poden accedir directament a dades static
- No tenen una referència this
Blocs estàtics
En ocasions, una classe requereix certa inicialització abans de que es puguin crear objectes d'aquesta. Per exemple, podem necessitar establir una connexió a una base de dades o inicialitzar determinades variables static. En aquests casos, Java permet declarar un bloc static que s'executarà al carregar la classe per primera vegada. Veiem-ne un exemple:
public class StaticBlock {
static double valor1;
static double valor2;
static { // Aquest bloc s'executarà al carregar la classe
System.out.println("Dins el bloc estàtic");
valor1 = Math.sqrt(2.0);
valor2 = Math.sqrt(3.0);
}
public StaticBlock(String msg) {
System.out.println(msg);
}
}
class SDemo {
public static void main(String[] args) {
StaticBlock ob = new StaticBlock("Dins el constructor");
System.out.println("Valor1: "+StaticBlock.valor1);
System.out.println("Valor2: "+StaticBlock.valor2);
}
}
El resultat generat és el següent:
Dins el bloc estàtic
Dins el constructor
Valor1: 1.4142135623730951
Valor2: 1.7320508075688772