Unterschied zwischen Instanzmethoden, Klassenmethoden und normalen Methoden, sowie Variablen, Instanzvariablen, Klassenvariablen und Konstruktoren?Java?

2 Antworten

Fangen wir mit Methoden an. Es gibt grob zwei verschiedene Methodentypen: Statische und Objektmethoden. Statische methoden kannst du aufrufen, ohne eine Instanz der Klasse zu haben. Objektmethoden kannst du nur auf eine entsprechende Instanz der Klasse anwenden.

public class A {
private int count=0;
public static String test = "TEST";

public A (int count){
this.count=count;
}

public static int foo() {
return 13;
}

public int bar(){
return count ++;
}

---------------------------------
A a = new A(); // count ist 0, da default kontruktor
A b = new A(3); // count ist 3;
A.foo(); // gibt jedesmal 13 zurück
b.bar(); // gibt 3 zurück und erhöht count auf 4

Konstruktoren sind spezielle statische Methoden. Sie werden aufgerufen, wenn eine neue Instanz der Klasse erstellt wird. Jede Klasse hat einen default Konstruktor ohne Parameter, der automatisch erstellt wird und aufgerufen wird, wenn du eine neue Instanz ohne Parameter erstellst. Du kannst auch eigene Konstruktoren erstellen.

Du kannst den Konstruktor auch private machen, dann kann keine Instanz erstellt werden. Sinnvoll wenn du mit einer festen Instanz arbeitest:

public class B {

private B instance = new B();

private B() {
}

public B getInstance(){
return instance;
}

Variablen ist grob dasselbe. Statische sind in allen Instanzen identisch und existieren auch ohne eine Instanz. Klassenvariablen (wie count) existieren nur in der einen Klasse.

"Normale" variablen und methoden wären dann denke ich variablen und methoden, die nicht in einer Klasse liegen. Das ist aber eher ungewöhnlich, da gibt es mwn nur die main methode als möglicher Ort.

Woher ich das weiß:Berufserfahrung – Dipl.-Informatiker mit 10 Jahren Berufserfahrung

Ich kenne Java nicht aber cpp.

Objekte werden dort in Klassen angelegt, die Variablen definieren dein Objekt, ein Objekt 'Kreis' hätte z.B. die Variable 'radius' mit einem Gleichkommawert.

Variablen kannst als private oder public definieren, auf ein private Wert hast du nur innerhalb der Klasse Zugriff, auf public Werte lässt sich auch übergreifend zugreifen.

Jede Klasse verfügt über Konstruktoren und ggf. Destruktoren, damit wird ein Objekt beim Anlegen initiiert bzw. zerstört. Je nachdem wie du ein Objekt anlegen willst musst du kein Konstruktor definieren, der Kompiler wird automatisch einen Standardkonstruktor aufrufen, gleiches gilt für den Destruktor. Hast du allerdings komplexe Klassenbeziehungen mit Vererbung u.ä. oder virtuelle Klassen ist es schon sinnvoll deine eigenen Konstruktoren und Destruktoren zu schreiben.

Eine Methode ist etwas das deine Werte verändert, ausgibt oder berechnet. Z.B. getter und setter für deine Variablen, die Methode 'Kreis' könnte auch sehr gut die Methode 'Flächenberechnung' haben (die Klasse bräuchte dann noch die Variable 'Fläche').

Mit Instanz ist die jeweilige Laufzeit gemeint, eine static Variable oder Methode bezieht sich auf die komplette Instanz, nicht nur eine spezifische Klasse, z.B. du schreibst ein Programm mit dem du verschiedene Objekte verschiedener Klassen anlegst, wenn du wissen willst wie viele Objekte du angelegt hast kannst du das nicht klassenintern rausfinden, du kannst aber eine static Variable als Zähler mitlaufen lassen.

Am besten ist, du programmierst einfach mal, es ist wenig sinnvoll sich die Definition für irgendetwas reinzuziehen ohne den leisesten Hauch einer Ahnung zu haben worum es überhaupt geht. Was z.B. eine static Variable genau ist kannst du immer noch googlen aber jede objektorientierte Sprache nutzt Klassen. Falls du also schon jemals ein Programm geschrieben hättest müsstest du wissen was ein Klasse ist. Was eine Variable ist ebenso. Wenn du jemals zwei Zeilen Code geschrieben hättest, weißt du was eine Variable ist und zwar völlig egal in welcher Sprache...