Methoden Static ?

H

Hubble

Gast
Hallo,

Hab zur Übung einen kleinen Code, wobei ich noch nicht ganz verstehe wie das abläuft.

Im unteren Code müsste die variable [c]name[/c] über [c]getName()[/c] ausgegeben werden, wobei nur null rauskommt?

Nütz static um den code sicherer und stabiler zu gestalten?

Java:
abstract class Methoden {
 
 private Methoden() {}

 public static void los() {
  Methode2.los2();
 }
 
 public static void main(String[] args) {
  Methoden.los();
  System.out.println(Methode2.getName());
  System.out.println(Methode2.getName()); 
 }
}

abstract class Methode2 {

 static String name;

 private Methode2() {}

 public static void setName(String n) {
  String name = n; 
 }

 public static String getName() {
  return name;
 }

 public static void los2() {
  Methode3.los3(); 
 }
}

abstract class Methode3 {

 private Methode3() {}

 public static void los3() {
  Methode2.setName("Hi");
  Methode2.setName("Hu");
 }
}

Danke
H.
 

Michael...

Top Contributor
Nütz static um den code sicherer und stabiler zu gestalten?
Nein, für einen "produktiven" Code wären hier viel zu viel
Code:
static
Methoden und Variablen im Spiel. Im Idealfall gibt es nur das static der main-Methode.
Was soll das für eine Übung sein? Wie man alle Vorteile einer Objektorientierten Sprache zu nichte macht ;-)? Warum sind alle Klassen abstract?

Es wird übrigens null ausgegeben, weil die statische Variable name der Klasse Methode2 nie initialisiert wird.
 
H

Hubble

Gast
Eine Übung ja, aber vielleicht nicht sehr produktiv, wenn man das umsetzen würde. Abgesehen von der Kapselung, als einfaches Beispiel.

Mit "abstract" war es ein Versuch das man keine Objekte erzeugen müsste, somit nichts auf dem Heap liegt. Wobei ich mir nicht sicher bin ob nur ein "private" Konstruktur, dies auch unterbinden würde.
Also das man eine Methode nicht per Referenz-Objekt aufrufen muss.

Habe in setName() ein println gesetzt, woei dort die Namen ausgegeben werden.
Wie sollte ich die Variable initialisieren?

Danke fürs Verständnis
 
H

Hubble

Gast
Danke,

Aber habe noch Fragen. Wenn man get() set() Methoden benutzt, wird die Variable auch über beide Methoden angesprochen.
Nur in diesem Beispiel sind lokale Variable und normale Variable unabhängig voneinander, liegt vielleicht am static. Da nur eine pro Instanz existiert und nicht eine Kopie pro Instanz.

Funktioniert in demfall get() nicht mit static, oder wie könnte man es ändern?

Über static, wollte ich etwas mehr erfahren. Das was ich gelesen habe bezog sich nur auf die public static main(String[] args) Methode. Und auf die Math. Klasse, vom System. Wobei ich mir das nicht richtig vorstellen konnte.
 

Michael...

Top Contributor
Aber habe noch Fragen. Wenn man get() set() Methoden benutzt, wird die Variable auch über beide Methoden angesprochen.
Falsch (zumindest falsch formuliert). Über die get und set Methoden kann man auf die Instanz/Klassenvariablen zugreifen (in Deinem Fall ist der Code "falsch")
Nur in diesem Beispiel sind lokale Variable und normale Variable unabhängig voneinander, liegt vielleicht am static. Da nur eine pro Instanz existiert und nicht eine Kopie pro Instanz.
Falsch, eine lokale Variable hat nie etwas mit einer "globalen" Instanz- oder Klassenvariable zu tun - völlig unabhängig von static oder nicht static.
Funktioniert in demfall get() nicht mit static, oder wie könnte man es ändern?
In dem Du in der Methode keine lokale Variable deklarierst sondern den Wert der statischen (=Klassen) Variable zuweist.
[EDIT]Wobei das m.M. keine "korrekte" ggf. recht gefährliche Manipulation einer Klassenvariablen ist.[/EDIT]
Über static, wollte ich etwas mehr erfahren. Das was ich gelesen habe bezog sich nur auf die public static main(String[] args) Methode. Und auf die Math. Klasse, vom System. Wobei ich mir das nicht richtig vorstellen konnte.
Statische Attribute und Methoden existieren ohne ein Objekt einer Klasse. Das bedeutet u.a., dass der Zugriff direkt über die Klasse möglich ist - es wird keine Instanz dieser Klasse benötigt. Gleichzeitig gilt ein statisches Attribut für alle Instanzen einer Klasse, d.h. alle Objekte die auf Basis dieser Klasse erzeugt werden teilen sich die eine Variable. Wird diese Varialbe innerhalb der Objekte verwendet, wirkt sich deren Änderung also auf alle Objekte aus.
Bei Java handelt es sich um eine Objektorientierte Sprache. Mit jedem static schränkt man die Vorteile dieser Objektorientierung weiter ein und man sollte damit so sparsam wie möglich umgehen. In 99% aller Fälle reicht ein einziges static (nämlich das der main Methode). Aber es gibt durch aus berechtigte Verwendungen. bestes Bsp. die Klasse Math
 
Zuletzt bearbeitet:
H

Hubble

Gast
Ok, vielen Dank, ist jetzt um einiges Verständlicher.

Falsch (zumindest falsch formuliert). Über die get und set Methoden kann man auf die Instanz/Klassenvariablen zugreifen (in Deinem Fall ist der Code "falsch")

Bedeutet, dass get() und set() , die gleiche Klassenvariable, über die Methoden-Parameter nutzt?
Wobei das im obigen Code nicht so aussieht.

Java:
String name; // Klassenvariable

String getName() {
 return name; // name = Klassenvariable als Rückgabewert? 
                   //  z.B. wenn man getName() ausgibt, kommt name(über Klassenvariable) vom set() ?
}

String void setName(String n) {
 String name = n; // name = Klassenvariable, oder lokale Variable?
}
[/QUOTE]

Wie meinst du das mit Klassenvariable-Manipulation. Auch wenn es nicht empfehlenswert ist, wie könnte man das ändern damit die Klassenvariable mit der lokalen Variablen die gleiche ist?

Danke
H.
 

Michael...

Top Contributor
Bedeutet, dass get() und set() , die gleiche Klassenvariable, über die Methoden-Parameter nutzt?
Wobei das im obigen Code nicht so aussieht.
Die Frage verstehe ich nicht. In Deinem Code wird wie gesagt eine neue lokale (nur in der Methode gültige) Variabele mit gleichem Namen
Code:
name
deklariert/erzeugt.
Wie meinst du das mit Klassenvariable-Manipulation. Auch wenn es nicht empfehlenswert ist, wie könnte man das ändern damit die Klassenvariable mit der lokalen Variablen die gleiche ist?
Einfach keine lokale Variable deklarieren, sondern den Wert der Klassenvariablen zuweisen.

Java:
String name;            //Instanzvariable
static String anotherName;  //statische bzw. Klassenvariable

public static void setStaticName(String name) {
    String lokalName = name; // nutzt nichts, da die Variable nur innerhalb der Methode gültig ist
    anotherName = name;
}

// Instanzmethode zum Ändern eines Instanzattributes
public void setInstanzName(String name) {
    this.name = name;
}
 
H

Hubble

Gast
Die Frage verstehe ich nicht. In Deinem Code wird wie gesagt eine neue lokale (nur in der Methode gültige) Variabele mit gleichem Namen
Code:
name
deklariert/erzeugt.

Einfach keine lokale Variable deklarieren, sondern den Wert der Klassenvariablen zuweisen.

Java:
String name;            //Instanzvariable
static String anotherName;  //statische bzw. Klassenvariable

public static void setStaticName(String name) {
    String lokalName = name; // nutzt nichts, da die Variable nur innerhalb der Methode gültig ist
    anotherName = name;
}

// Instanzmethode zum Ändern eines Instanzattributes
public void setInstanzName(String name) {
    this.name = name;
}

Irgendwie verstehe ich dies noch nicht so.
In einer normalen Kapselung(set() / get()), wird eine Klassenvariable deklariert, die von beiden, get() und set() genutzt wird. Also wenn ich z.B. einen String mittles set() setze, kann ich den gleichen String mittels get(), ausgeben, wobei die Variable einmal deklariert wurde.

Aber im static code, ist dem nicht so, weil "null" ausgegeben wird?

Danke
H.
 

Michael...

Top Contributor
Aber im static code, ist dem nicht so, weil "null" ausgegeben wird?
Nein, dem ist nicht so. In Deinem Code ist es so weil Du fälschlicherweise eine lokale Variable deklarierst.
[JAVA=22]public static void setName(String n) {
String name = n;
}[/code]
Hier wird eine neue lokale Variable names
Code:
name
deklariert. Was Du möchstest ist aber
[JAVA=22]public static void setName(String n) {
name = n;
}[/code]
Hat wie zuvor schon gesagt garnichts mit static zu tun.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
O Welcher Object-Lock-Pool bei static Variablen? Java Basics - Anfänger-Themen 3
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
D neue public static class variablen in array speichern? Java Basics - Anfänger-Themen 6
A Static variablen --- Anwendungsbereich Java Basics - Anfänger-Themen 11
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
K Erste Schritte Zugiff ohne static Java Basics - Anfänger-Themen 5
X Static char Problem Java Basics - Anfänger-Themen 11
H static final vs. final static Java Basics - Anfänger-Themen 3
K Variablen Cannot make a static reference to the non-static field time Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben