Static variablen --- Anwendungsbereich

AffekindProd

Mitglied
Hallo,

ich beschäftige mich seid ein paar Tagen mit Java, und habe davor bereits C++ (an)gelernt .

Gerade als ich meinte die Logik verstanden zu haben passierte mir doch folgender Fehler:

eine Variable falsch deklariert.

import java.util.Scanner;


public class Main {

static int zahl1;
static int zahl2;
static int auswahl;



public Main() {



Scanner eingabe = new Scanner(System.in);

System.out.println("Zahl 1: ");

zahl1 = eingabe.nextInt();

System.out.println("Zahl 2: ");

zahl2 = eingabe.nextInt();


System.out.println("1-Addition");
System.out.println("2-Multiplikation");
System.out.println("3-Division");
System.out.println("4-Subtraktion");

auswahl = eingabe.nextInt();


eingabe.close();

}


public static void main(String[] args) {

new Main();

if(auswahl == 1){


System.out.println("Ergebnis: "+ Addition.Addition(zahl1, zahl2) );
}
else if (auswahl == 2) {


System.out.println("Ergebnis: "+ Multiplikation.Multiplikation(zahl1, zahl2));

}


}




}



Dieses simple Programm erlaubt dem Benutzer 2 Zahlen einzugeben und mit einer dritten Eingabe eine Rechenmethode zu wählen, welche in einer anderen Klasse ausgelagert ist und mittels Addition.Addition(zahl1,zahl2) abgerufen wird (zb)

nun zu meiner Frage:

bevor der Code so stand wie er nun da steht hatte ich die Variablen zahl1 und zahl 2 an selbiger Stelle
folgendermassen deklariert:

int zahl1,zahl2;

dann bekam ich später beim aufrufen der Methode Addition aus der Klasse Addition den Fehler dass Zahl1 eine static variable sein müsse....allerdings verstehe ich nicht wieso, sie ist doch sogar in der selben Klasse, in übergeordneten Codeblöcken definiert, wieso brauche ich hier das static?

Ich glaube diese Problematik verstehen zu müssen, um meine Grundlagen doch so zu festigen wie ich sie für den weigern Verlauf brauche.

Danke schonmal für eure Antwort, ich hoffe ich kann in absehbarer Zeit auch den blutigen Anfängern helfen ;)
 

jgh

Top Contributor
dann bekam ich später beim aufrufen der Methode Addition aus der Klasse Addition den Fehler dass Zahl1 eine static variable sein müss

weil du deine Variablen zahl1 und zahl2 im Kontext der main-Methode aufrufst und die ist: .... tatsächlich static :D
So kann das funktionieren:
Java:
import java.util.Scanner;

public class Main {

	 int zahl1;
	 int zahl2;
	 int auswahl;

	public Main() {

		Scanner eingabe = new Scanner(System.in);
		System.out.println("Zahl 1: ");
		zahl1 = eingabe.nextInt();
		System.out.println("Zahl 2: ");
		zahl2 = eingabe.nextInt();
		System.out.println("1-Addition");
		System.out.println("2-Multiplikation");
		System.out.println("3-Division");
		System.out.println("4-Subtraktion");
		auswahl = eingabe.nextInt();
		if (auswahl == 1) {

			System.out.println("Ergebnis: " + Addition.Addition(zahl1, zahl2));
		} else if (auswahl == 2) {
			System.out.println("Ergebnis: "
					+ Multiplikation.Multiplikation(zahl1, zahl2));
		}
		eingabe.close();

	}

	public static void main(String[] args) {

		new Main();

		

	}

}
 

AffekindProd

Mitglied
Perfekt! Jetzt hab ichs verstanden :D so ein dummer Fehler aber auch ;)

Nächste Problem :

ich habe die Rechenprozeduren Addition und Multiplikation in eine jeweils eigene Klassen Datei ausgelagert.

Bsp:
Multiplikation.java
[Java]

public class Multiplikation {



public static int Multiplikation(int nr1,int nr2) {


return nr1*nr2;

}
}


[/Java]

Warum muss es hier auch static deklariert sein? Ich rufe es doch in der Main Klasse auf die nicht static ist.

Und wie würde ich die beiden Methoden kombiniert in main aufrufen?
also quasi diesen Code:
[Java]System.out.println("Ergebnis: " + Addition.Addition(zahl1, zahl2));[/Java]



Ich habe jetzt verstanden wie ich innerhalb der main ein Objekt der Main Klasse erstelle, innerhalb welcher (Main) die variablen alsreine int deklariert werden können ohne den static Zusatz.

aber wie das nun mit mehreren sich austauschenden Objekten/ Methoden ist verstehe ich nicht,
bzw warum es in den ausgelagerten Klassen Multiplikation etc doch wieder static sein muss, obwohl es innerhalb von Main aufgerufen wird.



Vielen Dank bereits für eure schnelle Antwort, beitrag oben bearbeite ich noch schnell ;)
 
Zuletzt bearbeitet:

Gucky

Top Contributor
Nachdem du etwas beigetragen hast, ist für kurze Zeit und bis jemand noch einen Beitrag geschrieben hat, unten rechts an deinem Beitrag ein Button Bearbeiten. Löschen ist nicht möglich. Das können nur die Admins und Moderatoren.

Non static Member referieren immer auf ein bestimmtes Objekt. Wenn du Methoden aufrufen willst, ohne ein Objekt zu erstellen, müssen diese static sein.
Das ist anders, als in C++, wo du NAMESPACE::KLASSE::METHODE(PARAMETER); Aufrufe machen kannst.
 

AffekindProd

Mitglied
Non static Member referieren immer auf ein bestimmtes Objekt. Wenn du Methoden aufrufen willst, ohne ein Objekt zu erstellen, müssen diese static sein.

okay zum Objekt, das ich mit [Java] new Main(), [/Java] erstelle, was ist das genau?
Es führt ja offensichtlich die Methoden in der Main klasse aus. Würde ich aber anstatt des Constructers
[Java]public Main() { ...}[/Java] eine Methode draus machen würde ich diese (wenn Main class static ist) in main aufrufen können?

Was genau ist dieses Objekt, hängt es mit dem Constructer zusammen?
Was kann man damit noch machen ausser erstellen und einbinden? Kann ich es auch in einer Variablen speichern(benennen) und verändern bzw auch als Parameter irgendwo wieder weiter verschachteln?
Was ist ein Constructer?

https://www.youtube.com/watch?v=ogB41fV7Xdw&index=9&list=PLWms45O3n--7DYLHbhYqLjsRDMRsNH2I3

min 2 - 3
hier wird ein wenig erklärt aber so ganz dahinter steig ich noch nicht

aber so wie es für mich scheint ist ein constructor eine Methode die kein static hat und somit nur innerhalb der klasse geht?
aber man kann sie durch ein neues Objekt aufrufen. auch wenn diese Methode nichts zurückgibt macht sie und gibt sie aus was im constructor ist

verwirrend :S
 
Zuletzt bearbeitet:

Gucky

Top Contributor
Wenn du eine Methode aufrufen willst, die nicht static ist, brauchst du zwingend ein Objekt der Klasse. Zum Beispiel new Test().toString() funktioniert, da new Test() den Konstruktor von Test aufruft und ein Objekt vom Typ Test zurückgibt.

Man kann mit ihm alles machen, was man auch mit einem Objekt, welches in C++ durch einen Zeiger referenziert wird bis auf die Veränderung des Objektes mit *. Also du kannst keine neuen Objekte an denselben Ort schreiben und wenn

Ein Konstruktor in Java ist dasselbe, wie ein Konstruktor in C++. Nur der Aufruf ist ein bisschen anders (Test test; erzeugt kein Objekt sondern eine leere Variable vom Typ test).
 

AffekindProd

Mitglied
Okay :) ich glaube das muss erstmal reichen und ich versuche mich mal weiter im coden ;)
Danke für die Hilfe soweit! Ich denke klarer wird es durch weiteres ausprobieren, ansonsten komm ich wieder auf euch zurück :)
 

AffekindProd

Mitglied
und schneller als geahnt xD

new Test().toString()

also das würde eine Methode innerhalb des constructers von Test aufrufen?
und wenn ich eine Methode innerhalb der test klasse aber ausserhalb des test constructers aufrufen wollte dann würde ich welchen code dazu brauchen? :)

theoretisch müsste diese Methode in der klasse dann static sein und würde ohne einen constructer mit
Test.TestAusserhalb();
aufgerufen werden oder?

Test für die Test Klasse, Testausserhalb für die Methode (static) innerhalb des Klasse

ist der Gedankengang richtig?
 
Zuletzt bearbeitet:

Gucky

Top Contributor
In Java gibt es keine lokalen Methoden, sprich Methoden in einer Methode.

new Test().toString() erzeugt erst ein neues Objekt vom Typ Test und gibt dieses zurück. Also der Ausdruck new Test() bekommt den Wert eines Objekts von Test. Genauso, wie getFünf() + 5 in der Regel 10 ergibt.
Danach wird auf dieses zurückgegebene Objekt toString() aufgerufen. Und da das instanziierte Objekt nicht mehr referenziert wird, kommt der Garbagr Collector und zerstört es.


