Nessuno ti obbliga a usare static in quel punto.
Se lo usi, la differenza e' che l'oggetto dichiarato diventa statico, ossia allocato staticamente.
Ogni oggetto della tua classe "JFrameExample" condividera' la stessa copia dell'oggetto statico (in questo caso un JFrame)
In pratica: come e' scritto adesso, ogni istanza di "JFrameExample" contiene un riferimento (un puntatore) ad un JFrame j diverso.
Se invece usi static, tutte le istanze della classe punteranno allo stesso JFrame.
Non solo, un'altra classe, che importa al suo interno "JFrameExample" potra' accedere al suo membro j senza dover dichiarare alcun oggetto, usando la notazione JFrameExample.j (questo perche' j e' unico e condiviso da tutti i "JFrameExample", percio' viene creato non appena la classe viene caricata... o giu' di li'!)

Spero di non aver scritto troppe cazzate... :rollo: