Konstanten

Status
Nicht offen für weitere Antworten.

Fret

Mitglied
Hallo ihr alle!

Ich bin neu hier im Forum und ebenfalls ein Neuling was Java angeht. Ich lerne die Sprache momentan mit der "Insel".
Ich plane nun ein Programm, dass physikalsiche Konstanten für Berechnungen benötigt. Ich frage mich momentan, ob ich diese Konstanten typsicher mit
Code:
enum
und dem Wert der Konstanten als Attribut des entsprechenden Objekts oder einfach als
Code:
public static final
deklarieren soll. Ich verstehe denke ich den Unterschied zwischen den beiden und auch den Sinn von enum, aber das hilft mir irgendwie hier nicht. Also, erschlagt mich! :wink:

Der FRET
 

Marco13

Top Contributor
Abgesehen davon, dass ich die Java-Enums ganz subjektiv total toll finde: Ich sehe (objektiv, soweit mir das möglich ist) keinen Nachteil von enums gegeüber finals, und keinen Vorteil von finals gegenüber enums, und würde daher zu letzteren tendieren.
 
M

maki

Gast
Es wäre ein vorteil, wenn man ganzzahlen verwenden würde um static final zu unterscheiden:

Code:
public static final int SYMBOL1= 1;
public static final int SYMBOL2= 2;
public static final int SYMBOL3= 3;
..

Sind viele davon vorhanden, könnte jemand aus vesehen denselben wert zweimal zuweisen:
Code:
..
public static final int SYMBOL98= 98;
public static final int SYMBOL99= 1;
Das wäre ein Problem, da SYMBOL1 und SYMBOL99 nicht unterscheidbär wären, schwer zu finden.

Das passiert mit enums nicht.

Wenn du allerdings Zahlenwerte brauchst (zB phys. Konstanten) die sowieso unterschiedlich sind, ist es fast egal, ausser dass enums moderner sind.
 

ms

Top Contributor
Ich finde es macht schon einen Unterschied. Vielleicht ist das eh jedem klar, ich erwähne es hier nochmal.

Enums sind Aufzählungstypen, also Konstanten, die den Zustand eines Typs beschreiben. Montag, Dienstag, Mittwoch ... ist ein klarer Fall für Enums.
PI hingegen ist eine konstante Zahl und sollte, wie ich finde, nicht als Enum deklariert werden.

Da es eine Weile gedauert hat, bis Enums auch in Java vorhanden waren hatte man keine andere Wahl und musste Konstanten als Enums missbrauchen.

ms
 

Fret

Mitglied
Wenn ich nun aber nicht nur dem Namen der Konstanten einen Wert, sondern auch noch die Einheit zuordnen möchte, dann würden sich enums auf jeden Fall anbieten, oder? Ich würde das dann als Eigenschaften des Objektes "Bla-Konstante" interpretieren. Oder? Oder nicht? Oder wie jetzt? ;-)
 

Jango

Gesperrter Benutzer
Fret hat gesagt.:
Oder? Oder nicht? Oder wie jetzt? ;-)
Nein. Du kannst einer Konstanten nur einen Wert zuweisen. Das nennt sich Aufzählungstyp. Was willst du an einer Einheit aufzählen? Oder verstehe ich das falsch...
 

byte

Top Contributor
Du kannst einer Konstanten gar keinen Wert zuweisen, sonst wäre es keine Konstante. ;) Eine (Enum-)Konstante kann aber endlich viele (konstante) Eigenschaften haben.
 

Jango

Gesperrter Benutzer
byto hat gesagt.:
Du kannst einer Konstanten gar keinen Wert zuweisen...
Doch, natürlich. Man kann doch einer Konstanten in einer Enumeration einen vom Standardwert abweichenden Wert zuweisen? Ist das keine Zuweisung? Weist man keinen Wert zu, beginnt das erste Element mit 0. Die Konstanten sind doch die Elemente der Enumeration.
 

tfa

Top Contributor
Jango hat gesagt.:
byto hat gesagt.:
Du kannst einer Konstanten gar keinen Wert zuweisen...
Doch, natürlich. Man kann doch einer Konstanten in einer Enumeration einen vom Standardwert abweichenden Wert zuweisen? Ist das keine Zuweisung? Weist man keinen Wert zu, beginnt das erste Element mit 0. Die Konstanten sind doch die Elemente der Enumeration.

Das verwechselst Du mit C#. Java-Enums (bzw. die interne Darstellung) beginnen immer mit 0. Davon abgesehen wäre es keine Zuweisung im weiten Sinne, sondern eher eine Definition, die sich nicht mehr überschreiben lässt.

tfa
 
M

maki

Gast
const correctness wäre der richtige Begriff:


Code:
package test;

import java.util.Date;

public class Test {
  
    final static int foo = 42;
    final static String fooObject = "konstant?";
    final static Date fooMutable= new Date( 1 );

	public static void main(String[] args) {
		
	        foo= 1; // fehler
			
	        fooObject= "variabel?"; // fehler
		
		fooMutable.setTime( System.currentTimeMillis() );   //geht!
			
		System.out.print( fooMutable );	
	}

}

Wenn das Objekt ein mutabale (veränderbares) ist, kann man dessen Wert ändern, trotz final.
Man kann allerdings kein neues Objekt der als final deklarierten Referenz zuweisen.

const ist ein Schlüsselwort in Java, allerdings sieht es nicht so aus, als ob es bald (überhaupt?) belegt wird, so dass es sich wie const in C/C++ verhält.

Gruß,

maki
 
M

maki

Gast
Schlussendlich?

Du überschätzt deine Fähigkeit Humor zu zeigen masslos, manche "Witze" sind so schlecht das man sie als offensiv empfinden könnte und lieber drüberhinwegliest.

Vielleicht wärst du lieber Komiker geworden anstatt Java Entwickler?
 

Leroy42

Top Contributor
Immer noch besser als überhaupt keinen zu haben.

Bevor das hier jetzt zu persönlich wird, empfehle ich
dir lieber, spielen zu gehen und mit deinen Konstanten
herumzujonglieren.

==> .
 

Marco13

Top Contributor
Vielleicht wollen Fret und ms noch zur Klärung der Frage beitragen. Speziell @ms: Was spricht gegen sowas
Code:
enum Constants
{
    GRAVITY(9.81, "m/(s*s)", "Gravity"),
    ELECTRON_MASS(1.234e-40, "kg", "Electron mass"),
    ...
}
wo man jeder Konstanten nicht nur den Wert, sondern auch Einheit und Namen zuweist?

Man könnte es natürlich auch anders machen. JScience http://jscience.org/ werwendet Konstanten vom Typ "Amount" http://jscience.org/api/org/jscience/physics/amount/Constants.html - auch eine Möglichkeit. Kommt wohl auf die Anforderungen an.
 

Fret

Mitglied
Die Einheit dazu wäre schon ganz nett. Es macht das ganze ja nicht unübersichtlicher, sondern würde für Klarheit sorgen. Und bei einer möglichen Ausgabe der Werte könnte ich auch direkt darauf zurückgreifen.
 

Marco13

Top Contributor
maki hat gesagt.:
Das kommt darauf an, brauchst du denn Einheit und Bezeichnung, oder reicht einfach nur die Konstante?

Vielleicht ist die Frage so "gefährlich" gestellt. Wie wäre es mit der Frage:
"Kann es sein, dass du irgendwann mal mehr brauchst als nur den reinen Zahlenwert?"

Im Hinblick auf Erweiterbarkeit ist eine enum (oder, alternativ aber fast gleichbedeutend) eine Klasse wie "Amount" bei JScience) auf jeden Fall sicherer.
 
M

maki

