Unterschied zwischen statische und nicht statische Methoden?

Jack159

Bekanntes Mitglied
Hallo,

Ich hab mir bereits mehrere Erklärungen zu dem Thema angeschaut, verstehe es abber immer noch nicht so wirklich.

Gerade in Eclipse hab ich 2 mal die identische Methode erstellt, jedoch einmal mit static und einmal ohne.
Mir wird kein Fehler angezeigt, was mich nur noch mehr verwirrt. Es scheint also völlig egal ob static oder nicht?! ???:L

Java:
public class Test {
	
	
	public void hoch(int x) {
		x++;
	}
	
	public static void hoch2(int x) {
		x++;
	}
	
	public static void main(String[] args) {
		
		
		
	}

}
 

HimBromBeere

Top Contributor
Static heißt soviel wie, du brauchst keine Instanz der Klasse erstellen, um die Funktion nutzen zu können, in deinem Fall geht also
Java:
Test.hoch2(3);
aber auch
Java:
t = new Test();
t.hoch(3);
wobei du für letzteres eine Instanz brauchst (hier t).
 

qowaz

Mitglied
Java:
public class Test {
    
    
    public void hoch(int x) {
        x++;
    }
    
    public static void hoch2(int x) {
        x++;
    }
    
    public static void main(String[] args) {
        int i = 1;

        hoch(i); // geht nicht, da Methode nicht statisch und noch keine Referenz des Objekts erzeugt wurde

        hoch2(i); // geht, da Methode statisch
 
    }
 
}
 

HimBromBeere

Top Contributor
Stell dir vor, du hast eine Klasse Mensch geschrieben. Diese Klasse kennt die Methode
Code:
laufen()
. Nun wäre es ja quatsch, wenn diese Methode statisch wäre, da die Methide ja dafür gedacht ist, einen ganz bestimmten Menschen (Und nicht die Menschheit im allgemeinen) zu bewegen.
Nun erstellst du mit Mensch m = new Mensch() einen neuen Mensch.
Anscließend rufst du
Code:
m.laufen()
auf, um diesen EINEN Menschen "zum Laufen zu bewegen":D
 

Jack159

Bekanntes Mitglied
Stell dir vor, du hast eine Klasse Mensch geschrieben. Diese Klasse kennt die Methode
Code:
laufen()
. Nun wäre es ja quatsch, wenn diese Methode statisch wäre, da die Methide ja dafür gedacht ist, einen ganz bestimmten Menschen (Und nicht die Menschheit im allgemeinen) zu bewegen.
Nun erstellst du mit Mensch m = new Mensch() einen neuen Mensch.
Anscließend rufst du
Code:
m.laufen()
auf, um diesen EINEN Menschen "zum Laufen zu bewegen":D


Und wenn wir nur einen einzigen Menschen in unserem Programm haben?
 

HimBromBeere

Top Contributor
Weil die Methode main ja auch statisch ist, also zur Klasse test gehört und nicht zu einer speziellen Instanz von Test. Jetzt stell dir mal vor, deine Klasse test hätte eine Instanzvariable int k, die du in der main irgendwie verwenden möchtest. Woher soll denn nun aber der Compiler wissen, von welcher Instanz er das k nehmen soll (bei 7mrd. Menschen auf der Welt...). Daher kannst du in einem statischen Kontext nur statische Variablen und Methoden nutzen...

EDIT:
Und wenn wir nur einen einzigen Menschen in unserem Programm haben?
Kommt drauf an, ob du auf Instanzvariabken zugreifen musst (z.B. die Geschwindigkeit dieses Menschen) oder ob du die statisch definiert hast... generell würde es gehen
 
Zuletzt bearbeitet:

pro2

Bekanntes Mitglied
Und wenn wir nur einen einzigen Menschen in unserem Programm haben?

Generell arbeitet man eher wenig mit statischen Methoden. Die objektorientierte Programmierung (hey, fällt was auf?) arbeitet nämlich hauptsächlich mit Objekten. Statische Methoden sind meistens Methoden zur Berechnung gewisser Dinge oder z. B. zur Umrechnung. So sind Math.random(); oder Integer.parseInt(); statische Methoden, da es ja unsinnig wäre, sich immer dafür Obejtek zu erstellen.
 

Jack159

Bekanntes Mitglied
Also kann man vereinfacht sagen:
Wenn man eine Methode aufruft, die nicht im Bezug eines Objektes steht bzw. nichts mit Objekten/Objektvariablen am Hut hat, dann muss die Methode static sein?!
 
Die vorherige Antwort trifft es schon ganz gut. Ich habe ein weiteres Beispiel, das sich der vorhandenen Java-Funktionalität bedient, woran man es vlt. gut versteht:

Die Klasse
Code:
Integer
hat sowohl statische, als auch nicht statische Methoden.

Die statischen können direkt an der Klasse aufgerufen werden, zum Beispiel
Code:
Integer.valueOf()
:

Java:
String s = "1";
Integer i = Integer.valueOf(s);

Die nicht-statischen Methoden können nur an einem ganz bestimmten Integer ausgeführt werden, brauchen also einen konkreten Bezug. Zum Beispiel
Code:
Integer.compareTo()
:

Java:
Integer i = 1;
int result = i.compareTo(2);

Hilft das beim Verständnis ein wenig? :)

Nice to know:
Hat eine bestimmte Klasse NUR statische Methoden, die also keine bestimmte Instanz von sich (ein Objekt) benötigen, heißen sie Factory. Factories haben meist viele hilfreiche Funktionen, die aber allgemeiner Natur sind. Man muss das Objekt, was bearbeitet werden soll, also als Parameter erst hinein geben und führt die Methode nicht direkt auf jenem Objekt aus.
 

geqoo

Bekanntes Mitglied
Nice to know:
Hat eine bestimmte Klasse NUR statische Methoden, die also keine bestimmte Instanz von sich (ein Objekt) benötigen, heißen sie Factory. Factories haben meist viele hilfreiche Funktionen, die aber allgemeiner Natur sind. Man muss das Objekt, was bearbeitet werden soll, also als Parameter erst hinein geben und führt die Methode nicht direkt auf jenem Objekt aus.

Als Ergänzung dazu als "nice to know" gibt es neben der Factory auch noch den Singleton.
Dieser muss zwar im Gegensatz zur Factory nicht nur aus statischen Methoden bestehen, tut es aber meistens. Das Singleton ist ein Entwurfsmuster, womit man nur eine einzige Instanz einer Klasse zulässt.

Interessant ist so etwas z.B. für Logger. Die werden nur einmal instanziert (dürfen auch nur 1x instanziert werden) und sind dann i.d.R. über statische Methoden verwendbar, da du in den Logger ja nichts reinbasteln sollst, sondern ihn nur verwenden sollst.
 
Zuletzt bearbeitet:
Nicht ganz. Hätte ein Singleton NUR statische Methoden, könnte man genauso gut eine Factory nehmen. ;-) Singleton heißt, es darf nur einmal existieren. Aber dann hat es mit Sicherheit Methoden, die nicht statisch sind, also diese eine Instanz für ihre Funktion benötigen. Sonst könnte man sich den Singleton-Aufwand sparen.

Zur Erläuterung: Singleton heißt Einzelstück und hat normalerweise eine statische Methode
Code:
getInstace()
, die genau diese eine Instanz zurückliefert ODER sie anlegt, sollte es noch keine geben.
 
Zuletzt bearbeitet:

koma

Mitglied
So viel Halbwissen/Blödsinn auf einem Haufen ist ja echt nicht zum Aushalten.

Nice to know:
Hat eine bestimmte Klasse NUR statische Methoden, die also keine bestimmte Instanz von sich (ein Objekt) benötigen, heißen sie Factory. Factories haben meist viele hilfreiche Funktionen, die aber allgemeiner Natur sind. Man muss das Objekt, was bearbeitet werden soll, also als Parameter erst hinein geben und führt die Methode nicht direkt auf jenem Objekt aus.

Das ist ja mal ein kompletter Blödsinn. Wo bitte ist java.lang.Math eine Factory, was erzeugt denn bitte diese Factory. Waere ja nicht so als koennte man den Sinn einer Factory durch uebersetzen verstehen. Wenn man schon wissen will was eine Factory genau ist koennte man vorher vl googlen ueber Factory-Pattern. Wenn man für Klassen die nur statische Methoden aufweisen einen Namen geben moechte, dann sollte passt vl am ehesten Utiltiy-Klasse aber selbst das ist nur kontext abhaengig erlaubt.

Als Ergänzung dazu als "nice to know" gibt es neben der Factory auch noch den Singleton.
Dieser muss zwar im Gegensatz zur Factory nicht nur aus statischen Methoden bestehen, tut es aber meistens. Das Singleton ist ein Entwurfsmuster, womit man nur eine einzige Instanz einer Klasse zulässt.

Interessant ist so etwas z.B. für Logger. Die werden nur einmal instanziert (dürfen auch nur 1x instanziert werden) und sind dann i.d.R. über statische Methoden verwendbar, da du in den Logger ja nichts reinbasteln sollst, sondern ihn nur verwenden sollst.
Gerade Logger sind nicht die besten Bsp. für Singeltons, da man oft nicht nur einen Logger hat.
Was sonst noch so an dieser Aussage falsch ist hat eh Mr Mitbbewohner erklärt

Nicht ganz. Hätte ein Singleton NUR statische Methoden, könnte man genauso gut eine Factory nehmen. ;-) Singleton heißt, es darf nur einmal existieren. Aber dann hat es mit Sicherheit Methoden, die nicht statisch sind, also diese eine Instanz für ihre Funktion benötigen. Sonst könnte man sich den Singleton-Aufwand sparen.

Zur Erläuterung: Singleton heißt Einzelstück und hat normalerweise eine statische Methode
Code:
getInstace()
, die genau diese eine Instanz zurückliefert ODER sie anlegt, sollte es noch keine geben.

Also die Qulität des Forums hat ja echt nachgelassen. Schade
 
Zuletzt bearbeitet:
So viel Halbwissen/Blödsinn auf einem Haufen ist ja echt nicht zum Aushalten.
...
Also die Qulität des Forums hat ja echt nachgelassen. Schade

