Konstruktor / statischer Block

Status
Nicht offen für weitere Antworten.

Marcel_Handball

Bekanntes Mitglied
Meine Frage bezieht sich auf das Initialisierung von konstanten Klasssenvaribalen, da diese ja in anderen Klassen "einkompiliert" werden.

Hab ich zum Beispiel:
Code:
class A{
    public static final KONST = 5;
}

class B{
    System.out.println(A.KONST);
}

Würde ich die beiden Klassen kompilieren, ersetzt der Compiler ja A.KONST durch 5, sodass wenn ich in A den Wert der Konstanten ändere ich B auch neu kompilieren muss.


Daher meine Frage:

Was wird zuerst ausgeführt? Ein statischer Block oder der Konstruktor der Klasse?
Wenn es der Konstuktor ist, könnte ich die Initialisierung der Klassenvariablen im statischen Block ausführen und der Verweis in Klasse B, bliebe bestehen.
 

Wildcard

Top Contributor
Kleiner Trick:
Code:
public static final int KONST = Integer.valueOf(5).intvalue();
Dadurch verhinderst du Inlining.
 

Ebenius

Top Contributor
Wildcard hat gesagt.:
Kleiner Trick:
Code:
public static final int KONST = Integer.valueOf(5).intvalue();
Dadurch verhinderst du Inlining.

Dadurch verhinderst Du aber, dass KONST eine Konstante ist. Als case-Label ist's danach nicht mehr zu gebrauchen und der Name ist dann ebenfalls fragwürdig.
 

hdi

Top Contributor
Frage: Was ist Inlining, und wieso verhindert man das mit Wildcard's Post?
Ich dachte bisher alle "Variablen" mit dem Keyword "final" nennt man Konstanten.
 

Wildcard

Top Contributor
Es geht darum, das der Compiler in Klasse B den Wert 'inlined' anstatt es bei der Referenz auf A.KONST zu belassen. Wenn A nun eine Bibliothek ist, und B den Wert inline im Class-File stehen hat, dann fällt B auf die Nase wenn Bibltiothek A irgendwann mal den Wert ändert.
 

hdi

Top Contributor
Was heisst auf die Nase fallen? Dass er einfach weiterhin den alten Wert hernimmt, oder dass
es da zu einer Exception kommt?
 

Ebenius

Top Contributor
hdi hat gesagt.:
Was heisst auf die Nase fallen? Dass er einfach weiterhin den alten Wert hernimmt, oder dass
es da zu einer Exception kommt?

Nimmt den alten Wert weiter. Inline meint, dass der Literal-Ausdruck anstatt der Referenz übernommen wird. Niemand weiß im Binärcode davon, dass es sich eigentlich um A.KONST handelt.
 

hdi

Top Contributor
Ah ok, und sowas kann aber nur bei final Variablen passieren, wenn man sie so schreibt wie es
Wildcard gemacht hat? Oder hat das jetzt nix mit dem final zu tun sondern wie die Klassen
im Bsp oben sind?
 

Ebenius

Top Contributor
hdi hat gesagt.:
Ah ok, und sowas kann aber nur bei final Variablen passieren, wenn man sie so schreibt wie es
Wildcard gemacht hat? Oder hat das jetzt nix mit dem final zu tun sondern wie die Klassen
im Bsp oben sind?

Sowas kann nur bei "static final"-Konstanten ─ wie oben ─ passieren. Wildcards Beispiel verhindert das Inlining.
Code:
public static final int WILL_BE_INLINED = 5;
public static final int WILL_NOT_BE_INLINED = new Integer(5).intValue();

"5" ist ein Literal, das heißt, der Wert steht zur Kompilierzeit fest. "new Integer(5).intValue()" ist kein Literal; dieser Wert steht erst zur Laufzeit fest.

Ebenius
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Parameter Konstruktor plus rechnen Allgemeine Java-Themen 6
M Konstruktor einer Methode Allgemeine Java-Themen 35
M Frage zum Konstruktor Allgemeine Java-Themen 2
B Klassen Objekt erzeugen und Konstruktor aufrufen - Welche Lösung ist besser? Allgemeine Java-Themen 2
D Konstruktor - jedes Objekt einzeln erzeugen - alternative? Allgemeine Java-Themen 8
J Konstruktor in JSP beim Kompilieren nicht gefunden Allgemeine Java-Themen 3
J Inner class + Leer-Konstruktor Allgemeine Java-Themen 1
P Threads Objekt im Konstruktor anders wie im Run()-Block Allgemeine Java-Themen 10
H Beim Konstruktor "this" Allgemeine Java-Themen 4
K Variablen Konstruktor, unendlich viele Allgemeine Java-Themen 3
T Konstruktor löst exception aus Allgemeine Java-Themen 7
C Klassen und Konstruktor Allgemeine Java-Themen 2
W Threads NullPointer: Konstruktor "zu langsam"? Allgemeine Java-Themen 3
L Klassen Konstruktor soll Objekt anderer Klasse erzeugen Allgemeine Java-Themen 2
M Klassen Klasse Dynamisch laden und Konstruktor aufrufen Allgemeine Java-Themen 1
DStrohma In abstrakter Klasse Konstruktor von Instanz implementieren Allgemeine Java-Themen 11
C Reflektions, Benutzer soll Konstruktor auswählen und Parameter übergeben können Allgemeine Java-Themen 5
S OOP this-Referenz als Konstruktor-Übergabe Allgemeine Java-Themen 8
ruutaiokwu NullPointerException auf member, die per konstruktor gesetzt wird (multithread-kontext) Allgemeine Java-Themen 2
ruutaiokwu auf priv. konstruktor von "aussen" zugreifen? Allgemeine Java-Themen 4
A Methoden laufen im Konstruktor, außerhalb allerdings nicht Allgemeine Java-Themen 2
E Array im Konstruktor übergeben Allgemeine Java-Themen 3
A Reflection Konstruktor Parameter Supertyp Allgemeine Java-Themen 2
X Dynamisch Konstruktor aufrufen Allgemeine Java-Themen 12
J abstrakte Klassen, Konstanten und Konstruktor Allgemeine Java-Themen 9
E Finale Attribute und Konstruktor Allgemeine Java-Themen 3
S Konstruktor ermitteln Allgemeine Java-Themen 3
B Konstruktor wird nicht aufgerufen Allgemeine Java-Themen 4
T class.newinstance + try/catch-konstruktor Allgemeine Java-Themen 6
S Neue Instanz eines Objekts erzeugen - Konstruktor erhaelt Parameter. Allgemeine Java-Themen 5
B Konstruktor - Vererbungsproblem Allgemeine Java-Themen 2
S konstruktor vererben Allgemeine Java-Themen 5
B Problem mit Methodenaufruf in Konstruktor Allgemeine Java-Themen 6
D [SOLVED] Collection wird nicht richtig per Konstruktor übernommen Allgemeine Java-Themen 8
S Instanz in einer Klasse erstellen, und dem Konstruktor die eigene Klasse mitgeben Allgemeine Java-Themen 4
Ark Konstruktor per Reflection nicht bekannt Allgemeine Java-Themen 4
J Klasse auf Konstruktor oder Methode testen? Allgemeine Java-Themen 3
Junktyz Konstruktor Allgemeine Java-Themen 9
T Schleife im Konstruktor? Allgemeine Java-Themen 9
conan2 super-super-Konstruktor? Allgemeine Java-Themen 3
P static-Methode aus dem Konstruktor aufrufen Allgemeine Java-Themen 6
F Werte von Member-Variablen erst im Konstruktor setzen? Allgemeine Java-Themen 7
MQue zaehlen im Konstruktor Allgemeine Java-Themen 3
V Initialisierung nur im Konstruktor? Allgemeine Java-Themen 14
J Konstruktor-Aufruf nur aus einem bestimmten Package erlauben Allgemeine Java-Themen 5
T Konstruktor von Hashtable unter Java 5.0! Allgemeine Java-Themen 3
M Feld initialisieren, direkt oder Konstruktor Allgemeine Java-Themen 2
D super-Konstruktor ist nicht super ;) Allgemeine Java-Themen 6
A Objektmethode aus Konstruktor aufrufen? Allgemeine Java-Themen 14
7 Konstruktor Allgemeine Java-Themen 12
M Konstruktor, der Excpetions wirft Allgemeine Java-Themen 2
H Super-Konstruktor Allgemeine Java-Themen 7
A Exception in Konstruktor - trotzdem wird Objekt erzeugt! Allgemeine Java-Themen 3
S Konstruktor vererben Allgemeine Java-Themen 9
thE_29 String Konstruktor - Umwandlungsprobleme Allgemeine Java-Themen 5
J Probleme mit dem Konstruktor Allgemeine Java-Themen 8
G Konstruktor-Aufruf nun mit oder ohne Typ? Allgemeine Java-Themen 9
D Kein public Konstruktor Allgemeine Java-Themen 4
K Exception im Konstruktor / Objekt == null Allgemeine Java-Themen 7
S konstruktor nur innerhalb der klasse aufrufbar Allgemeine Java-Themen 5
S konstruktor im interface Allgemeine Java-Themen 5
Zrebna Limitierungen statischer Codeanalyse? Allgemeine Java-Themen 19
S "Vererben" statischer Felder/Methoden Allgemeine Java-Themen 4
G Synchronisation nicht statischer Methoden Allgemeine Java-Themen 4
W Frage zu Refactoring statischer Methoden Allgemeine Java-Themen 4
T Polymorphie Statischer Methodenaufruf einer Kindsklasse Allgemeine Java-Themen 4
Eldorado Barcodes mit statischer Breite generieren Allgemeine Java-Themen 3
D Referenzen weiterreichen vs. statischer Zugriff Allgemeine Java-Themen 3
S Enums - statischer import Allgemeine Java-Themen 2
X Input/Output InputStream/Scanner(System.in) read()/hasNextLine() block unterbrechen Allgemeine Java-Themen 7
Neumi5694 Lambda - Block vs "Anweisungsliste" Allgemeine Java-Themen 8
I Java Optionals mit return-Block Allgemeine Java-Themen 2
C try-catch Block Verständnisfrage Allgemeine Java-Themen 14
B Sudoku-Block-Prüfung Allgemeine Java-Themen 1
C Unendlich Wiederholungsfehler bei try catch - Block Allgemeine Java-Themen 3
T Warum ein privileg block? Allgemeine Java-Themen 0
H Probleme mit finally-Block und close() Allgemeine Java-Themen 4
N String aus Try/Catch-Block übernehen Allgemeine Java-Themen 14
B Execption auf Oberfläche werfen, try-catch-Block Allgemeine Java-Themen 6
G Initialization Block? Allgemeine Java-Themen 8
A Annotation einer Subklasse im static-Block auslesen. Allgemeine Java-Themen 6
E JNA:Zugriff auf Common-Block von Fortran bzw. Struct in C Allgemeine Java-Themen 2
J synchronized block mit this und wait() Allgemeine Java-Themen 5
D break block by label Allgemeine Java-Themen 14
G URLClassLoader stößt static Block nicht an Allgemeine Java-Themen 8
G GC Warning: Repeated allocation of very large block Allgemeine Java-Themen 35
E try/catch Block um ganzes Programm Allgemeine Java-Themen 10
conan2 static-Block in Klassen Allgemeine Java-Themen 6
H Ein synchronized Block ausreichend? Allgemeine Java-Themen 6
T rießiger try - catch - Block Allgemeine Java-Themen 13

Ähnliche Java Themen

Neue Themen


Oben