Gast
"Kann es sein, dass du irgendwann mal mehr brauchst als nur den reinen Zahlenwert?"
imho ist es etwas übertrieben, an alle möglichen Fälle der Zukunft zu denken, dass führt oft zu einem übertrieben komplexen Design und manchmal sogar zu "dead code".

Meist reicht die Frage: "Was brauchst du jetzt?"

Wenn irgendwann dann mehr verlangt wird, kommt man nicht drumherum Änderungen zu machen, allerdings hab ich in meiner Erfahrung dann soviel geändert, dass selbst ein "vorraussehendes Design" geändert werden musste und keinen Vorteil gebracht hatte.

Die Einheit dazu wäre schon ganz nett. Es macht das ganze ja nicht unübersichtlicher, sondern würde für Klarheit sorgen. Und bei einer möglichen Ausgabe der Werte könnte ich auch direkt darauf zurückgreifen.
Das hört sich doch so an, als ob Enums (oder gar Klassen) vorzuziehen wären.
 

sliwalker

Top Contributor
Hoi,

eine Sache sollte man aber nicht vergessen:

Als final deklarierte Felder sind Thread-safe, weil sie nicht nachgeladen werden. In einem synchronized-Block kann einem das manchmal das Leben echt einfach machen.

greetz
SLi
 

Fret

Mitglied
Abschließend nochmal meinen Dank an alle! Das war meine erste Erfahrung mit diesem Forum und sie war durchweg positiv. Ich hoffe, auch bald genug Erfahrung zu haben um anderen hier helfen zu können.
(BTW, es werden wohl enums werden :wink: )
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Fats Waller Wofür stehen diese Konstanten im Java Labyrinth ? Java Basics - Anfänger-Themen 5
M Wie lassen sich Konstanten in Bedingung stellen? Java Basics - Anfänger-Themen 1
thor_norsk Symbolische Konstanten Java Basics - Anfänger-Themen 9
L Konstanten Java Basics - Anfänger-Themen 7
A SelectionSort bringt keine konstanten Ergebnisse Java Basics - Anfänger-Themen 4
F Erste Schritte Literale / Konstanten Java Basics - Anfänger-Themen 5
M Konstanten in einem Interface definieren Java Basics - Anfänger-Themen 1
M Enum: Zugriff auf Konstanten Java Basics - Anfänger-Themen 7
E wann welche Konstanten verwenden? Java Basics - Anfänger-Themen 7
Luk10 Frage zu globalen Konstanten Java Basics - Anfänger-Themen 11
T Variablen Verständnissfrage Konstanten Java Basics - Anfänger-Themen 6
S Dezimale Konstanten sind immer positiv oder null - was heisst das den genau? Java Basics - Anfänger-Themen 2
D Sind Enums typsichere Konstanten? Java Basics - Anfänger-Themen 15
M Konstanten in Java Java Basics - Anfänger-Themen 23
A Was ist performanter für Konstanten, enum oder static variablen Java Basics - Anfänger-Themen 5
C Konstanten zu einfachen Berechnungen unterhalb Main Methode Java Basics - Anfänger-Themen 19
P Klassen-konstanten durchlaufen Java Basics - Anfänger-Themen 9
S Viele Konstanten, EnumSet? Java Basics - Anfänger-Themen 3
D Frage zu Konstanten Java Basics - Anfänger-Themen 7
G static block und konstanten Java Basics - Anfänger-Themen 2
S Organisieren von Konstanten Java Basics - Anfänger-Themen 16
G Wohin mit Konstanten? Java Basics - Anfänger-Themen 12
G konstanten leicht benutzen? (sichtbarkeit) Java Basics - Anfänger-Themen 17
K System.exit() - Konstanten ? Java Basics - Anfänger-Themen 2
M Konstanten ableiten und überschreiben Java Basics - Anfänger-Themen 2
Dilandau array aus konstanten definieren? Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben