# Konstruktor und main()



## Corcovado (3. Dez 2004)

Hallo, ich hab wieder mal eine gescheite Frage im Anfaengerforum,
und zwar wollte ich ein Programm schreiben, bei dem per Konstruktor einige Parameter gesetzt werden.
In dieselbe Klasse hab ich auch die main reingeschrieben und nun schon den ganzen Vormittag nach einer fehlenden Initalisierung gesucht - Loesung: der Konstruktor wurde gar nicht aufgerufen !?? Warum?

Warum kann man denn fuer die Klasse in der die main liegt ueberhaupt einen Konstruktor schreiben, wenn er gar nicht aufgerufen wird??? Welchen Sinn hat das? Wie macht man das als erfahrener Programmierer, sollte man die Klasse in der sich die main befindet etwa gar nicht wirklich hernehmen? Vielleicht nur zum aufrufen anderer Objekte aber ausser main gar keine weitere Funktion reinschreiben???


----------



## bygones (3. Dez 2004)

nur alleine eine main reicht nicht... du musst in der main schon ein Objekt der Klasse erzeugen

```
public class MyClass() {
   private String t;

   public MyClass(String tt) {
     t = tt;
   }

   public static void main(String[] args) {
        MyClass c = new MyClass("hallo");
   }
}
```

allgemein ist immer gut bei problemen deinen code zu posten, dann können wir besser darauf antworten


----------



## Student (3. Dez 2004)

du könntest auch paramter z.b. per kommandozeile übergeben. die sind dann in args enthalten .. 

wer weiß, was du machen willst ;-)


----------



## Corcovado (3. Dez 2004)

OK, dann quael ich Euch mal mit meinem Quellcode...


```
public class Project01 {
/...
.../
	private static FilePresentation presentation;	
	private static Vector PageIndex;


	private Project01(){
		System.out.println("init");
/...
.../
		// jetz mit Vector    ;-)
		PageIndex = new Vector();        // Wird nicht ausgefuehrt !!???
/...
.../
	public static void main(String[] args){
/...
.../
		PageIndex.addElement("test1");
		PageIndex.addElement("test2");
		PageIndex.addElement("test3");
		
		presentation = new FilePresentation(PageIndex);
/...
.../
		presentation.chooseFile();
	}
```

Also... 
 ich hatte nen Code der in etwa so aussah, wichtig ist eigentlich nur der Vector "PageIndex". Ich bekam Fehlermeldungen obwohl ich eigentlich dachte alles richtig konstruiert/initialisiert zu haben. Der Grund war eben das nichtausfuehren der Zeile der Instanziierung - aber warum?

PS.:
Vielleicht liegt es ja an der private Deklaration vom Konstruktor, ich dachte solange es ansonsten hinhaut, lieber mal private machen?! Wofuer kann man den denn sonst eigentlich private machen, hab mich eh gewundert, dass es ueberhaupt funktioniert.


----------



## Roar (3. Dez 2004)

private: http://www.java-forum.org/de/viewtopic.php?t=1546
du instantiierst nie ein objekt, ergo wird auch nie dein konstruktor aufgerufen.


----------



## Corcovado (3. Dez 2004)

Danke - gute Zusammenfassung !!
  Ich dachte aber wenn die main Bestandteil der "definierten Klasse" ist, muesste eben ein Zugriff moeglich sein - is aber wohl ne Ausnahme wegen "dem ersten Instantiieren von Aussen" (??).


----------



## Roar (3. Dez 2004)

Corcovado hat gesagt.:
			
		

> Ich dachte aber wenn die main Bestandteil der "definierten Klasse" ist, muesste eben ein Zugriff moeglich sein - is aber wohl ne Ausnahme wegen "dem ersten Instantiieren von Aussen" (??).


was soll das denn nun wieder heißen?
du kriegst nen fehler weil dein vector null ist...


----------



## Corcovado (3. Dez 2004)

Ja aber ??? - die Klasse da wo die main drin is, die muss nicht instanziiert werden?
Hab da evtl nen Denkfehler drin!?!


----------



## Roar (3. Dez 2004)

nein sie muss nicht instantiiert werden. keine klasse muss instantiiert werden. aber deine variable ist null und wenn sie null ist kansnt du nicht drauf zugreifen. und sie wird nur initialisiert wenn deine klasse instantiiert wird. au0erdem is das n bissl sinnlos einen statiscje variable in einem konstruktor zu inintiaisieren :-/


----------



## Corcovado (3. Dez 2004)

Ah ja - ok, wieder was gelernt !! Was hat es dann mit den statischen Variablen auf sich? warum ist es sinnlos, die im Konstruktor zu initialisieren?


----------



## Dreezard (3. Dez 2004)

statische variablen sind halt Variablen, die NICHT zu einem Objekt gehören, ergo nichts im Kunstruktor zu suchen haben
http://www.java-forum.org/de/viewtopic.php?t=1531


----------



## bygones (3. Dez 2004)

v.a. kann es passieren, dass du die statische variable änderst. wenn du danach ein neues objekt erzeugst verändert sich die statische variable ungewollt auf den initialwert


----------