Klassenname.methodenName() für static Methoden und instanz.methodenName() für non-static. So ist es richtig ;)



Das Ganze steht aber auch in jedem halbwegs guten Java Buch. Guck dir mal Java ist auch eine Insel an.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
O Welcher Object-Lock-Pool bei static Variablen? Java Basics - Anfänger-Themen 3
D neue public static class variablen in array speichern? Java Basics - Anfänger-Themen 6
M Class will alle Variablen als static haben Java Basics - Anfänger-Themen 11
A Was ist performanter für Konstanten, enum oder static variablen Java Basics - Anfänger-Themen 5
H static Variablen, Vererbung Java Basics - Anfänger-Themen 1
D static Methoden/Variablen Java Basics - Anfänger-Themen 11
A Instance methods should not write to "static" fields Java Basics - Anfänger-Themen 4
berserkerdq2 Habe eine Klasse, welche public ist, diese hat eine public Methode, die nicht static ist. Wenn ich nun versuche aufzurufen Probleme? Java Basics - Anfänger-Themen 8
viktor1 Methoden Methode schreiben static void readText (String filename) {...} zu WordHistogramSample.java Java Basics - Anfänger-Themen 13
M static ArrayList in non-static Java Basics - Anfänger-Themen 12
B Static vs non static und Probleme daraus Java Basics - Anfänger-Themen 13
S Methoden 2 non-static Methoden, trotzdem Fehler "non static method can not be referenced from a static context" Java Basics - Anfänger-Themen 9
R UML-Bild (Erkennung ob static o. nicht) Java Basics - Anfänger-Themen 18
R Schulaufgabe, Bruache Hilfe mit non-static Methoden Java Basics - Anfänger-Themen 2
B Static Attribute in einer Klasse, wie geht das? :O Java Basics - Anfänger-Themen 19
NaZuRe Geld(Wert) von der public static void main in die public static void Blackjack Java Basics - Anfänger-Themen 2
H Static Java Basics - Anfänger-Themen 5
K Ausgaben auf der Konsole (static Varible) Java Basics - Anfänger-Themen 9
S public static boolean Java Basics - Anfänger-Themen 4
Vamecruft Compiler-Fehler public static void zu static String ändern Java Basics - Anfänger-Themen 2
L non-static Fehler Java Basics - Anfänger-Themen 16
S Klassenmethode ohne static Java Basics - Anfänger-Themen 2
M (Sehr großes Problem) Listen als static in anderen Klassen verwendet Java Basics - Anfänger-Themen 12
J Fehlermeldung unklar. non-static variable player0 cannot be referenced from a static context Java Basics - Anfänger-Themen 4
D Methoden Scannervariablen in static Methoden Java Basics - Anfänger-Themen 5
P non-static variable cannot be referenced from a static context Java Basics - Anfänger-Themen 6
V the static method should be accessed is a static way Java Basics - Anfänger-Themen 6
NormanPatrickBenner static non-static Java Basics - Anfänger-Themen 82
N Erste Schritte "non-static method" oder "XYZ can not be resolved" Java Basics - Anfänger-Themen 21
B Email versenden, muss Methode static sein? Java Basics - Anfänger-Themen 7
R static in der Methode Java Basics - Anfänger-Themen 2
E Problem mit static Methode Java Basics - Anfänger-Themen 4
H Vererbung Static Scanner Objekt verwenden - von StdIn in einer importierten Klasse lesen Java Basics - Anfänger-Themen 10
M Cannot make a static reference to the non-static method Java Basics - Anfänger-Themen 10
I Abstrakte Klasse - static Attribute deklarieren Java Basics - Anfänger-Themen 14
C Methoden Unterschied zwichen public int, public static int und public static void Java Basics - Anfänger-Themen 2
J Frage zu: public static void main (String[]args) Java Basics - Anfänger-Themen 1
T Datentypen enum static Chaos (blutiger anfänger) Java Basics - Anfänger-Themen 5
D Das leidige Thema static.... Java Basics - Anfänger-Themen 15
Aprendiendo Interpreter-Fehler "non-static variable this cannot be referenced from a static context" Java Basics - Anfänger-Themen 2
T Problem mit static Java Basics - Anfänger-Themen 6
T static String Variable wird nur beim ersten aufruf durch eine Funktion geändert. Java Basics - Anfänger-Themen 16
S Vererbung Zugriff auf Methode funktioniert nicht (static/non-static) Java Basics - Anfänger-Themen 3
snipesss Was kann 'static'? Java Basics - Anfänger-Themen 4
H Variablen error: non-static variable cannot be referenced from a static context Java Basics - Anfänger-Themen 4
M public static int in ActionListener Java Basics - Anfänger-Themen 6
J static verschachtelte Klassen und innere Klassen Java Basics - Anfänger-Themen 1
H Nicht Static Funktion ohne Objekt aufrufen? Java Basics - Anfänger-Themen 6
E Objekte und static Java Basics - Anfänger-Themen 2
K Methoden Methoden in Methoden -> static oder nicht? Java Basics - Anfänger-Themen 7
D Erklärung static boolean Java Basics - Anfänger-Themen 6
L Was genau macht "public static void" ? Java Basics - Anfänger-Themen 12
U Erste Schritte cannot be referenced from a static context Java Basics - Anfänger-Themen 1
B ja ja schon wieder einer mit einer public static void main(string[] args) Frage... Java Basics - Anfänger-Themen 8
J Java: static bei Vererbung Java Basics - Anfänger-Themen 5
O Zu viel static im Projekt Java Basics - Anfänger-Themen 9
F Static final Klasse Java Basics - Anfänger-Themen 0
N static und Objekt kombiniert?!? Java Basics - Anfänger-Themen 3
O Wann nutzt man static? Java Basics - Anfänger-Themen 19
B Klassen Eigene "non static" Klasse in Main verwenden! Java Basics - Anfänger-Themen 12
B Erste Schritte Wie komme ich aus Static raus?!! Java Basics - Anfänger-Themen 4
V Static Methods Java Basics - Anfänger-Themen 5
W Compiler-Fehler "non-static method cannot be referenced"-Problem Java Basics - Anfänger-Themen 6
S OOP Klasse mit static-Eigenschaften - HashMap füllen Java Basics - Anfänger-Themen 6
3 OOP static class in einer Klasse Java Basics - Anfänger-Themen 6
B static individuell "vererben"? Java Basics - Anfänger-Themen 8
B Erkennen, wann static oder nicht? Java Basics - Anfänger-Themen 7
T Static Fehler Java Basics - Anfänger-Themen 1
R public static void Rückgabe Java Basics - Anfänger-Themen 5
P Compiler-Fehler public static void main, Grundloses Problem Java Basics - Anfänger-Themen 4
A Cannot make a static reference to the non-static field Java Basics - Anfänger-Themen 6
W Variablen Automatisch static? Java Basics - Anfänger-Themen 3
O Warum muss ich static? Java Basics - Anfänger-Themen 6
O Static Java Basics - Anfänger-Themen 15
E non-static method und static context Java Basics - Anfänger-Themen 15
B non static interface Methode Java Basics - Anfänger-Themen 16
J KeyListener,MouseListener,MouseMotionListener und static Java Basics - Anfänger-Themen 7
S Static void Methode Java Basics - Anfänger-Themen 12
Q Unterschied zwischen static und keinem Modifier Java Basics - Anfänger-Themen 15
O Main-Methode static modifier umgehen Java Basics - Anfänger-Themen 10
J Variablen non-static variable Java Basics - Anfänger-Themen 2
P Erste Schritte public oder static oder wie? Java Basics - Anfänger-Themen 7
J static - Methoden Java Basics - Anfänger-Themen 22
X Erste Schritte Methode ohne Static Java Basics - Anfänger-Themen 4
B Classpath static block - Verwirrung Java Basics - Anfänger-Themen 2
S Methoden Warum ist sleep static? Java Basics - Anfänger-Themen 9
K static, non-static Krise Java Basics - Anfänger-Themen 4
R Schlüsselworte static Methoden und Imports Java Basics - Anfänger-Themen 10
M Methoden "Non-static method xy cannot be referenced from a static context" Java Basics - Anfänger-Themen 20
J Probleme mit static generische Klasse Java Basics - Anfänger-Themen 6
S Aufruf Einer Methode aus einer anderen Klasse - Static Fehler Java Basics - Anfänger-Themen 4
W Methodenaufruf innerhalb einer Klasse - static vs. this Java Basics - Anfänger-Themen 3
K Objekt erstellen - error: non-static variable this cannot be referenced from a static context Java Basics - Anfänger-Themen 17
H non-static method cannot be referenced from a static context Java Basics - Anfänger-Themen 2
Y Gebrauch von static Java Basics - Anfänger-Themen 29
L Cannot make a static reference to the non-static method Java Basics - Anfänger-Themen 6
T getClass() im static Kontext Java Basics - Anfänger-Themen 12
S Frage zu public static Java Basics - Anfänger-Themen 29
M Problem mit Static Method Java Basics - Anfänger-Themen 8
H Methoden Static ? Java Basics - Anfänger-Themen 10

Ähnliche Java Themen

Neue Themen


Oben