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.
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?
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.
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.
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
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;// KlassenvariableStringgetName(){return name;// name = Klassenvariable als Rückgabewert? // z.B. wenn man getName() ausgibt, kommt name(über Klassenvariable) vom set() ?}StringvoidsetName(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?
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;//InstanzvariablestaticString anotherName;//statische bzw. KlassenvariablepublicstaticvoidsetStaticName(String name){String lokalName = name;// nutzt nichts, da die Variable nur innerhalb der Methode gültig ist
anotherName = name;}// Instanzmethode zum Ändern eines InstanzattributespublicvoidsetInstanzName(String name){this.name = name;}
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;//InstanzvariablestaticString anotherName;//statische bzw. KlassenvariablepublicstaticvoidsetStaticName(String name){String lokalName = name;// nutzt nichts, da die Variable nur innerhalb der Methode gültig ist
anotherName = name;}// Instanzmethode zum Ändern eines InstanzattributespublicvoidsetInstanzName(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?
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.