<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki.byte-welt.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Cronut</id>
	<title>Byte-Welt Wiki - Benutzerbeiträge [de]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.byte-welt.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Cronut"/>
	<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php/Spezial:Beitr%C3%A4ge/Cronut"/>
	<updated>2026-07-09T12:56:57Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=Array&amp;diff=6959</id>
		<title>Array</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=Array&amp;diff=6959"/>
		<updated>2016-10-12T13:08:21Z</updated>

		<summary type="html">&lt;p&gt;Cronut: mal korrigiert, wie es mir in den Sinn kam&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ein Array ist ein Konstrukt in dem mehrere [[Objekt]]e eines [[Datentyp]]s hintereinander aufgereiht stehen. (Es wird hier immer von Objekten geredet egal ob es in der [[Programmiersprache]] Objekte gibt oder nicht)&lt;br /&gt;
Diese Konstrukte werden oft verwendet, wenn man eine große Ansammlung von gleichen Daten eines Objekts hat. Durch die Verwendung von Arrays muss man nicht viele Variablen anlegen und hat so alles übersichtlicher. In den meisten Sprachen haben Arrays jedoch den Nachteil, dass sie statisch sind, d.h. man legt einmal ihre Größe fest und danach kann man diese nicht mehr ändern. Will man mehr Objekte ablegen, muss man ein neues Array anlegen. Daher haben Arrays in diesen Sprachen aber auch einen Vorteil gegenüber den dynamischen Strukturen wie Listen: Da sie eine fest definierte Größe haben kann man sie über einen Index anlegen und darauf zugreifen. Dies ist meistens eine schnellere Möglichkeit, als es bei anderen Strukturen möglich ist. &lt;br /&gt;
&lt;br /&gt;
Für die Erzeugung von Arrays gibt es unterschiedliche Wege, jedoch haben sie meistens gemeinsam, dass eckige Klammern([]) ein Array symbolisieren. So wird in [[C]] und [[C++]] ein Array mit &amp;lt;code&amp;gt;typ name[];&amp;lt;/code&amp;gt; deklariert und die Initialisierung kann auf zwei unterschiedliche Wege erfolgen, &amp;lt;code&amp;gt; name = typ[anzahl]&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;name = malloc(sizeof(typ)*anzahl)&amp;lt;/code&amp;gt;, bzw. &amp;lt;code&amp;gt;name = new typ[anzahl]&amp;lt;/code&amp;gt;. Der Unterschied zwischen den beiden Arten ist, dass bei der ersten Möglichkeit der Speicher vom Compiler festgelegt wird und so nicht mehr freigegeben werden muss und bei der zweiten Art zur Laufzeit angelegt wird, welchen man dann auch selbst freigeben muss. Will man in C# oder Java ein Array anlegen, geschieht dies mit &amp;lt;code&amp;gt;typ[] name;&amp;lt;/code&amp;gt; und die Initialisierung erfolgt über &amp;lt;code&amp;gt;name = new typ[anzahl]()&amp;lt;/code&amp;gt;. In Java ist es auch möglich die Arrays wie in C++ anzulegen. &lt;br /&gt;
&lt;br /&gt;
Bei der Sprache [[C#]] wurde noch ein weiterer Arraytyp eingeführt. Hier sind in jeder Zeile immer gleich viele Objekte, diese werden mit &amp;lt;code&amp;gt;typ[,] name = new typ[anzahl,anzahl]();&amp;lt;/code&amp;gt; angelegt. In allen anderen Sprachen lassen sich Arrays auch mit mehreren Dimensionen anlegen, hierzu muss nur ein weiteres Klammerpaar hinzugefügt werden. Diese neuen Arrays in dem bestehenden Array müssen auch nicht gleich initialisiert werden sondern können auch erst später angelegt werden um so besser auf die Gegebenheiten angepasst zu sein. Daher ist es möglich das eine Zeile mal 4 Objekte enhält und eine mal gar keine, dies muss dann im Programm alles gesondert behandelt werden.&lt;br /&gt;
&lt;br /&gt;
Neben der Möglichkeit des Anlegens von leeren Arrays gibt es auch Möglichkeit Arrays gleich mit vorhandenen Daten anzulegen. In den meisten Sprachen ist dies einfach möglich indem man nach der normalen Syntax für die Initialisierung des Arrays gleich in geschweiften Klammern die Objekte durch Kommas getrennt einfügt, z.B. in [[Java]]:&lt;br /&gt;
&amp;lt;code=java&amp;gt;&lt;br /&gt;
String s = new String[]{&amp;quot;Hallo&amp;quot;,&amp;quot; &amp;quot;,&amp;quot;Hallo&amp;quot;,&amp;quot;!!!&amp;quot;};&lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
In einigen Sprachen ist es auch möglich bei der Deklaration der Variablen gleich die Werte zuzuweisen ohne die übliche Initialisierungssyntax, z.B. in Java:&lt;br /&gt;
&amp;lt;code=java&amp;gt;&lt;br /&gt;
String[] s = {&amp;quot;Hallo&amp;quot;,&amp;quot; &amp;quot;,&amp;quot;Hallo&amp;quot;,&amp;quot;!!!&amp;quot;};&lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Programmierung]]&lt;br /&gt;
[[Kategorie:Programmierung Grundlagen]]&lt;/div&gt;</summary>
		<author><name>Cronut</name></author>
	</entry>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=GPG-Fehler_-_%C3%B6ffentlicher_Schl%C3%BCssel_nicht_verf%C3%BCgbar&amp;diff=6958</id>
		<title>GPG-Fehler - öffentlicher Schlüssel nicht verfügbar</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=GPG-Fehler_-_%C3%B6ffentlicher_Schl%C3%BCssel_nicht_verf%C3%BCgbar&amp;diff=6958"/>
		<updated>2016-10-12T12:47:29Z</updated>

		<summary type="html">&lt;p&gt;Cronut: typo korrigiert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Fehler bei der Installation von Owncloud=&lt;br /&gt;
&lt;br /&gt;
Bei der Installation von Owncloud wurde nach der Aktualisierung der Paketlisten folgender Fehler ausgegeben:&lt;br /&gt;
 W: GPG-Fehler: http://download.opensuse.org  Release: Die folgenden Signaturen konnten nicht überprüft werden, weil ihr öffentlicher Schlüssel nicht verfügbar ist: NO_PUBKEY 977C43A8BA684223&lt;br /&gt;
Das heißt, der fehlende Schlüssel muss importiert werden, damit eine Installation gelingen kann:&lt;br /&gt;
 sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 977C43A8BA684223&lt;br /&gt;
Jetzt müssen die Paketquellen aktualisiert werden:&lt;br /&gt;
 sudo apt-get update&lt;br /&gt;
Danach kann nun der Owncloud-Client installiert werden:&lt;br /&gt;
 sudo apt-get install owncloud-client&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
*[https://software.opensuse.org/download/package?project=isv:ownCloud:desktop&amp;amp;package=owncloud-client Owncloud-Client Installation]&lt;br /&gt;
[[Kategorie:Linux]]&lt;/div&gt;</summary>
		<author><name>Cronut</name></author>
	</entry>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=Static_/_non-static_(Java)&amp;diff=6957</id>
		<title>Static / non-static (Java)</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=Static_/_non-static_(Java)&amp;diff=6957"/>
		<updated>2016-10-12T12:42:25Z</updated>

		<summary type="html">&lt;p&gt;Cronut: Rechtschreibfehler und Typos korrigiert/entfernt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Der Unterschied zwischen statischen und nicht-statischen Methoden und Variablen  ==&lt;br /&gt;
&lt;br /&gt;
Das kleine Wort &#039;&#039;static&#039;&#039; macht einen großen Unterschied.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Statische Methoden ==&lt;br /&gt;
&lt;br /&gt;
Wer nicht-objektorientierte Sprachen wie C kennt, dem dürften statische Methoden vertraut sein. In nicht-objektorientierten Sprachen heißen Methoden &amp;quot;Funktionen&amp;quot;. Und im Grunde genommen sind statische Methoden genau das: Funktionen wie in C.&lt;br /&gt;
&lt;br /&gt;
Wenn man von einer anderen Klasse auf statische Methoden oder Variablen zugreifen möchte, dann ruft man sie zusammen mit dem Klassennamen auf:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;public class ExternalClass {&lt;br /&gt;
&lt;br /&gt;
  public static int number=5;&lt;br /&gt;
  private static String text=&amp;quot;Anfangstext&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
  public static void myStaticMethod() {&lt;br /&gt;
    System.out.println(&amp;quot;statische Methode aufgerufen&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static double add(double a, double b) {&lt;br /&gt;
    return a + b;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static void printText() {&lt;br /&gt;
    System.out.println(text);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static void changeText() {&lt;br /&gt;
    text = &amp;quot;geaenderter Text&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|style=&amp;quot;width:1em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;public class MyProgram {&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    ExternalClass.myStaticMethod();&lt;br /&gt;
    System.out.println( ExternalClass.add(17.65, 9.23) );&lt;br /&gt;
    System.out.println( ExternalClass.number );&lt;br /&gt;
    ExternalClass.number = 13;&lt;br /&gt;
    System.out.println( ExternalClass.number );&lt;br /&gt;
    ExternalClass.printText();&lt;br /&gt;
    ExternalClass.changeText();&lt;br /&gt;
    ExternalClass.printText();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
       &lt;br /&gt;
       &lt;br /&gt;
       &lt;br /&gt;
       &lt;br /&gt;
       &lt;br /&gt;
       &lt;br /&gt;
       &lt;br /&gt;
       &lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Befinden sich die Methoden und Variablen in der eigenen Klasse, dann sieht es genauso aus:&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:61em&amp;quot;|&amp;lt;code=java&amp;gt;public class MyProgram {&lt;br /&gt;
&lt;br /&gt;
  public static int number=5;&lt;br /&gt;
  private static String text=&amp;quot;Anfangstext&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
  public static void myStaticMethod() {&lt;br /&gt;
    System.out.println(&amp;quot;statische Methode aufgerufen&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static double add(double a, double b) {&lt;br /&gt;
    return a + b;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static void printText() {&lt;br /&gt;
    System.out.println(text);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static void changeText() {&lt;br /&gt;
    text = &amp;quot;geaenderter Text&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    MyProgram.myStaticMethod();&lt;br /&gt;
    System.out.println( MyProgram.add(17.65, 9.23) );&lt;br /&gt;
    System.out.println( MyProgram.number );&lt;br /&gt;
    MyProgram.number = 13;&lt;br /&gt;
    System.out.println( MyProgram.number );&lt;br /&gt;
    MyProgram.printText();&lt;br /&gt;
    MyProgram.changeText();&lt;br /&gt;
    MyProgram.printText();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}     &lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Der Einsatzzweck für statische Methoden ist somit ähnlich wie bei Funktionen von nicht-objektorientierten Sprachen.&lt;br /&gt;
Statische Variablen sind ein zentraler Ort an dem etwas gespeichert wird.&lt;br /&gt;
&lt;br /&gt;
Beispiele für die Verwendung von statische Methoden im JRE:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:61em&amp;quot;|&amp;lt;code=java&amp;gt;public class MyProgram {&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    System.out.println( Math.PI );       // PI ist eine statische Variable in der Klasse Math&lt;br /&gt;
    System.out.println( Math.E );        // E ist eine statische Variable in der Klasse Math&lt;br /&gt;
    System.out.println( Math.sin(2) );   // sin() ist eine statische Methode in der Klasse Math&lt;br /&gt;
    System.out.println( Math.log(7) );   // log() ist eine statische Methode in der Klasse Math&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}     &lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
PI ist halt überall immer 3.141..., sin(2) ist überall 0.909..., etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Nicht-Statische Methoden ==&lt;br /&gt;
&lt;br /&gt;
Nicht-Statische Methoden und Variablen kommen vor allem in objektorientierten Sprachen vor.&lt;br /&gt;
Um diese aufrufen zu können, muss mit &#039;&#039;new&#039;&#039; eine Instanz von der Klasse erstellt werden. Und an dieser kann man dann die Methoden aufrufen. Die Methoden gehören dann zur Instanz:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;public class ExternalClass {&lt;br /&gt;
&lt;br /&gt;
  public int number=5;&lt;br /&gt;
  private String text=&amp;quot;Anfangstext&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
  public ExternalClass() {&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public void myNonStaticMethod() {&lt;br /&gt;
    System.out.println(&amp;quot;nicht-statische Methode aufgerufen&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public double add(double a, double b) {&lt;br /&gt;
    return a + b;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public void printText() {&lt;br /&gt;
    System.out.println(text);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public void changeText() {&lt;br /&gt;
    text = &amp;quot;geaenderter Text&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|style=&amp;quot;width:1em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;public class MyProgram {&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    ExternalClass ec1 = new ExternalClass();&lt;br /&gt;
    ec1.myNonStaticMethod();&lt;br /&gt;
    System.out.println( ec1.add(17.65, 9.23) );&lt;br /&gt;
    System.out.println( ec1.number );&lt;br /&gt;
    ec1.number = 13;&lt;br /&gt;
    System.out.println( ec1.number );&lt;br /&gt;
    ec1.printText();&lt;br /&gt;
    ec1.changeText();&lt;br /&gt;
    ec1.printText();&lt;br /&gt;
&lt;br /&gt;
    ExternalClass ec2 = new ExternalClass();&lt;br /&gt;
    ec2.printText();&lt;br /&gt;
    ec1.printText();&lt;br /&gt;
&lt;br /&gt;
    ec2.number = 29;&lt;br /&gt;
    System.out.println( ec1.number );&lt;br /&gt;
    System.out.println( ec2.number );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
       &lt;br /&gt;
       &lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Zwar existieren nun genau die gleichen Methoden und Variablen wie bei dem Beispiel mit den statischen Methoden, jedoch existieren sie für jede Instanz unabhängig voneinander.&lt;br /&gt;
&lt;br /&gt;
Befinden sich die Methoden und Variablen in der eigenen Klasse, dann sieht es ähnlich aus. In der eigenen Klasse wird jedoch statt einem Instanznamen das Schlüsselwort &#039;&#039;this&#039;&#039; verwendet:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:61em&amp;quot;|&amp;lt;code=java&amp;gt;public class MyProgram {&lt;br /&gt;
&lt;br /&gt;
  public int number=5;&lt;br /&gt;
  private String text=&amp;quot;Anfangstext&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
  public MyProgram() {&lt;br /&gt;
    this.myNonStaticMethod();&lt;br /&gt;
    System.out.println( this.add(17.65, 9.23) );&lt;br /&gt;
    System.out.println( this.number );&lt;br /&gt;
    this.number = 13;&lt;br /&gt;
    System.out.println( this.number );&lt;br /&gt;
    this.printText();&lt;br /&gt;
    this.changeText();&lt;br /&gt;
    this.printText();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public void myNonStaticMethod() {&lt;br /&gt;
    System.out.println(&amp;quot;nicht-statische Methode aufgerufen&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public double add(double a, double b) {&lt;br /&gt;
    return a + b;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public void printText() {&lt;br /&gt;
    System.out.println(text);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public void changeText() {&lt;br /&gt;
    text = &amp;quot;geaenderter Text&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    MyProgram p = new MyProgram();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Für mehr Informationen zur vorgenommenen Umformung bitte auf [[Vererbung_(Java)]] nachlesen.&lt;br /&gt;
&lt;br /&gt;
Beispiele für die Verwendung von nicht-statische Methoden im JRE:&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:61em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
import javax.swing.border.*;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
public class MyProgram {&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    JFrame f = new JFrame(&amp;quot;MyProgram&amp;quot;);&lt;br /&gt;
    JPanel p = new JPanel();&lt;br /&gt;
    JButton b1 = new JButton(&amp;quot;Button 1&amp;quot;);&lt;br /&gt;
    JButton b2 = new JButton(&amp;quot;Button 2&amp;quot;);&lt;br /&gt;
    JButton b3 = new JButton(&amp;quot;Button 3&amp;quot;);&lt;br /&gt;
    JLabel l1 = new JLabel(&amp;quot;Label 1&amp;quot;);&lt;br /&gt;
    JTextArea ta = new JTextArea();&lt;br /&gt;
    &lt;br /&gt;
    p.add(b1);&lt;br /&gt;
    p.add(b2);&lt;br /&gt;
    p.add(b3);&lt;br /&gt;
    p.add(l1);&lt;br /&gt;
    p.add(ta);&lt;br /&gt;
    &lt;br /&gt;
    ta.setPreferredSize(new Dimension(100,50));  // setPreferredSize ist eine nicht-statische&lt;br /&gt;
                                                 // Methode der Klasse JTextArea, von dem ta eine&lt;br /&gt;
                                                 // Instanz ist&lt;br /&gt;
    ta.setBorder(new LineBorder(Color.blue));&lt;br /&gt;
    ta.setText( b2.getText() );                  // Hier wird die Methode getText() von der&lt;br /&gt;
                                                 // Instanz b2 verwendet und ta mit setText()&lt;br /&gt;
                                                 // zugewiesen&lt;br /&gt;
    &lt;br /&gt;
    b1.setPreferredSize(new Dimension(180, 70)); // Die Groesse des Buttons von b1 wird mit&lt;br /&gt;
                                                 // der Methode setPreferredSize(), die in JButton&lt;br /&gt;
                                                 // definiert wurde, veraendert&lt;br /&gt;
    b3.setPreferredSize(new Dimension(160, 90)); // Andere Instanzen von Buttons bleiben davon&lt;br /&gt;
                                                 // unberührt und koennen ebenfalls mit der gleichen&lt;br /&gt;
                                                 // Methode eine andere Groesse erhaltem&lt;br /&gt;
    &lt;br /&gt;
    b1.setBackground(Color.red);                 // Auch hier wieder:&lt;br /&gt;
    b3.setBackground(Color.green);               // zwei verschiedene Buttons, die mit Hilfe der&lt;br /&gt;
                                                 // gleichen Methode setBackground() eine andere&lt;br /&gt;
                                                 // Hintergrundfarbe erhalten.&lt;br /&gt;
    &lt;br /&gt;
    f.add(p);&lt;br /&gt;
    f.pack();&lt;br /&gt;
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    f.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Verwirrungen um static / non-static ==&lt;br /&gt;
&lt;br /&gt;
So unterschiedlich statische und nicht-statische Methoden sind, so kommt es doch bei Anfängern zu Verwirrungen, da es manchmal so aussieht, als täten beide genau dasselbe:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:61em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
import javax.swing.border.*;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
public class MyProgram {&lt;br /&gt;
&lt;br /&gt;
  public static int myStaticVar=0;&lt;br /&gt;
  &lt;br /&gt;
  public int myNonStaticVar=0;&lt;br /&gt;
  &lt;br /&gt;
  public static void myStaticMethod() {&lt;br /&gt;
    myStaticVar *= 7;    // ist das gleiche wie&lt;br /&gt;
                         // myStaticVar = myStaticVar * 7;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  public void myNonStaticMethod() {&lt;br /&gt;
    myNonStaticVar *= 13;  // ist das gleiche wie&lt;br /&gt;
                           // myNonStaticVar = myNonStaticVar * 13;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public MyProgram() {&lt;br /&gt;
    myStaticVar = 6;&lt;br /&gt;
    myNonStaticVar = 5;&lt;br /&gt;
    &lt;br /&gt;
    System.out.println(myStaticVar);&lt;br /&gt;
    System.out.println(myNonStaticVar);&lt;br /&gt;
    &lt;br /&gt;
    myStaticMethod();&lt;br /&gt;
    myNonStaticMethod();&lt;br /&gt;
&lt;br /&gt;
    System.out.println(myStaticVar);&lt;br /&gt;
    System.out.println(myNonStaticVar);&lt;br /&gt;
&lt;br /&gt;
    myStaticMethod();&lt;br /&gt;
    myNonStaticMethod();&lt;br /&gt;
    &lt;br /&gt;
    System.out.println(myStaticVar);&lt;br /&gt;
    System.out.println(myNonStaticVar);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    new MyProgram();  // aehnlich wie&lt;br /&gt;
                      // MyProgram mp = new MyProgram();&lt;br /&gt;
                      // bloß, dass in diesem Fall nur der Konstruktor aufgerufen&lt;br /&gt;
                      // wird. Jedoch nicht eine Instanz zur weiteren verwendung in&lt;br /&gt;
                      // main() erhalten bleibt.&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Augenscheinlich gibt es zwischen der statischen Methode und Variable und der nicht-statischen Methode und Variable keinen Unterschied.&lt;br /&gt;
&lt;br /&gt;
Das liegt aber daran, weil man bei statischen Methoden den Klassennamen der Einfachheit halber weglassen kann und bei nicht-statischen Methoden das &#039;&#039;this&#039;&#039;.&lt;br /&gt;
Ausgeschrieben sieht das Programm folgendermaßen aus:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:61em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
import javax.swing.border.*;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
public class MyProgram {&lt;br /&gt;
&lt;br /&gt;
  public static int myStaticVar=0;&lt;br /&gt;
  &lt;br /&gt;
  public int myNonStaticVar=0;&lt;br /&gt;
  &lt;br /&gt;
  public static void myStaticMethod() {&lt;br /&gt;
    myStaticVar *= 7;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  public void myNonStaticMethod() {&lt;br /&gt;
    myNonStaticVar *= 13;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public MyProgram() {&lt;br /&gt;
    MyProgram.myStaticVar = 6;&lt;br /&gt;
    this.myNonStaticVar = 5;&lt;br /&gt;
    &lt;br /&gt;
    System.out.println(MyProgram.myStaticVar);&lt;br /&gt;
    System.out.println(this.myNonStaticVar);&lt;br /&gt;
    &lt;br /&gt;
    MyProgram.myStaticMethod();&lt;br /&gt;
    this.myNonStaticMethod();&lt;br /&gt;
&lt;br /&gt;
    System.out.println(MyProgram.myStaticVar);&lt;br /&gt;
    System.out.println(this.myNonStaticVar);&lt;br /&gt;
&lt;br /&gt;
    MyProgram.myStaticMethod();&lt;br /&gt;
    this.myNonStaticMethod();&lt;br /&gt;
    &lt;br /&gt;
    System.out.println(MyProgram.myStaticVar);&lt;br /&gt;
    System.out.println(this.myNonStaticVar);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    new MyProgram();&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Noch deutlicher wird der Unterschied, wenn man von außen auf die Instanz zugreift:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:61em&amp;quot;|&amp;lt;code=java&amp;gt;import javax.swing.*;&lt;br /&gt;
import javax.swing.border.*;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
public class MyProgram {&lt;br /&gt;
&lt;br /&gt;
  public static int myStaticVar=0;&lt;br /&gt;
  &lt;br /&gt;
  public int myNonStaticVar=0;&lt;br /&gt;
  &lt;br /&gt;
  public static void myStaticMethod() {&lt;br /&gt;
    myStaticVar *= 7;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  public void myNonStaticMethod() {&lt;br /&gt;
    myNonStaticVar *= 13;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public MyProgram() {&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    MyProgram mp1 = new MyProgram();&lt;br /&gt;
    MyProgram mp2 = new MyProgram();&lt;br /&gt;
 &lt;br /&gt;
    MyProgram.myStaticVar = 6;&lt;br /&gt;
    mp1.myNonStaticVar = 5;&lt;br /&gt;
    mp2.myNonStaticVar = 8;&lt;br /&gt;
    &lt;br /&gt;
    System.out.println( MyProgram.myStaticVar );&lt;br /&gt;
    System.out.println( mp1.myNonStaticVar );&lt;br /&gt;
    System.out.println( mp2.myNonStaticVar );&lt;br /&gt;
    &lt;br /&gt;
    MyProgram.myStaticMethod();&lt;br /&gt;
    mp1.myNonStaticMethod();&lt;br /&gt;
 &lt;br /&gt;
    System.out.println( MyProgram.myStaticVar );&lt;br /&gt;
    System.out.println( mp1.myNonStaticVar );&lt;br /&gt;
    System.out.println( mp2.myNonStaticVar );&lt;br /&gt;
    &lt;br /&gt;
    mp2.myNonStaticMethod();&lt;br /&gt;
    mp2.myNonStaticMethod();&lt;br /&gt;
    mp2.myNonStaticMethod();&lt;br /&gt;
    mp2.myNonStaticMethod();&lt;br /&gt;
&lt;br /&gt;
    System.out.println( MyProgram.myStaticVar );&lt;br /&gt;
    System.out.println( mp1.myNonStaticVar );&lt;br /&gt;
    System.out.println( mp2.myNonStaticVar );&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier sieht man noch mal, dass statische Methoden und Variablen für alle Instanzen und auch statische Methoden wie main() gelten, während nicht-statische Methoden nur für eine bestimmte Instanz ihre Gültigkeit haben.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Besonderheiten von statischen Methoden ==&lt;br /&gt;
&lt;br /&gt;
Am Anfang haben wir statische Methoden als äquivalent zu Funktionen in C und anderen nicht-objektorientierten Sprachen kennengelernt.&lt;br /&gt;
Um den Unterschied zwischen statischen und nicht-statischen Methoden zu verstehen, ist es auch für den Anfang ganz sinnvoll es so zu erklären.&lt;br /&gt;
Aber in der objektorientierten Sprache Java, gibt es dann doch einige Zusätze, die es in C z.B. nicht gibt.&lt;br /&gt;
&lt;br /&gt;
Statische Methoden lassen sich genauso wie nicht-statische Methoden ableiten:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;public class BaseClass {&lt;br /&gt;
&lt;br /&gt;
  public static void printFirstText() {&lt;br /&gt;
    System.out.println(&amp;quot;Dieses ist ein Text in BaseClass&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  public static void printSecondText() {&lt;br /&gt;
    System.out.println(&amp;quot;Und noch ein Text in BaseClass&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code=java&amp;gt;public class ExternalClass extends BaseClass{&lt;br /&gt;
&lt;br /&gt;
  public static void printSecondText() {&lt;br /&gt;
    System.out.println(&amp;quot;Ein Text in ExternalClass&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|style=&amp;quot;width:1em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;public class MyProgram {&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
     BaseClass.printFirstText();       // normaler Aufruf&lt;br /&gt;
     BaseClass.printSecondText();      // normaler Aufruf    &lt;br /&gt;
     ExternalClass.printFirstText();   // Methode ist von BaseClass abgeleitet&lt;br /&gt;
     ExternalClass.printSecondText();  // Methode, die die von BaseClass&lt;br /&gt;
                                       // ueberschrieben hat&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Es gibt etwas ähnliches wie einen Konstruktor für statische Methoden:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;public class ExternalClass {&lt;br /&gt;
&lt;br /&gt;
  public static void myStaticMethod() {&lt;br /&gt;
    System.out.println(&amp;quot;die statische Methode wurde aufgerufen.&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  public static void myOtherStaticMethod() {&lt;br /&gt;
    System.out.println(&amp;quot;eine weitere Methode wurde aufgerufen.&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  static {&lt;br /&gt;
    System.out.println(&amp;quot;Es wurde zum erstem Mal statisch auf diese Klasse zugegriffen.&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/code=java&amp;gt;&lt;br /&gt;
|style=&amp;quot;width:1em&amp;quot;|&lt;br /&gt;
|style=&amp;quot;width:30em&amp;quot;|&amp;lt;code=java&amp;gt;public class MyProgram {&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
     System.out.println(&lt;br /&gt;
       &amp;quot;Noch ist kein Zugriff auf ExternalCLass erfolgt.&amp;quot;);&lt;br /&gt;
     ExternalClass.myStaticMethod();&lt;br /&gt;
     ExternalClass.myOtherStaticMethod();&lt;br /&gt;
     ExternalClass.myStaticMethod();&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;/code=java&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Diese Möglichkeit wird insbesondere eingesetzt, wenn man statischen Variablen direkt am Anfang bestimmte Werte zuweisen möchte.&lt;br /&gt;
So kann es sein, daß der Anfangswert der Variablen erst berechnet werden muß. Oder es handelt sich um eine Liste, die sich nur mit Hilfe einer [[Schleife]] befüllen lässt.&lt;br /&gt;
&lt;br /&gt;
{{Fragen stellen}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Java]]&lt;br /&gt;
[[Kategorie:Java Grundlagen]]&lt;/div&gt;</summary>
		<author><name>Cronut</name></author>
	</entry>
</feed>