Ist diese Aussage korrekt? (nur das fettgedruckte)
Wenn man eine nichtstatische Methode hat (die man in der z.B. public class erstellt), dann muss man eine Instanz der Methode erzeugen (in der main class).
Um eine Instanz zu erzeugen, legen wir eine Variable mit dem Typ der Klasse an.
Das Erzeugen der Instanz erfolgt mit dem Operator "new", dem Namen der Klasse und den () Klammern.
Der Zugriff auf die Methoden erfolgt durch den Bezeichner der Variablen für die Instanz, einen trennenden Punkt und den Namen der Methoden.
Einen direkten Zugriff von aussen auf die Instanzvariablen sollten Sie nach Möglichkeit vermeiden.
=
Klassenmethoden gehören nicht zu einer Instanz, sondern zur Klasse an sich. Klassenmethoden lassen sich deshalb auch ohne Instanz aufrufen.
In Klassenmethoden können Sie nur auf Klassenvariablen bzw. lokale Variablen zugreifen.
Wenn man eine nichtstatische Methode hat (die man in der z.B. public class erstellt), dann muss man eine Instanz der Methode erzeugen (in der main class).
Die Aussage ist streng gesehen falsch:
- man muss die Methode nicht benutzen (dann stellt sich natürlich die Frage nach dem Sinn der Deklaration)
- es sollte wohl eher "Instanz der Klasse" heissen
- ob es die main class sein muss, hängt auch von den Modifizierern der Methode ab
D.h. man muss Instanzen von Klassen (nicht main Klassen, sondern public class) erzeugen, um mit in der Klasse angelegten Methoden, in der main Klasse arbeiten zu können, um sie dort aufrufen zu können über die Instanz der Klasse?
Nicht ganz korrekt. Eine Methode wird nicht instanziert. Aber Objekte werden instantiert, das ist richtig.
Beispiel: Du kannst keine Methode gehUndBringMirKaffee() erzeugen, das ist Unsinn.
Du kannst aber ein Objekt der Klasse Butler instantieren, und auf diesem die Methode anwenden, und das Butlerobjekt geht und bringt dir Kaffee.
Nicht ganz korrekt. Eine Methode wird nicht instanziert. Aber Objekte werden instantiert, das ist richtig.
Beispiel: Du kannst keine Methode gehUndBringMirKaffee() erzeugen, das ist Unsinn.
Du kannst aber ein Objekt der Klasse Butler instantieren, und auf diesem die Methode anwenden, und das Butlerobjekt geht und bringt dir Kaffee.
Sind das nur Variablen? Was ist mit primitiven Datentypen? Das sind auch Variablen.
Ok:
Eine Variable ist einfach nur ein Stück Speicher, auf dem du schreiben und lesen kannst. Mehr nicht. Speicher wird nicht instantiert (allenfalls wird Speicher alloziiert, d.h. beim Betriebssystem angefragt und von diesem evt. freigegeben, aber damit hast du in Java normalerweise nichts zu tun).
In Java ist es so: Du selber kommst an ein Objekt eigentlich gar nicht heran. Das, was in der Objektvariable steht, ist lediglich eine Referenz auf das Objekt, aber nicht das Objekt selber.
publicclassClassWithInt{privateint i;publicClassWithInt(int i){this.i = i;}publicintgetI(){return i;}}publicstaticvoidmain(String args[]){ClassWithInt someObject;ClassWithInt seccondReference;//Instanciate some objects
someObject =newClassWithInt(7);//Copy the object reference to another object variable
seccondReference = someObject;//What does the new object variable do?System.out.println(seccondReference.getI());//Another object variable, but same object}
Edit:
Ansonsten ist dieses Thema auch sehr gut in "Java von Kopf bis Fuß" aufgearbeitet. Ich kann dir nur raten, es mal zu lesen.
publicclassClassWithInt{privateint i;publicClassWithInt(int i){this.i = i;}publicintgetI(){return i;}}publicstaticvoidmain(String args[]){ClassWithInt someObject;ClassWithInt seccondReference;//Instanciate some objects
someObject =newClassWithInt(7);//Copy the object reference to another object variable
seccondReference = someObject;//What does the new object variable do?System.out.println(seccondReference.getI());//Another object variable, but same object}
Edit:
Ansonsten ist dieses Thema auch sehr gut in "Java von Kopf bis Fuß" aufgearbeitet. Ich kann dir nur raten, es mal zu lesen.
Die Instanzen der Klassen ermöglichen uns nur den Zugriff auf die Methoden, oder?
Wann genau sollten wir Instanzen von Klassen erzeugen? Nur wenn wir auf die Methoden zugreifen wollen?
Eine Methode wird nicht instanziert. Aber Objekte werden instantiert, das ist richtig.
Beispiel: Du kannst keine Methode gehUndBringMirKaffee() erzeugen, das ist Unsinn.
Du kannst aber ein Objekt der Klasse Butler instantieren, und auf diesem die Methode anwenden, und das Butlerobjekt geht und bringt dir Kaffee.
und wo soll ich dann die Methode als Klassenmethode = static methode deklarieren? In der main class (Hauptklasse) oder public class?
bitte guck dir den thread: 2dimensionales array, Lagerverwaltung an.
Dort ist eine aufgabe, ich und temi arebeiten an der Lösung der Aufgabe. es geht um Methoden und Instanziierung.
denkst du wir sollten dort die Methoden als statisch deklarieren?
Naja, du hast eine Frage gestellt - und eine Antwort erhalten. Das konkrete Problem ist was anderes, und wenn es so einfach wäre dann wäre temi schon von allein draufgekommen. Der kennt sich besser aus als ich. (Hier kennt sich jeder besser mit Java aus als ich, ich hab vom Programmieren eher wenig Ahnung, ich bin aus einer anderen Profession.)
Aber versuche mal das hier laufen zu lassen und zu verstehen, was static eigentlich macht:
Java:
publicclassClassWithStaticInteger{privatestaticint i;publicClassWithStaticInteger(int i){this.i = i;}publicvoidsetStaticInteger(int i){this.i = i;}publicintgetStaticInteger(){return i;}}publicstaticvoidmain(String args[]){ClassWithStaticInteger firstObject;ClassWithStaticInteger anotherObject;//Instanciate the first object.
firstObject =newClassWithStaticInteger(3);//Now instanciate another object. The static variable will be overwritten.
anotherObject =newClassWithStaticInteger(7);//And now, look this. Remember, firstObject was instanciated with 3System.out.println("Statisches Integer: "+ firstObject.getStaticInteger());}
Nachtrag: Du kannst das static ja mal rausnehmen und nochmal durchlaufen lassen.
Die Aussage ist streng gesehen falsch:
- man muss die Methode nicht benutzen (dann stellt sich natürlich die Frage nach dem Sinn der Deklaration)
- es sollte wohl eher "Instanz der Klasse" heissen
- ob es die main class sein muss, hängt auch von den Modifizierern der Methode ab
Das Schlüsselwort static sollte nur verwendet werden, wenn es die Anwendung erfordert. Versuche erst mal nur mit einem static auszukommen und zwar bei public static void main().