Da gebe ich dir Recht. Statt sachlich zu verbessern, motzt du lieber rum. :-(

Recht gebe ich dir hier: Es dürfte nicht Factory heißen, weil der Begriff belegt ist. Umgangssprachlich nutzen den aber irgendwie ziemlich viele für eine rein statische Utility-Klasse.

Nach nochmaligem Durchlesen unserer und deines Posts komme ich zu dem Schluss, dass mein einziger Fehler die Bezeichnung "Factory" war. Und den Irrtum mit der Verwendung des Singleton habe ich schon versucht aufzuklären. Also kein Grund zur Aufregung.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Unterschied zwischen Denkweisen Java Basics - Anfänger-Themen 13
Ras Unterschied zwischen parser xml and api xml Java Basics - Anfänger-Themen 7
X Was ist der Unterschied zwischen materialisierten und nichtmaterialisierten Attributen einer Klasse? Java Basics - Anfänger-Themen 1
jhCDtGVjcZGcfzug Was ist der Unterschied zwischen diesen Quellcodes? Java Basics - Anfänger-Themen 3
Y Unterschied zwischen WindowBuilder und herkömmlichen erstellen des GUI´s? Java Basics - Anfänger-Themen 9
U Worin besteht der Unterschied zwischen call by reference und call by value? Java Basics - Anfänger-Themen 14
E Unterschied zwischen new und import Java Basics - Anfänger-Themen 5
B Unterschied zwischen (List<T> a) und (T[] a) Java Basics - Anfänger-Themen 7
Aprendiendo Unterschied zwischen Referenzvariable und Instanzvariable. Java Basics - Anfänger-Themen 2
N Unterschied zwischen Checked und Unchecked Exceptions Java Basics - Anfänger-Themen 12
schoenosrockos Unterschied zwischen Objekten und vererbungen Java Basics - Anfänger-Themen 1
J Variablen Unterschied zwischen lokalen-, Instanz-, Klassenvariablen Java Basics - Anfänger-Themen 6
L Unterschied zwischen Klassen - und Instanzvarbiablen Java Basics - Anfänger-Themen 1
M Unterschied zwischen Classpath eines Eclipse Projektes und dem CLASSPATH? Java Basics - Anfänger-Themen 3
D Unterschied zwischen double und Double Java Basics - Anfänger-Themen 4
Q Unterschied zwischen static und keinem Modifier Java Basics - Anfänger-Themen 15
K Unterschied zwischen Jar, war und ear Dateien Java Basics - Anfänger-Themen 3
T Unterschied zwischen Integrationstest und JUnit test? Java Basics - Anfänger-Themen 12
K Unterschied zwischen break und continue in einer Schleife Java Basics - Anfänger-Themen 14
A Exakte Unterschied zwischen Java EE und Java SE? Java Basics - Anfänger-Themen 4
O Java unterschied zwischen Interface und Interface_Referenzen!!?? Java Basics - Anfänger-Themen 7
J unterschied zwischen awt und swing Java Basics - Anfänger-Themen 6
B Unterschied zwischen String & char Array? Java Basics - Anfänger-Themen 5
B Was ist der unterschied zwischen Singleton und Strategy? Java Basics - Anfänger-Themen 6
B Variablen: unterschied zwischen Klassen und Instanzvariable Java Basics - Anfänger-Themen 2
H Unterschied zwischen 2 Date in Sekunden am einfachsten? Java Basics - Anfänger-Themen 5
tanja Der Unterschied Zwischen Arrays in Java und ADA Java Basics - Anfänger-Themen 11
ModellbahnerTT Unterschied zwischen zwei Frame close Varianten Java Basics - Anfänger-Themen 3
V Unterschied zwischen J2EE und JEE ?? Java Basics - Anfänger-Themen 1
N Was ist der Unterschied zwischen ArrayList und Vector? Java Basics - Anfänger-Themen 3
A Unterschied zwischen Checked und unchecked Exception Java Basics - Anfänger-Themen 3
C Unterschied zwischen Polymorphie und Typcasting Java Basics - Anfänger-Themen 10
G Unterschied zwischen den Datenstrukturen Java Basics - Anfänger-Themen 2
M Unterschied zwischen . Compiler und JIT-Compiler,Hotspot-VM Java Basics - Anfänger-Themen 2
C Unterschied zwischen ArrayList und Vector Java Basics - Anfänger-Themen 2
I_Oscuridad Unterschied zwischen Objektorientiert und prozedural ? Java Basics - Anfänger-Themen 8
G Was ist der unterschied zwischen return und ? Java Basics - Anfänger-Themen 3
G Unterschied zwischen Java 2 bis 6 Java Basics - Anfänger-Themen 12
G Unterschied zwischen SwingWorker und "normalem" Th Java Basics - Anfänger-Themen 3
J Unterschied zwischen 2 Grafik Methoden Java Basics - Anfänger-Themen 2
G unterschied zwischen in.read() und in.read(byte [] b, int. Java Basics - Anfänger-Themen 3
G Unterschied zwischen SQL Timestamp und Java Java Basics - Anfänger-Themen 2
A Unterschied zwischen HashMap und Hashtable Java Basics - Anfänger-Themen 20
G Unterschied zwischen Assoziation, Aggregation u. Komposition Java Basics - Anfänger-Themen 7
G Unterschied zwischen & und && Java Basics - Anfänger-Themen 1
G Unterschied zwischen Ant und Maven Java Basics - Anfänger-Themen 9
K Unterschied zwischen Color.white und Color.WHITE? Java Basics - Anfänger-Themen 4
A Unterschied zwischen String & Stringbuffer! Java Basics - Anfänger-Themen 14
O Unterschied zwischen static und public Java Basics - Anfänger-Themen 2
G Was ist der Unterschied zwischen length und length()? Java Basics - Anfänger-Themen 7
N Unterschied zwischen Beans finden Java Basics - Anfänger-Themen 2
L Unterschied zwischen Objekten, Arrays und Strings Java Basics - Anfänger-Themen 2
G Unterschied zwischen Integer und int in java Java Basics - Anfänger-Themen 8
C Unterschied zwischen, Applet, Java und JavaScript Java Basics - Anfänger-Themen 3
K gibt es einen unterschied zwischen .JAVA und .java ? Java Basics - Anfänger-Themen 4
ven000m Unterschied zwischen: ADT & generischer Programmierung Java Basics - Anfänger-Themen 2
H Unterschied zwischen Stack und Array Java Basics - Anfänger-Themen 3
M Unterschied zwischen J2SE 5.0 Update x und J2SE 1.4.x Java Basics - Anfänger-Themen 4
C Unterschied zwischen equals und == ? Java Basics - Anfänger-Themen 6
D Unterschied zwischen Referenz auf Objekt/Instanz von Objekt Java Basics - Anfänger-Themen 9
G verstehe den unterschied zwischen equals und == nicht Java Basics - Anfänger-Themen 3
P Unterschied zwischen Interface und Vererbung und Sinn? Java Basics - Anfänger-Themen 5
M Unterschied zwischen J2SE, JSEE und JDK Java Basics - Anfänger-Themen 8
R Unterschied zwischen a++ und ++a Java Basics - Anfänger-Themen 9
G Unterschied zwischen homogenen und heterogenen Liste Java Basics - Anfänger-Themen 9
D Unterschied zwischen Ziffer und Zahl Java Basics - Anfänger-Themen 9
R Unterschied zwischen Integer und int Java Basics - Anfänger-Themen 6
B Was ist der Unterschied zwischen .java- und .class Dateien Java Basics - Anfänger-Themen 3
MoxMorris Integer.MAX_VALUE und Double.MAX_VALUE Unterschied Java Basics - Anfänger-Themen 3
R Java boolean Unterschied " == " und " = " Java Basics - Anfänger-Themen 3
berserkerdq2 Größter unterschied von extends thread und implements runnable? Java Basics - Anfänger-Themen 2
P Unterschied Installation von zipped JDK vs Installer-JDK (auf Windows)? Java Basics - Anfänger-Themen 2
M Unterschied Integer.toString(x) und x.toString() Java Basics - Anfänger-Themen 22
H Arrays: Größten Zahlen Unterschied herausfinden Java Basics - Anfänger-Themen 20
K Unterschied Information Hiding und Kapselung? Java Basics - Anfänger-Themen 2
G Methoden wo ist der Unterschied?? Java Basics - Anfänger-Themen 11
D Unterschied charAt() substr() Java Basics - Anfänger-Themen 3
D Unterschied == und equals in Arrays Java Basics - Anfänger-Themen 2
H Unterschied Konstruktor und Klassenname x = new Klassenname; Java Basics - Anfänger-Themen 3
H .jar unterschied .class Java Basics - Anfänger-Themen 3
O Unterschied Arrays, Listen, Mengen Java Basics - Anfänger-Themen 24
K Unterschied for-Schleife Java Basics - Anfänger-Themen 14
M Schlüsselworte Unterschied: String.matches und Pattern.compile Java Basics - Anfänger-Themen 2
G Unterschied Instanz- Klassenvariable Java Basics - Anfänger-Themen 11
C Methoden Unterschied zwichen public int, public static int und public static void Java Basics - Anfänger-Themen 2
H Unterschied BufferedReader und BufferedInputStream Java Basics - Anfänger-Themen 4
N Unterschied von Post- und Preinkrement Java Basics - Anfänger-Themen 3
T Unterschied dynamischer und statischer Laufzeittyp Java Basics - Anfänger-Themen 1
D Unterschied Date - Calendar Java Basics - Anfänger-Themen 1
J Warum ist das ein Unterschied (Integer / int) Java Basics - Anfänger-Themen 2
S Erste Schritte Unterschied "if" und "else if" Java Basics - Anfänger-Themen 27
F Erste Schritte Unterschied: Array "leer" / "null" Java Basics - Anfänger-Themen 3
V Unterschied x++ und x=x++ Java Basics - Anfänger-Themen 6
O Unterschied Baum <-> Automat Java Basics - Anfänger-Themen 2
A Klassen Unterschied Warteschlange, Stapel und Liste Java Basics - Anfänger-Themen 3
M Wo liegt der Unterschied? Deklaration Klasse oder Konstruktur Java Basics - Anfänger-Themen 3
S Unterschied print() und println() Java Basics - Anfänger-Themen 3
S Unterschied .jar Datei ausführen und junit Testfall... Java Basics - Anfänger-Themen 3
S Datentypen Unterschied elementare und zusammengesetzte/strukturierte Datentypen Java Basics - Anfänger-Themen 5
S Unterschied Ausführung in IDE <-> Befehlszeile Java Basics - Anfänger-Themen 0

Ähnliche Java Themen

Neue Themen


Oben