Java Klasse mit "static" Methode

Neue Frage »

Auf diesen Beitrag antworten »
Matze84 Java Klasse mit "static" Methode

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"?
 
Auf diesen Beitrag antworten »
eulerscheZahl

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.
Auf diesen Beitrag antworten »
Matze84

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
Auf diesen Beitrag antworten »
eulerscheZahl

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.
 
Auf diesen Beitrag antworten »
Matze84

ok super danke.
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »