System.out.println

Warum kann man System.out.println nicht ohne irgendwelche Methode verwenden.

Also z.B. hier:

package de.begruessung;

public class Begruessung {
	
	void hallo(){
		System.out.println("Ich bin die de.begruessung.Begruessung Klasse");	
	}
	
}

Wenn ich versuche println ohne hallo()-Methode zu verwenden, dann versteht er das nicht. Ist println() nicht selbst eine Methode?

ja nur wie soll das in einer Klasse aufgerufen werden?
Woher soll Java wissen wann es das aufrufen soll?

Na so bald diese Klasse in der main()-Methode aufgerufen wird. Dann geht ja er von oben bis unten durch. Macht er ja mit Variablen genau so oder?

ja er legt an.
das was du da machen willst hat eigentlich keinen tieferen Sinn es gibt etwas das nennt sich statischer Initialisierer (glaub das es so komisch war) das könnte man ungefähr mit dem vergleichen was du da vor hast das sieht dann so aus

class klass{
static{
System.out.println("huhu");
}
}

das wird einmal beim ersten Aufruf der Klasse gemacht

Hmm also ich glaub ich bin jetzt wirklich zu müde und sollte schlafen gehen, sonst bringe ich noch alles durcheinander. :twisted:

Habe aber noch eine letze Frage. Ich habe hier mein Programm. Ich habe 2 Klassen die gleich heißen und gleiche Methode besitzen. Jetzt wollte ich testen, was passieren wird, wenn ich 2 dieser Klassen in meiner Main() benutze, ob das überhaupt geht.

package de.begruessung;

public class Begruessung {

	void hallo() {
		System.out.println("Ich bin die de.begruessung.Begruessung Klasse");
	}

}

public class Begruessung {

	public void hallo() {
		System.out.println("Ich bin die default-Begruessung Klasse");
	}

}
import de.begruessung.Begruessung;;

public class MainKlasse {

	public static void main(String[] args) {
		new Begruessung().hallo();
	}
}

Als Ausgabe nimmt er: “Ich bin die de.begruessung.Begruessung Klasse”. Wenn ich import auskommentiere dann nimmt er dann "“Ich bin die default-Begruessung Klasse”. Warum? Solange import da ist, sieht er die Klasse aus dem default Paket nicht. Wenn das aber 2 nicht dafault Pakete sind, wie entscheidet er welche Klasse er nimmt und welche nicht? Ich weiss dass so ein Fall wahrscheinlich nie auftretten wird, aber trotzdem würde ich mich das interessieren.

Danke

der Klassenname setzt sich immer aus dem Namen und dem Packagenamen zusammen zwei mit den komplett gleichen Namen sind nicht erlaubt bzw das gibt riesen Probleme :wink:

ansonsten muss halt bei einer Klasse der Packagename mit davor geschrieben werden

Danke. So ich gehe lieber schlafen bevor ich einschlafe :twisted: .

Allerdings gibt es nicht nur die static initializer sonden auch die ähm anderen - ich weiß nicht wie die heißen, das ist noch schlechterer Stil, aber möglich:

package de.begruessung;
 
public class Begruessung {
    
    {
        System.out.println("Ich bin die de.begruessung.Begruessung Klasse");    
    }
    
} 

Dieser Code wird aufgerufen, wenn auch die Variablen eines neuen Objekts gemacht werden. Allerdings ist hier eindeutig der Konstruktor vorzuziehen, dann hat man alles auf einen Blick.

Edit: Ich hab lang gebraucht bis ich das geschrieben hab :wink: Bezieht sich natürlich noch auf die erste Frage.
Edit2: Man sollte noch anmerken, dass es zumindest eine Stelle gibt, wo dieser Initializer seine Existenzberechtigung hat. Anonyme Klassen haben keinen Konstruktor - also geht es manchmal nicht anders :wink: Aber so komplizierte anonyme Klassen sollte man eigentlich zu inneren Klassen oder so machen.

hmmm die kenn ich ja noch garnicht, das könnte aber ne abgekürzte Variante der statischen Initialisierer sein würd ich so auf den ersten Blick tippen

Ne das ist was anderes, die sind nicht static. Schau mal den Code an:

public class Test
{
    {
        System.out.println("here");
    }
    public static void main(String[] args)
    {
        System.out.println("lalala");
        new Test();
        System.out.println("lalala2");
        new Test();
    }
}

Das gibt aus:

lalala
here
lalala2
here

joa muss ich mir mal merken, das sieht aus wie der statische Initialisierer nur halt nicht statisch :smiley:

	setLayout(new GridLayout(4,1));
	setSize(300, 300);
	add(label);
	add(field);
	add(button);
	add(label2);
	button.addActionListener(new Erreignis());
	setVisible(true);

Ich will diese Komponente übereinander positionieren. Wie kann ich das machen? Mit Grid klappt das irgendwie nicht, obwohl ich 4 Zeilen und 1 Spalte eingegeben habe, sieht das wie 2 Zeilen und 2 Spalten aus.
[label ][field ]
[button][label2]

Ich will aber so haben:
[label ]
[field ]
[button]
[label2]

Oder gibt es vieleicht besseren LayoutManager der so was machen kann?

Danke

TableLayout ist dein Freund.

http://javamagazin.de/itr/online_artikel/psecom,id,442,nodeid,11.html
https://tablelayout.dev.java.net/

Danke, werde das testen.

oder das GridBagLayout :wink:

GridBagLayout find ich bei dem Bsp wie mit Kanonen auf Spatzen schiessen… TableLayout ist intuitiver, aber fuer ein einfaches an einer Achse ausgerichtetes Layout wuerde ich immer noch das einfach BoxLayout nehmen…

wobei ich nicht versteh warum es bei dir nicht klappt… das hier klappt

public class Test extends JFrame{
	
	public Test() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setSize(300,300);
		Container c = getContentPane();
		c.setLayout(new GridLayout(4,1));
		c.add(new JLabel("Hallo"));
		c.add(new JButton("Why"));
		c.add(new JTextField());
		c.add(new JLabel("Alwazys"));
		setVisible(true);
	}

	public static void main(String[] args) throws Exception {
		new Test();
	}
}

also soweit ich das beurteilen kann ist das TableLayout genauso wie das GridBagLayout nur das man dafür externe Libs braucht, wobei ich zugeben muss das ich diesen Eindruck nur aus Blicken in fremden Code hab ich selbst hab das noch nie benutzt.

das TL ist vom Aussehen her dem GBL sehr aehnlich, aber fuer Anfaenger meist intuitiver und leichter zu bedienen.

Ob und inwieweit sie sich qualitativ unterscheiden weiss ich nicht

BoxLayout != GridLayout. :wink:

Also ich fand das TableLayout viel verwirrender. Und der Herr swerflash hat 100% noch nicht mit einer externen Lib gearbeitet :wink: Ihr dürft nun raten was seine nächste Frage sein wird :smiley: