Wann genau brauche ich die Anweisung gleich null?

kossy

Bekanntes Mitglied
Hallo zusammen !

Kann mir vielleicht jemand von euch sagen, wann genau ich die Anweisung

Kopie ref2 = null;

immer zwingend setzen muss? Also wann muss ich zwingend eine Referenzvariable vom Typ eines Objektes gleich null setzen?

Grüße
Kossy
 
G

Gast2

Gast
Lokale Variablen müssen immer mit irgend nem Wert initialisiert werden, in nem try-catch kanns sein dass ne Variable mal nicht mit nem Wert belegt wird, da müsstest du die dann explizit mit nem Wert füllen, also null z.b.
Oder Wenn du auf biegen und brechen ein Objekt dem GC zum Fraß vorwerfen willst.

Man brauchts relativ selten.
 

Tobse

Top Contributor
Ich brauche [c]=null[/c] immer in solchen fällen:
Java:
Klasse ref=null;
try {
     // tu was..
     // als ergebnis oder zwischendrin wird ref bekannt
     ref=new Klasse();
} catch(MostFatalExceptionPossible) {
     // debug-output
     return;
}
// hier geschieht irgendwas mit ref
Der Compiler jammer dann, wenn in Zeile 1 kein [c]=null[/c] steht, obwohl nach dem try-catch statement ref einen Wert haben muss, da, wenn das nicht der fall wäre, im catch-block die methode abgebrochen wird. Aber der Compiler ist zu blöd dazu. Kann man ihm miener Meinung nach auch nicht übel nehmen.
 

Landei

Top Contributor
Ich finde es ist ein herber Design-Fehler von Java, dass im try-Block initialisierte Variablen in catch und finally nicht sichtbar sind (natürlich müsste man dann damit rechnen, dass sie null sind, wenn ein Fehler vor der Initialisierung flog).
 
B

...ButAlive

Gast
Ich finde es ist ein herber Design-Fehler von Java, dass im try-Block initialisierte Variablen in catch und finally nicht sichtbar sind (natürlich müsste man dann damit rechnen, dass sie null sind, wenn ein Fehler vor der Initialisierung flog).

Ich bin gerade etwas verwirrt ;)


Java:
public static void main(String[] args) {
   String string = null;

   try {
      string = "Hallo aus dem try-Block";
      throw new RuntimeException();
   } catch (Exception e) {
      System.out.println(string);
   } finally {
      System.out.println(string);
   }
}

Code:
String string = null;
ist die Deklaration und Initialisierung von
Code:
string
. In Java muss man
Code:
string
vor dem catch/finally-Block initialisieren, damit kann man leben finde ich, das einzige was jetzt nicht mehr geht ist
Code:
string
final zu setzten. Wenn jetzt ein Wert zugewiesen wird und danach eine Exception fliegt, kann man auf den Wert im catch/finally-Block zugreifen.

Ich könnte mir jetzt vorstellen, dass dich stört, dass
Code:
string
vor dem try-Block deklariert werden muss, um im catch/finally-Block sichtbar zu sein. Die drei Blöcke haben halt einen unterschiedlichen Scope, das finde ich jetzt auch nicht so schlimm.

Den finally-Block nutze ich eigentlich nur um Ressourcen zu schließen oder aufzuräumen, die Lösung "try mit Ressourcen" aus Java 7 finde ich da eigentlich eine schöne Lösung.

Im catch-Block brauche ich auch nichts aus dem try-Block, interessant sind da Eingabewerte für Logging, sollte man da in die Verlegenheit kommen, irgendwelche Zwischenergebnisse loggen zu wollen, macht man meiner Meinung nach zu viel im try-Block.
 

Tobse

Top Contributor
Ich finde auch, der try-catch-finally code soltle wirklich nur das ausführen und im falle einer Exception das behandeln dieser übernehmen, sonst nichts. Und ich finde, da passt es wunderbar, dass die Variable davor deklariert werden muss:
Es wird platz für die Variable geschaffen.
Dann wird der kritische Code ausgeführt, der sich um den wert kümmert.
Danach wird dieser weiter verarbeitet.
 

Landei

Top Contributor
Code:
String string = null;
ist die Deklaration und Initialisierung von
Code:
string
. In Java muss man
Code:
string
vor dem catch/finally-Block initialisieren, damit kann man leben finde ich...

Leben ja, aber unschön ist es alle mal. Mir geht es weniger um die eine zusätzliche Zeile. Das eigentliche Problem ist, dass die Variable einen größeren Scope hat als notwendig, und final machen (was ja zumindest bei immutablen Klassen helfen würde) kann man sie auch nicht.

Ein pathologisches Beispiel, das sehr schwer zu entdecken ist:

Java:
Date date = null;
try {
   date = getDateFromSomewhere();
   Order order = findOrder(id);
   checkDate(date, order); //kann Exception werden
   order.setPayDate(date);
} catch (InvalidDateException ex) {
    log.error("Pay date " + date + " is before create date ");
    return false;
}
...
//in einem anderen Kontext
Date createDate = new Date();
Order splittedOrder = new Order(getOrderId(), date, ...);
 
B

...ButAlive

Gast
Dein Beispiel wäre aber auch schwer zu durchschauen, wenn es keinen try/catch-Block gäbe. Das Problem ist ja dass
Code:
date
und
Code:
createDate
vertauscht werden. Das eigentliche Problem ist, dass die eine Methode zu viel macht und zu unübersichtlich ist.

Im Übrigen müsste man date nicht vor dem try-Block deklarieren, wenn man entweder in der Message der InvalideDateException das Datum hätte, oder date an die InvalideDateException übergeben würde.
 

Landei

Top Contributor
Ist ja nur ein Beispiel. In vielen Fällen muss man die Variable vor dem try deklarieren, z.B. wenn man im finally ein close oder so aufrufen muss (was ja nun endlich mit den ARM-Blöcken behoben worden ist, so man denn den Luxus von Java 7 hat).
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Polymorphie Was genau ist Polymorphie und wann genau sollte man es verwenden? Java Basics - Anfänger-Themen 9
D Wann genau nutze ich ein solches Interface? Java Basics - Anfänger-Themen 3
D Wann genau abstrakte Klasse und wann ein Interface verwenden? Java Basics - Anfänger-Themen 4
KogoroMori21 Wann ist der richtige Zeitpunkt, um sich Hilfe zu suchen? (Bin Informatik-Student) Java Basics - Anfänger-Themen 10
I Logik Zahlungsprozess - Wann Bestellobjekt anlegen? Java Basics - Anfänger-Themen 2
C Java Array Struktur, welche ist wann besser? Java Basics - Anfänger-Themen 12
berserkerdq2 Java streams, wann nutze ich ::, also 2x Doppelpuntk bei Streams? Java Basics - Anfänger-Themen 5
W Wann und warum hashcode und equals? Java Basics - Anfänger-Themen 14
W Wann Rückgabewerte 0, 1, -1? Java Basics - Anfänger-Themen 27
berserkerdq2 Wann soll ich den Stream schließen, wenn ich das in einer Methode habe? Java Basics - Anfänger-Themen 8
K In andere Zahlensysteme umwandeln, wann klappt immer der Trick mit log? Java Basics - Anfänger-Themen 6
W Zur Vererbung: Wann und wie? Java Basics - Anfänger-Themen 35
F Wann ist es eine Instanz und wann nicht? Java Basics - Anfänger-Themen 1
C Instanzen, wann muss ich Instanzen erzeugen & wo?) Java Basics - Anfänger-Themen 23
S Wann Methode abstract? Java Basics - Anfänger-Themen 10
S Wann buffer löschen? Java Basics - Anfänger-Themen 5
R Wie überprüfen wann der User online oder offline ist? Java Basics - Anfänger-Themen 5
I Wann ist Client plattformunabhängig? Java Basics - Anfänger-Themen 22
M Best Practice Wann eine Methode schreiben ? Java Basics - Anfänger-Themen 14
K Warum funktioniert das und wann erden die Objektmethoden nun ausgeführt? Java Basics - Anfänger-Themen 7
IngoF Welches Event kommt wann? Java Basics - Anfänger-Themen 8
M Wann eigene implementierte HashCode Methode zwingend erforderlich? Java Basics - Anfänger-Themen 1
X Wann schreibt man diese Syntax zeichen { } Java Basics - Anfänger-Themen 8
O Wann nutzt man static? Java Basics - Anfänger-Themen 19
C Klassendesign / Wann Interface implementieren und wann Klassen vererben? Java Basics - Anfänger-Themen 3
S Wann existiert eine Instanz (eigene Klasse) Java Basics - Anfänger-Themen 8
M Wann PATH und wann JAVA_HOME in Windows System 7 setzen? Java Basics - Anfänger-Themen 2
M Wann final verwenden? Java Basics - Anfänger-Themen 5
M Wann eine Wrapper Klasse verwenden und wann einen primitiven Datentypen? Java Basics - Anfänger-Themen 8
D Ab wann getter und setter Java Basics - Anfänger-Themen 2
B Erkennen, wann static oder nicht? Java Basics - Anfänger-Themen 7
E wann welche Konstanten verwenden? Java Basics - Anfänger-Themen 7
P Wann Byte-Stream und wann Character-Stream? Java Basics - Anfänger-Themen 11
T Vererbung Wann wird die Methode paint aufgerufen? Java Basics - Anfänger-Themen 4
M Wann statische Methoden/Attribute? Java Basics - Anfänger-Themen 2
vandread Java Wildcards - Wann super wann extends? Java Basics - Anfänger-Themen 2
K Wann Vererbung und wann Interface verwenden? Java Basics - Anfänger-Themen 12
B Wann toString() überschreiben? Java Basics - Anfänger-Themen 21
S OOP Wann Proxies und Interfaces? Java Basics - Anfänger-Themen 3
P Threads Wann läuft es parallel ab ? Java Basics - Anfänger-Themen 4
C Variablen Wann werden Instanzvariablen initalisiert? Java Basics - Anfänger-Themen 10
P Java Stream, wann welche Stream verwenden? Java Basics - Anfänger-Themen 3
T Ab wann ist es ein großes Projekt? Java Basics - Anfänger-Themen 35
N Bessere Performance durch final: wann denn überhaupt? Java Basics - Anfänger-Themen 28
W Wann nutze ich "import"? Java Basics - Anfänger-Themen 12
A junit test wann verwendet man "was"? Java Basics - Anfänger-Themen 4
H Wann ein Objekt der Programmklasse in main anlegen Java Basics - Anfänger-Themen 2
G Wann ist ein == Vergleich bei Gleitkommazahlen fahrlässig? Java Basics - Anfänger-Themen 8
T Wann for und wann while?? Java Basics - Anfänger-Themen 35
-horn- Wann wird alles NaN erzeugt? Java Basics - Anfänger-Themen 22
S Wann wird eine Klasse geladen? Java Basics - Anfänger-Themen 17
C this - wann verwende ich das? Java Basics - Anfänger-Themen 10
T Threads - Ab wann wirds Kritisch?! Java Basics - Anfänger-Themen 7
M Wann muss man eine Variable mit set-/get-Methoden in eine Bean schreiben? Java Basics - Anfänger-Themen 19
G field public/private wann Java Basics - Anfänger-Themen 11
GambaJo Ab wann neue Klasse erzeugen? Java Basics - Anfänger-Themen 2
G Wann Arrays, wann Collections? Java Basics - Anfänger-Themen 36
GambaJo Wann try.catch nutzen? Java Basics - Anfänger-Themen 11
B objekt wann als final deklarieren? Java Basics - Anfänger-Themen 2
N Wann muss eine Methode - protected sein wann public wann. Java Basics - Anfänger-Themen 5
Y Wann / Wozu inner class Java Basics - Anfänger-Themen 3
K StringBuilder notwendig ab wann? Java Basics - Anfänger-Themen 42
S wann static Funktionen wann nicht Java Basics - Anfänger-Themen 6
N Wann und wie oft finalize Methode verwenden( überschreiben ) Java Basics - Anfänger-Themen 6
Bernasconi Programmierstil / Wann eine neue Datei? Java Basics - Anfänger-Themen 5
M wann, welche schleife Java Basics - Anfänger-Themen 3
M Ab wann ist die Datei sichtbar? Java Basics - Anfänger-Themen 3
G Herausfinden, wann mehrere Threads abgeschlossen sind Java Basics - Anfänger-Themen 3
G Überprüfen wann ein Dokument abläuft? Java Basics - Anfänger-Themen 3
N SAX, StAX, JDOM oder DOM , ab wann welches für XML Java Basics - Anfänger-Themen 14
M Wann ist ein Programm beendet? Java Basics - Anfänger-Themen 6
G Wann am besten getSize() aufrufen? Java Basics - Anfänger-Themen 6
I Festellen wann Methode in anderer Klasse fertig ist Java Basics - Anfänger-Themen 5
M wann statische klassen? Java Basics - Anfänger-Themen 14
M Wann ist initialisieren sinnvoll? Java Basics - Anfänger-Themen 4
B Wann Comparator und wann Comparable Java Basics - Anfänger-Themen 6
R Wann benutzt man << oder >> ? Java Basics - Anfänger-Themen 2
G Klassen: Wann initialisiere ich wo meine Variabeln Java Basics - Anfänger-Themen 6
T Kann mir jemand wörtlich erklären, was in dem Code genau passiert? Java Basics - Anfänger-Themen 1
B 49-bit-zahl mit genau 6 Einsen bauen? Java Basics - Anfänger-Themen 21
H BlueJ: was genau ist hier der Fehler? Java Basics - Anfänger-Themen 14
berserkerdq2 Sende eine Nachricht an den Client und leere den Ausgabestorm, was ist damit genau gemeint? Java Basics - Anfänger-Themen 3
U Wie genau funktioniert der ! Operator Java Basics - Anfänger-Themen 3
J Hallo zusammen , was macht diese Methode hier genau? Java Basics - Anfänger-Themen 3
M Was wird hier genau getestet? Java Basics - Anfänger-Themen 9
jhCDtGVjcZGcfzug Was genau ist mit diesem Quellcode gemeint? Java Basics - Anfänger-Themen 5
P Was genau bringt mir es ein Array in eine Liste zu bringen Java Basics - Anfänger-Themen 3
S Was bewirkt ganz genau throw hinter einem Funktionsnamen? Java Basics - Anfänger-Themen 14
B Webhooks - was genau ist das und was kann damit JAVA Java Basics - Anfänger-Themen 5
B OCR - Rechnungserkennung, wie geht das genau? Java Basics - Anfänger-Themen 59
L Was genau macht -> Java Basics - Anfänger-Themen 18
Dawinartor Erste Schritte Was genau steckt dahinter? Java Basics - Anfänger-Themen 7
J Was genau macht die Methode close() im InputStream? Java Basics - Anfänger-Themen 5
A Was genau ist ein Standardkonstruktor Java Basics - Anfänger-Themen 10
B Wie funktionieren diese Methoden in diesem Sortierverfahren genau? Java Basics - Anfänger-Themen 2
B Für gesamte Schleife genau X Sekunden benötigen Java Basics - Anfänger-Themen 1
J TabelView - Kann mir jemand die Sequenz genau erklären ? Java Basics - Anfänger-Themen 2
L Was genau macht "public static void" ? Java Basics - Anfänger-Themen 12
G Methoden Was genau macht die Methode light.setInfluencingBounds ? Java Basics - Anfänger-Themen 5
H Wer genau ist 'Er'? Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben