Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
In Java gibt es verschiedene Konstanten (unten befindet sich ein Beispiel mit Quellcode):
Objektkonstante,
Klassenkonstante,
lokale Konstante,
1)
gibt es noch weitere Konstanten?
2) Welche sind sinnvoll bzw. sinnlos?
wenn die Objektkonstante (siehe unten) objektKonstante_sinnlos mit 123 initialisiert wird, hat sie in jedem Objekt den Wert 123. Das ist meiner Meinung nach sinnlos, denn dann könnte man gleich eine Klassenkonstante nehmen.
3) Habt ihr sinnvolle Beispiele für Objektkonstanten und lokale Konstanten ?
4) Soll man _alle_ Konstanten (Objektkonstante, Klassenkonstante, lokale Konstante) komplett mit Grossbuchstaben schreiben, wie z.B. KLASSENKONSTANTE_PI
mfg
Ernst
Java:
package konstante1;
public class StartklasseKonstante1 {
public static void main(String[] args) {
final int lokaleKonstante = 10;
System.out.println("lokaleKonstante="+lokaleKonstante);
System.out.println("KLASSENKONSTANTE_PI="+MeineKonstanten.KLASSENKONSTANTE_PI);
Land holland=new Land(12.0);
System.out.println("lokaleKonstante="+holland.objektKonstante_waehrungskurs);
}
}
class Land{
public final double objektKonstante_waehrungskurs;
// In jedem Objekt hat diese Konstante den gleichen Wert. Dies ist sinnlos, da man
// dann gleich eine Klassenkonstante nehmen kann
public final double objektKonstante_sinnlos = 123;
// In jedem Land ist der Waehrungskurs eine spezifische, landesabhängige Konstante
public Land(double waehrungskurs){
this.objektKonstante_waehrungskurs=waehrungskurs;
}
}
class MeineKonstanten {
public static final double KLASSENKONSTANTE_PI = 3.14;
}
Zum Beispiel die KeyEvents wie VK_Space sind final, weil sie zwar immer wieder gebraucht werden aber nicht verändert werden dürfen. Das ist auch gleichzeitig ein Beispiel für Punkt 3. Groß geschrieben werden die Namen nur dann, wenn sie statisch sind.
Finale Variablen lassen sich auch erst, zum Beispiel in einem switch case mit einem Wert befüllen. Das muss nicht sofort geschehen.
1) Spontan fallen mir nur konstante Klassen und Methoden ein.
2) In diesem Fall könnte man eine Klassenkonstante nutzen.
3+4) Ich schreibe nur "final static"-Variablen groß. Es gibt sehr viele lokale Konstanten, aber da leidet mMn die Lesbarkeit, wenn man diese als final deklarieren würde. Beispielsweise sind viele Parameter von Settern final. Oder wie in deinem Beispiel ist "waehrungskurs" eigentlich auch eine lokale Konstante. Wobei das weglassen von final eine potentielle Fehlerquelle ist.
1)
>
>Zum Beispiel die KeyEvents wie VK_Space sind final, weil sie zwar immer wieder gebraucht werden
>aber nicht verändert werden dürfen.
>
VK_Space ist nicht final, siehe: KeyEvent (Java 2 Platform SE v1.4.2)
2)
>
>Das ist auch gleichzeitig ein Beispiel für Punkt 3. Groß geschrieben werden die Namen nur dann,
>wenn sie statisch sind.
>
Nein, in Punkt 3 geht es um Objektkonstanten.
VK_Space ist aber eine static-Variable.
>
>Finale Variablen lassen sich auch erst, zum Beispiel in einem switch case mit einem Wert befüllen.
>Das muss nicht sofort geschehen.
>
Kannst du mir ein Beispiel geben?
Was heisst "könnte"?
Wäre die andere Lösung:
public final double objektKonstante_sinnlos = 123;
nicht sinnlos bzw. welche Berechtigung hätte diese ?
3+4) Ich schreibe nur "final static"-Variablen groß. Es gibt sehr viele lokale Konstanten, aber da leidet mMn die Lesbarkeit, wenn man diese als final deklarieren würde.
Warum?
Warum soll man eine Konstante nicht mit final auszeichnen?
Wie willst du sonst eine Konstante bezeichnen?
Beispielsweise sind viele Parameter von Settern final. Oder wie in deinem Beispiel ist "waehrungskurs" eigentlich auch eine lokale Konstante. Wobei das weglassen von final eine potentielle Fehlerquelle ist.
Wenn die Konstante static ist, dann könnte man über Land.objektKonstante_sinnlos den Wert abfragen. Das ist aktuell nicht möglich. Jetzt muss erst ein Objekt angelegt werden und über das Objekt kann der Wert abgefragt werden. Im Normalfall ist das tatsächlich sinnlos, aber ich möchte nicht auschließen, dass es auch Anwendungsfälle gibt, in der das von Bedeutung ist.
Warum?
Warum soll man eine Konstante nicht mit final auszeichnen?
Wie willst du sonst eine Konstante bezeichnen?
Bequemlichkeit / Lesbarkeit. Warum hast du "waehrungskurs" nicht als final ausgezeichnet?
Java:
Du meinst also daß:
public Land(final double waehrungskurs){
this.objektKonstante_waehrungskurs=waehrungskurs;
}
besser ist als:
public Land(double waehrungskurs){
this.objektKonstante_waehrungskurs=waehrungskurs;
}
Warum ist es besser?
Warum ist es eine potentielle Fehlerquelle?
Und vor allem: Was bedeutet (und was macht) das final vor einem formalen Parameter?
Bei deinem Beispiel hast du vergessen die MwSt auf den Währungskurs zu addieren, deshalb habe ich den mal ergänzt. (Jetzt läuft mein Programm korrekt und deiner wahrscheinlich nicht)
Java:
public Land(double waehrungskurs){
waehrungskurs = waehrungskurs + getMwSt();
this.objektKonstante_waehrungskurs=waehrungskurs;
}
Wäre die Variable waehrungskurs final, könnte ich den Wert nicht ändern. Da selbst in riesigen Projekten dieser Fehler eher selten gemacht wird, halte ich es für unnötig jede lokale Konstante mit einem final auszuzeichnen.
Wäre die Variable waehrungskurs final, könnte ich den Wert nicht ändern. Da selbst in riesigen Projekten dieser Fehler eher selten gemacht wird, halte ich es für unnötig jede lokale Konstante mit einem final auszuzeichnen.