Variablen Getter-Setter vs Public Variable?

Timori

Mitglied
Schönen guten Morgen ^^.

Man merkt ja, das in den Java Librarys (also die schon vorhandenen) ziemlich oft mit .get...().get...() etc Variablen geholt werden bzw mit z.B. jtextfield.setText() etwas gesetzt.

Meine Frage ist nun, warum nutzt man anscheinend generell lieber die Getter-Setter anstatt die Variable einfach public zu setzen?

Ein Beispiel: Hier wird der Public-Variable einfach direkt ein Wert zugewiesen
Code:
public static class Location
    {
        public double Xachse;
        public double Yachse;
    }

public static void main(String[] args) {
        Location location = new Location();
        location.Xachse = 20.5;
        location.Yachse = 10.1;
    }

zweites Beispiel: Hier ist die Variable tatsächlich nicht direkt aufrufbar. Setter und Getter verwalten diese
Code:
public static class Location {

        private double Xachse;
        private double Yachse;

        public double getX() {
            return Xachse;
        }

        public void setX(double value) {
            Xachse = value;
        }

        public double getY() {
            return Yachse;
        }

        public void setY(double value) {
            Yachse = value;
        }
    }

public static void main(String[] args) {
        Location location = new Location();
        location.setX(10);
        location.setY(20.112);
    }

Genauer: In welchen Fällen ist es Sinnvoll, Getter und Setter anstelle der Public-Variable zu verwenden?
Gibt es Vorteile/Nachteile? Wie sieht es mit der Performance aus? Ist die Getter/Setter Methode nicht Performance-lastig?
Vielleicht sogar irgendeine Sicherheitsmaßnahme?

Vielen Dank schon einmal Vorweg :)

Ich habe die Antwort bereits gefunden. Kann gerne gelöscht/geschlossen werden:
Es ist so, das zum überprüfen einer Variable z.B. Wert oder Eingabezulässigkeit, einfacher geprüft werden kann.

Tut mir leid, war wohl zu vorschnell :)
 
Zuletzt bearbeitet:

Saheeda

Top Contributor
@Timori
Könntest du das vielleicht nochmal anders formulieren?
Mir ist nämlich noch nicht so ganz klar, was es bringt, eine private Variable voll zugänglich zu machen, anstatt sie einfach auf public zu setzen.
 

Timori

Mitglied
Ich versuche es mal :)

Nehmen wir an, du möchtest eine Library (nicht ausführbare .jar) erstellen und diese deinen Freunden oder Klassenkameraden etc. weiter geben.

Im 1. Beispiel: Nochmal zur Referenz:
Code:
public static class Location
    {
        public double Xachse;
        public double Yachse;
    }

public static void main(String[] args) {
        Location location = new Location();
        location.Xachse = 20.5;
        location.Yachse = 10.1;
    }

können die Leute in den Variablen einfach reinschreiben was sie wollen, unabhängig davon, ob es ein double-Wert ist oder nicht oder in der IDE hieße es: Die Eingabe muss vom Typ Double sein.

Du hast hier nur die Möglichkeit die Eingabe abzufangen, BEVOR sie gesetzt wird.

Im Vergleich dazu Beispiel 2:
Code:
public static class Location {

        private double Xachse;
        private double Yachse;

        public double getX() {
            return Xachse;
        }

        public void setX(double value) {
            Xachse = value;
        }

        //... setY()... //
    }

public static void main(String[] args) {
        Location location = new Location();
        location.setX(10);
        location.setY(20.112);
    }

Vor "Xachse = value;" hast du noch die Chance, innerhalb der setX() Methode weitere Abfragen zu machen.
Nehmen wir eine Bool-Variable hinzu, die erlaubt, ob der Wert gesetzt werden darf. Etwa:
Code:
public static class Location {

        private double Xachse;
        private double Yachse;
        //neue Variable:
        boolean erlaubeSet = false;

        public double getX() {
            return Xachse;
        }

        public void setX(double value) {
            if(erlaubeSet == true)
            {
                Xachse = value;
            }
            else
            {
                //Sonst irgendwas tun, etwa 0 setzen:
                Xachse = 0;
            }
        }

       //... setY() ...
    }

Hier siehst du, das in der setX() Methode, abgefragt wird, ob die boolsche Variable "erlaubeSet" auf true gesetzt ist.

Dies ist z.B. dann sinnvoll, Wenn du eine GUI hast, in der der benutzer ALLE Felder ausfüllen muss, da es sonst zu falschen oder fehlerhaften Datensätzen (in einer Datenbank z.B.) kommen kann.

Oder, wenn du diese .jar deinen Freunden geben willst, das sie keine Fehlerabfragen machen müssen, weil du sie schon in der Klasse abgefangen hast.

Du könntest ja auch so etwas tun:
Code:
public static class Location {

        private double Xachse;
        private double Yachse;

        public double getX() {
            return Xachse;
        }

        public void setX(double value) {
            Xachse = value;
        }
        public void setX(String value)
        {
            double val = Double.parseDouble(value);
            setX(val);
        }
    }

