frage zu java konventionen

Status
Nicht offen für weitere Antworten.

nameac

Bekanntes Mitglied
moin,

Code:
public class StrLen {
	static {
		System.loadLibrary("led");
	}
	
	public static void main(String[] args) {

	}

}

ich arbeite mit java native interface aber der feste ausdruck static {......}
war mir bis her vollig unbekannt wofür steht das? ist das ne art default static constructor?
 
Dieser Block wird ausgeführt wenn die Klasse in den Speicher geladen wird.
Dient zur initialisierung statischer Variablen
 
meinst du das?
Code:
public class Klasse{

   static int variable;

   static{
            variable=1;
  }
}
 
ich verstehe trotzdem die function de blocks nicht wozu soll das gut sein.
könnte man die dll auch innerhalb eines konstruktors laden?
 
Das würde dann aber bei jeder Instanzierung passieren, während der static-Block nur einmal ausgeführt wird
 
Übrigens kann man beliebig viele static-Blöcke in eine Klasse packen. Die werden dann nacheinander ausgeführt.
 
Hi,
deine Frage ist zwar schon beantwortet, aber ich hätte noch ein - zwei Anmerkungen.
Also erstmal ist es keine Konvention, die du hier siehst sondern die Sprache Java selbst.
Da du mit JNI arbeitest (offensichtlich um etwas unter Windows anzubinden) stellt sich die Frage wie viel Erfahrung du mit der nativen Seite hast. Hier gibt es 2 Methoden um auf eine Dynamische Bibliothek zuzugreifen. Du kannst sie dynamisch linken oder statisch.

Beim statischen Linken legst du zwar erst zur Laufzeit fest, gegen welche Datei gelinkt wird, doch ist dieser Teil dann wirklich statisch. Startet dein Programm wird auch genau das getan, die Methoden werden gelinkt. Fehlt die Datei oder wird der Einsprungpunkt nicht gefunden, so bekommst du hier gleich einen Hinweis (i.d.R. eine Exception). Dies ist der i.d.R. einfachere Weg und den findest du eigentlich auch häufig in Programmen. JNI geht hier den gleichen Weg mit diesem static Block.

Dann gibt es noch die möglichkeit dynamisch zu linken. Dass eine DLL dies im Namen trägt heißt nicht, dass der Zugriff aut. dynamisch ist. Hier ermittelst du erst bei Aufruf der Methode die Adresse des Einsprungpunktes und rufst die entsprechende Methode auf. Dieser Weg spart Ressourcen (wobei sich die Ersparnis häufig in Grenzen halten dürfte). Dieser Weg ist ein klein wenig komplizierter (aber nicht wirklich schwierig). Ob man den mit JNI ebenfalls nutzen kann weiß ich allerdings nicht, steht sicherlich in der Doku.

Hier sei auch noch angemerkt, dass du dich nicht auf DLLs festlegen solltest, Java ist plattformunabhängig und kann auch .so Dateien unter Linux einbinden oder anders gesagt du kannst mit JNI unter jeder Plattform dyn. Bibliotheken einbinden.

Gruß Der Anmeldeboykottierer
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben