Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Praktische Informatik » Java Klasse mit "static" Methode » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen Java Klasse mit "static" Methode
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Matze84
Eroberer


Dabei seit: 14.10.2012
Beiträge: 73

Java Klasse mit "static" Methode Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Hallo zusammen.

Ich habe mal folgende Frage.
Ich habe (von jmd anderem) eine Klasse.
Diese sieht im groben und ganzen ungefähr wie folgt aus.

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
public class MyClass{
private static final Integer firstInt = StaticClass.getInteger("Wert einer Zahl");
private static final Integer secondInt = StaticClass.getInteger("Wert einer anderen Zahl");
private static final MyClass instance = new MyClass();
private static final Object obj1;
private static final Object obj2;

static{
   obj1 = new Object();
   obj2 = new Object();
}

public MyClass getInstance(){
   return instance;
}

... noch mehr methoden

}


Meine Frage dazu: Was bedeutet diese "static-Methode" oder was auch immer das ist?
code:
1:
2:
3:
4:
static{
    obj1 = new Object();
    obj2 = new Object();
}


ist das gleichzusetzen mit "private static void irgendwas"?
03.04.2015 12:43 Matze84 ist offline Beiträge von Matze84 suchen Nehmen Sie Matze84 in Ihre Freundesliste auf
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

obj1 und obj2 sind static, das heißt alle Instanzen teilen sich diese Variable.
Wenn man die im Konstruktor initialisiert, kann man die von einer anderen Instanz angelegten Variablen überschreiben.
static {...} wird nur beim Erzeugen der ersten Instanz ausgeführt.

__________________
Syntax Highlighting fürs Board (Link)
03.04.2015 12:53 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
Matze84
Eroberer


Dabei seit: 14.10.2012
Beiträge: 73

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Zitat:
Original von eulerscheZahl
static {...} wird nur beim Erzeugen der ersten Instanz ausgeführt.


Aha also nur zum Verständnis, ob ich das jetzt richtig interpretiere, ein Beispiel.
Als einfacheren Zugriff, damit ich hier nich noch getter und setter schreiben muss, mache ich einige Variablen "public" auch wenn man das eigentlich nicht macht Augenzwinkern


code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
public class MyClass{
public final String name;
public statifc final Integer zahl;

public static final Date jetztDatum;
public static final Date späterDatum;

static{
Calendar cal = Calendar.getInstance();
//setzt das jetzige Datum
   jetztDatum = cal.getTime();
//addiert 30 Tage auf das jetzige Datum
cal.add(Calendar.DAY_OF_YEAR, 30);
   späterDatum = cal.getTime();
}

public MyClass(String name, Integer zahl){
   this.name = name;
   this.zahl = zahl;
}
}

wenn ich dann folgenden Aufruf hätte:
code:
1:
2:
3:
4:
5:
6:
7:
8:

MyClass myClass1 = new MyClass("Name1", new Integer(1));
//warte 10 Sekunden
Thread.sleep(10000);
MyClass myClass2 = new MyClass("Name2", new Integer(2));



dannn wäre myClass1.jetztDatum
und myClass2.jetztDatum
identisch, weil Sie sich die Variable ja statisch teilen und nur beim ersten mal gesetzt werden, wohingegen
myClass1.zahl
und myClass2.zahl jetzt beide 2 wären, weil sie beim zweiten Aufruf doch überschrieben wurde oder?

oh mann alles irgendwie nicht ganz einfach *g*
Ich hoffe das war verständlich
03.04.2015 13:13 Matze84 ist offline Beiträge von Matze84 suchen Nehmen Sie Matze84 in Ihre Freundesliste auf
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Führen wir es doch einfach aus smile
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
import java.util.Calendar;
import java.util.Date;

public class MyClass {
	private final String name;
	private static final Date dateStatic;
	private final Date dateNormal;

	static {
		dateStatic = Calendar.getInstance().getTime();
	}

	public MyClass(String name) {
		this.name = name;
		dateNormal = Calendar.getInstance().getTime();
	}

	@Override
	public String toString() {
		return name + ": static " + dateStatic + ", normal " + dateNormal;
	}
}


public class Main {
	public static void main(String[] args) {
		MyClass myClass1 = new MyClass("Instanz1");
		// warte 10 Sekunden
		try {
			Thread.sleep(10000);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		MyClass myClass2 = new MyClass("Instanz2");
		System.out.println(myClass1);
		System.out.println(myClass2);
	}
}


code:
1:
2:
Instanz1: static Fri Apr 03 13:21:46 CEST 2015, normal Fri Apr 03 13:21:46 CEST 2015
Instanz2: static Fri Apr 03 13:21:46 CEST 2015, normal Fri Apr 03 13:21:56 CEST 2015

Ja, du hast es richtig verstanden. Das static Datum ist gleich dem der ersten Instanziierung.

__________________
Syntax Highlighting fürs Board (Link)
03.04.2015 13:23 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
Matze84
Eroberer


Dabei seit: 14.10.2012
Beiträge: 73

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

ok super danke.
03.04.2015 13:36 Matze84 ist offline Beiträge von Matze84 suchen Nehmen Sie Matze84 in Ihre Freundesliste auf
Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
Informatiker Board » Themengebiete » Praktische Informatik » Java Klasse mit "static" Methode