public static void main(String[] args) {
        Location location = new Location();
        location.setX(10);
        location.setX("10.012");
    }

hier wird noch eine setX(String value) Methode erzeugt. Nun kann der Nutzer auch Strings einlesen.

Auf den Punkt:
public: die Variable sowie Typ ist fest definiert.
double dblVariable = "AAA" -> Fehler! "AAA" ist String und nicht Double! Du müsstest vorher als Nutzer der .Jar die Abfrage selbst machen.
get-set: Du hast die Möglichkeit, genauere Abfragen zu machen, um Fehler oder Programmfunktionalität nicht zu gefährden.
Der Nutzer kann diese Variable nun aufrufen (get), oder über eine von dir kontrollierte Methode, setzen.

Planst du, dein Programm in Zukunft unter die Leute zu bringen oder eine selbst erstellte Klasse, solltest du darauf achten, das so wenig public-Variablen wie möglich zugänglich sind(oder am besten keine).

Ich hoffe diese Erklärung hilft dir. Ich habe sie selber hier im Forum gefunden und nun so wiedergegeben, wie ich es verstanden habe.
Vielleicht können noch ein paar Stellen verbessert werden, aber ich denke ich habe den Unterschied gut erfasst :)
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
V public Variablen vs Getter + Setter Java Basics - Anfänger-Themen 4
T Getter/Setter - wie sieht ein Setter aus? Und wie nicht? Java Basics - Anfänger-Themen 34
W Getter/Setter Java Basics - Anfänger-Themen 4
KogoroMori21 Objektvariable anderer Klasse übernehmen, Getter/Setter Java Basics - Anfänger-Themen 11
T Verständnisfrage Objekt Getter Setter Java Basics - Anfänger-Themen 102
KogoroMori21 Getter und Setter Java Basics - Anfänger-Themen 5
S Klassen instanziieren und verwenden von Getter und Setter Java Basics - Anfänger-Themen 4
P Klasse hat keinen Zugriff auf getter/setter-Methoden eines Objektes Java Basics - Anfänger-Themen 9
V getter/setter Garage Java Basics - Anfänger-Themen 12
S getter, setter in abstrakter Klasse oder lieber Unterklassen Java Basics - Anfänger-Themen 4
topi Kapselung getter und setter Java Basics - Anfänger-Themen 5
D Setter/Getter für Instanzvariablen praktisch? Java Basics - Anfänger-Themen 19
S Getter/Setter - Variablenklasse ? Java Basics - Anfänger-Themen 5
S getter and setter Java Basics - Anfänger-Themen 12
L Getter und Setter Java Basics - Anfänger-Themen 2
M Generics getter und setter Methoden Java Basics - Anfänger-Themen 4
E Methoden Objekte in Methode aufrufen ohne getter und setter? Java Basics - Anfänger-Themen 1
L Klassen - Getter & Setter Methoden Java Basics - Anfänger-Themen 2
D Erste Schritte Java - Setter und Getter Java Basics - Anfänger-Themen 1
Z Getter/Setter NullPointer Exception Java Basics - Anfänger-Themen 6
K Klassen Setter/Getter Java Basics - Anfänger-Themen 3
F OOP Schleifen und Probleme mit Setter und Getter Java Basics - Anfänger-Themen 1
L Setter und Getter/Vererbung Java Basics - Anfänger-Themen 6
K Kapselung getter & setter Java Basics - Anfänger-Themen 11
J Frage zu Setter u. Getter Java Basics - Anfänger-Themen 7
Y Konstruktor - Setter/Getter Java Basics - Anfänger-Themen 3
N Klassen fragen zur getter und setter methode Java Basics - Anfänger-Themen 11
D Ab wann getter und setter Java Basics - Anfänger-Themen 2
K getter & setter Java Basics - Anfänger-Themen 6
C getter/setter Problem anscheinend Java Basics - Anfänger-Themen 13
G Erste Schritte Getter und Setter Java Basics - Anfänger-Themen 12
B Getter,Setter - Konstruktor überflüssig? Java Basics - Anfänger-Themen 26
N Sprite Methode (Getter, Setter, Konstruktor) Java Basics - Anfänger-Themen 9
S getter/setter aufrufen Java Basics - Anfänger-Themen 9
B Java getter/setter funktioniert nicht! Java Basics - Anfänger-Themen 7
X OOP Getter/Setter überschreiben den Wert ihrer Variablen nicht Java Basics - Anfänger-Themen 4
T Erste Schritte Verständnisfrage: Getter und Setter Methoden Java Basics - Anfänger-Themen 3
F Getter und Setter Java Basics - Anfänger-Themen 4
lulas[]args getter/setter umstellung Java Basics - Anfänger-Themen 6
B Klassen Getter-Setter vor neuem Klassenaufruf - wie? Java Basics - Anfänger-Themen 20
N OOP Getter, Setter und andere Probleme Java Basics - Anfänger-Themen 8
A OOP Getter und Setter Java Basics - Anfänger-Themen 18
L Unterschied Konstruktor / Getter Setter Java Basics - Anfänger-Themen 13
L Setter und Getter für Arrays? Java Basics - Anfänger-Themen 4
N boolean bei Setter und getter methoden Java Basics - Anfänger-Themen 21
J Getter und Setter auch intern benutzen - guter Stil? Java Basics - Anfänger-Themen 31
Houly Setter/Getter MEthoden testen Java Basics - Anfänger-Themen 4
P OOP Getter&Setter Methoden funktionieren nicht Java Basics - Anfänger-Themen 7
H Setter-und-Getter-Konvention Java Basics - Anfänger-Themen 8
V Reflection API - getter und setter Java Basics - Anfänger-Themen 7
-horn- EINE setter/getter klasse aus mehreren klassen befüllen Java Basics - Anfänger-Themen 13
C Getter/Setter Java Basics - Anfänger-Themen 61
H Frage zu getter und setter Java Basics - Anfänger-Themen 5
S Unbenutzte/überflüssige Getter/Setter herausfinden? Java Basics - Anfänger-Themen 2
M getter/setter bei JTextField ? Java Basics - Anfänger-Themen 21
G warum Setter/Getter Java Basics - Anfänger-Themen 25
S In einer Liste auf getter und setter zugreifen Java Basics - Anfänger-Themen 6
Say Class scope und Instance scope und Getter nur selbstgeschrieben Methoden Java Basics - Anfänger-Themen 11
W Unterschiede bei Zugriff auf Objekt und Klassenvariablen über einen Getter? Java Basics - Anfänger-Themen 2
O Instanzattribut per Getter Methode zuweisbar, warum? Java Basics - Anfänger-Themen 8
P Klassenübergreifende Ausgabe mittels "getter" nicht möglich Java Basics - Anfänger-Themen 21
J Array über Getter erlangen Java Basics - Anfänger-Themen 34
M Getter einer PriorityQueue Java Basics - Anfänger-Themen 1
KopaCoda Getter mehrfach aufrufen -> ist das guter code? Java Basics - Anfänger-Themen 3
V Getter Methode Java Basics - Anfänger-Themen 38
T Extrahiertes Objekt durch Getter bekommen Java Basics - Anfänger-Themen 2
D Kapselung final Variablen mit Getter? Java Basics - Anfänger-Themen 2
A getter Java Basics - Anfänger-Themen 3
T Getter für Array Java Basics - Anfänger-Themen 4
J-Gallus Ein Getter bekommt eine anderen Type als er Return soll Java Basics - Anfänger-Themen 9
K Public Attribute oder getter - funktioniert leider beides hier nicht Java Basics - Anfänger-Themen 5
P getter Java Basics - Anfänger-Themen 1
M Getter Problematik mit ItemListener Java Basics - Anfänger-Themen 17
S Array und Getter-Methode Java Basics - Anfänger-Themen 2
Avarion Getter von Super-Klasse funktioniert nicht Java Basics - Anfänger-Themen 10
J Variable per Getter holen - wie ? Java Basics - Anfänger-Themen 2
D Getter Mehtode Unsicher Java Basics - Anfänger-Themen 6
M Problem mit getter, liefert nur alte Werte Java Basics - Anfänger-Themen 6
El_Lobo Methoden Zu viele Getter- und Settermethoden - geht das einfacher? Java Basics - Anfänger-Themen 3
G Generics kein Zugriff auf getter eines Objekts Java Basics - Anfänger-Themen 4
M OOP Aufruf vieler Getter Methoden abkürzen? Java Basics - Anfänger-Themen 7
MU5T4NG Getter und Setten bei GUI-Erstellung Java Basics - Anfänger-Themen 13
B Variablen keine Arrayübergabe für getter im Interface Java Basics - Anfänger-Themen 8
J int Wert mit getter holen und in String parsen Java Basics - Anfänger-Themen 5
O Universeller GETTER Java Basics - Anfänger-Themen 5
J Die Getter Methode Java Basics - Anfänger-Themen 6
E [Erledigt] Schöner Code zur Reduktion von unzähligen Getter-Methoden Java Basics - Anfänger-Themen 2
F 2 dimensionales Array getter Methode Java Basics - Anfänger-Themen 3
K Getter Java Basics - Anfänger-Themen 6
S JTextField in anderer Classe mit getter Methode auslesen. Java Basics - Anfänger-Themen 2
M if oder verschiedene getter Java Basics - Anfänger-Themen 31
I If / Else in Setter? Java Basics - Anfänger-Themen 8
M Methoden Zweidimensionaler Array mit Setter Methode ändern Java Basics - Anfänger-Themen 4
H Mit setter-Methode JLabel in einer andern Klasse ändern. Java Basics - Anfänger-Themen 40
C Setter-Methode mit final-Attribut Java Basics - Anfänger-Themen 9
M Gettter/Setter Methoden Klassenfelder kapselung und zugriff? Java Basics - Anfänger-Themen 1
JavaTalksToMe Kapselung Setter Frage Java Basics - Anfänger-Themen 15
kilopack15 Ist diese setter-Methode richtig? Java Basics - Anfänger-Themen 2
T setter im Konstruktor einbauen? Java Basics - Anfänger-Themen 8
F Setter Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben