null-referenz

Status
Nicht offen für weitere Antworten.

UdoKessler

Mitglied
Bin in meinem Buch grad im Kapitel über Objekte u Referenzen..
Beim Thema null-Referenz verstehe ich etwas nicht.

Zitat:

Mit null lässt sich eine ganze Menge machen. Der Haupteinsatz sieht vor, damit uninitialisierte Referenzvariablen zu kennzeichnen, also auszudrücken, dass eine Referenzvariable auf kein Objekt verweist.

bsp:
Point p = null;


Wozu soll es gut sein, eine Referenz anzulegen, die auf kein Objekt zeigt?


Gruß
Udo
 

faetzminator

Gesperrter Benutzer
Wenn du eine Abhängigkeit von 0-n oder 1-n von Objekt X nach Y hast, kannst du eine List erstellen, welche .size() = 0 haben kann. Wenn du allerdings eine Abhängigkeit von 0-1 hast, ist das Objekt null oder nicht null...
Beispiel für null:
Code:
private void print(String s) {
    print(s, null);
}

private void print(String s, PrintStream ps) {
    if (ps == null) {
        ps = System.out;
    }
    ps.println(s);
}
Klar, du könntest oben auch print(s, System.out) übergeben, aber so ist die Methode schon gegen einen Nullpointer von ps gesichert.
 

Wildcard

Top Contributor
Variablen müssen immer auf irgendetwas zeigen. Zu einem Zeitpunkt an dem man noch nicht auf etwas sinnvolles zeigen kann, zeigt man auf null.
 

UdoKessler

Mitglied
@Wildcard
Aber ich kann doch die Referenz dann erstellen, wenn ich auch
das Objekt erstelle. Wieso sollte ich die Referenz im Voraus
anlegen?

@fatzminator
Ähh könntest Du das bitte nochmal für Dummies(wie mich) beschreiben?
Ich meine mit einfacheren Worten/Beispielen?
Verstehe Dich nämlich nicht :oops:
 

Schandro

Top Contributor
@Wildcard
Aber ich kann doch die Referenz dann erstellen, wenn ich auch
das Objekt erstelle. Wieso sollte ich die Referenz im Voraus
anlegen?
Nein, dass kannst du nicht (immer). Wenn du die Referenz z.b. als Membervariable brauchst und das dazugehörige Object erst irgendwann in einer Methode erstellt wird...
 

faetzminator

Gesperrter Benutzer
Also, einfaches Beispiel:
Die Klasse Man hat ein Feld Wife wife, doch was macht mann, wenn dieser Man nicht verheiratet ist? wife auf null lassen, wäre wohl die beste Möglichkeit.
 

UdoKessler

Mitglied
Nein, dass kannst du nicht (immer). Wenn du die Referenz z.b. als Membervariable brauchst und das dazugehörige Object erst irgendwann in einer Methode erstellt wird...

Ach Du meinst, wenn ich eine Methode aufrufe, welche ein Objekt erstellt, dann
übergebe ich dem Methodenaufruf eine null-initialisierte Refernz als Argument?
Und diese null-referenz zeigt nach dem Methodenaufruf dann auf das erzeugte
Objekt?
 

faetzminator

Gesperrter Benutzer
Noch ein Bisschen Code zu meinem Beispiel

in Klasse Man
Code:
public boolean isMarried() {
    return wife != null;
}
irgendwo...
Code:
Man man = new Man(...);
...
if (man.isMarried()) {
    Wife wife = man.getWife();
    ...
}
...
 

UdoKessler

Mitglied
@faetzminator (was fürn name ;-) )

Also, hab das mal zum testen kurz geschrieben. Wenn ich damit rumspielen
kann, versteh ichs meistens besser..:

Klasse wife
Code:
public class wife {
int age=0;
int money=1000;

}



Klasse Man und main
Code:
public class man {
    int age=0;
    int money=0;
//    wife wife = null;
    wife wife = new wife();
    
    public boolean isMarried() {
        
        return wife != null;
    }
    
    public static void main(String[] args) {

        man man = new man();
        man.age=30;
        man.money=1000;
        
        System.out.println(man.money);
        System.out.println(man.isMarried());
        
        
    }

}


Jetzt ist die Konsolenausgabe in Abhängigkeit des wife-objekts (höhö)
entweder true oder false. So meintest Du das, oder?
 

faetzminator

Gesperrter Benutzer
1. Bitte an die Konventionen halten, Klassen sollten mit einem Grossbuchstaben anfangen, also z.B. "Wife wife = new Wife()"
2. Beim Erstellen von Man wird ja in wife automatisch eine neue Instanz von Wife angelegt, genau das wollen wir ja nicht -> einfach "= new Wife()" löschen
3. Teste mal so was im main:
Code:
Man man = new Man();
System.out.println(man.isMarried());
man.wife = new Wife();
System.out.println(man.isMarried());
Anm.: schöner wäre natürlich ein void setWife(Wife wife) und ein Wife getWife() ;)
 

0x7F800000

Top Contributor
Und ich dachte wir leben in einer zivilisierten Gesellschaft:lol:
yoah, wife erstmal richtig schön als attribut des mannes definiert, ohne der referenz in die andere richtung, dass sie ja nicht glaubt sie hätte da irgendwas zu melden
69.gif

gemein :lol:
 
S

Spacerat

Gast
Kann es sein, das hier grad' das Thema verfehlt wird? Ging es hier im Prinzip nicht um die initialisierung mit "null" und um die Frage wozu das gut sein soll? Dazu müsste man sich noch mal mit Scopes befassen...[highlight=java]void someMethod() {
String tmp; // wird hier nicht "String tmp = null;" verwendet gibt's ein Compile Error
for(int n = 0; n < 10; n++) {
if(tmp == null) tmp = "";
tmp += "x";
}
}[/highlight]Das Beispiel ist zwar nicht das Beste, aber immerhin zeigt es, warum null-Initialisierungen machmal nötig sind.
 

0x7F800000

Top Contributor
Immer noch besser als ein useKnueppelOn(Wife wife) woraus isMarried = true folgt.
Dann wohl eher

[highlight=Java]
public void getWife(Wife w){
for(Man m:men){
if(m!=this){
if(m.isInterestedIn(w){
try{
useKnueppelOn(m);
}catch(SelbstWasAufDieFresseGekriegtException e){
System.out.println("couldn't get "+w+" , too strong rivals";
return;
}
}
}
}
//konkurrenz platt!
this.wifes.add(w);
}

public void isMarried(){
return wifes.size()>0;
}
[/highlight]
...das wäre so richtig steinzeitmäßig :lol:

Und sonst zur verwendung von null (back to topic):
Einfach wenn man andeuten will, dass etwas nicht da ist, oder noch unbekannt ist:
Beispielsweise bei allen möglichen datenstrukturen, Listen, Bäumen usw. Könnte man null verwenden, um anzudeuten, dass es keine weiteren Listenelemente gibt, d.h. dass man am ende der Liste angekommen ist.
Ich finde es beim Boolean eigentlich schöner, dass man da true, false oder auch "null" zurückgeben kann: beispielsweise bei tests, die eben drei ausgänge haben können - "ja", "nein" und "ich weiß es nicht, benutzen Sie einen mächtigeren Test"...
Oder wenn man bei methoden wie Transform#transform(Point2D p, Pint2D target) durch übergabe von "null" andeuten kann, dass man ein neues exemplar erzeugt haben will, und nicht altes überschreiben will... Ist einfach an vielen Stellen nützlich/unumgänglich.
 
Zuletzt bearbeitet:

UdoKessler

Mitglied
1. Bitte an die Konventionen halten, Klassen sollten mit einem Grossbuchstaben anfangen, also z.B. "Wife wife = new Wife()"
2. Beim Erstellen von Man wird ja in wife automatisch eine neue Instanz von Wife angelegt, genau das wollen wir ja nicht -> einfach "= new Wife()" löschen
3. Teste mal so was im main:
Code:
Man man = new Man();
System.out.println(man.isMarried());
man.wife = new Wife();
System.out.println(man.isMarried());
Anm.: schöner wäre natürlich ein void setWife(Wife wife) und ein Wife getWife() ;)

1. Ok
2. Ja, das habe ich zum kurz testen gemacht. Ausserdem ist das meine erste
eigene Klasse *freu*
Ist denn "Wife wife;" und "Wife wife = null; " das selbe?(..scheint so)

So, habs verbessert:

Code:
public class Wife {
  int age=0;
  int money=1000;
}
Code:
public class Man {

    int age=0;
    int money=0;
    Wife wife;
    
    public boolean isMarried() {
        return wife != null;   }
    
    public static void main(String[] args) {
        
        Man man = new Man();
        System.out.println(man.isMarried());
       
        man.wife = new Wife();
        System.out.println(man.isMarried());
    }
}
Funktioniert einwandfrei :)

Hab das Prinzip von null(in dieser Hinsicht) nun verstanden, dankeschön!

Gruß
Udo
 

UdoKessler

Mitglied
Kann es sein, das hier grad' das Thema verfehlt wird? Ging es hier im Prinzip nicht um die initialisierung mit "null" und um die Frage wozu das gut sein soll? Dazu müsste man sich noch mal mit Scopes befassen...

Lass ihnen soch ihren Spaß :)
Ich fische mir das Wichtige einfach raus..

Zu Deiner Erklärung:
Habs getestet (someMethod..), wieso gibts hier ein Fehler und
bei meinem Wife wife; in der Klasse Man nicht?
 

faetzminator

Gesperrter Benutzer
Ich würde grundsätzlich die Formatter der IDE's verwenden. in Eclipse kannst du z.B. mit [ctrl]+[shift]+[f] den Code formatieren lassen.
 
S

Spacerat

Gast
Lass ihnen soch ihren Spaß :)
Aber nur weil heut' Sonntag is'
Zu Deiner Erklärung:
Habs getestet (someMethod..), wieso gibts hier ein Fehler und
bei meinem Wife wife; in der Klasse Man nicht?
Man.wife ist ein Member von Man. Bei "new Man()" wird dort automatisch Platz für die Variable geschaffen, indem ein "null"-Objekt zugewiesen wird. Mein "String tmp" ist eine Methoden-Variable, die am Anfang einen unbestimmten Wert hat (nicht mal "null"). Bei der Deklaration wurde nicht einmal Speicher für die Variable reserviert. Deswegen kommt es auch schon beim 1. Vergleich gegen "null" ("if(tmp == null)") zu diesem Compile-Error.
 

UdoKessler

Mitglied
@faetzminator
Guter "Trick" ! Danke


@Spacerat
Ok, verstehe.


Danke euch allen mal wieder, schön so ein Forum gefunden
zu haben :)
Jetzt lese ich mal weiter..


Gruß
Udo
 

Marco13

Top Contributor
Eine Frau wird ja eigentlich erst dadurch zum Wife, dass sie einen Husband hat... Und außerdem... so einfach ist das ganze ja nicht....
Code:
class Man
{
    private List<Woman> women;

    private boolean isCatholic;

    public void pickUpWoman(Woman woman)
    {
        if (women.size() > 0 && isCatholic)
        {
            throw new PolygamyException("Thou shalst con commit adultery!");
        }
        women.add(woman);
    }

    ...
}

Hat jetzt aber auch nicht mehr so viel mit 'null' zu tun.... :rolleyes:
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Grundsatzfrage: Belegt eine Referenz auf 'null' RAM, und wenn ja - wieviel ;-) ? Java Basics - Anfänger-Themen 5
aze NullpointerException :Null Referenz anzeigen lassen Java Basics - Anfänger-Themen 2
S Prüfen, ob null Referenz? Java Basics - Anfänger-Themen 2
T Ich brauche eine Schleife die eine beliebige Zahl so lange durch 10 teilt bis zur Null Java Basics - Anfänger-Themen 5
M NullPointerException: Cannot read the array length because "this.Kinder" is null Java Basics - Anfänger-Themen 1
W Null-Pointer Exception beim Programmstart Java Basics - Anfänger-Themen 8
J 2 listen vergleichen, die auch null Elemente haben können ! Java Basics - Anfänger-Themen 9
W Null-Pointer trotz Konstruktor? Java Basics - Anfänger-Themen 9
S leeres Array statt Null Pointer Exception ausgeben Java Basics - Anfänger-Themen 20
H Ein übergegebenes Objekt auf null setzen Java Basics - Anfänger-Themen 9
P Buffer und null Java Basics - Anfänger-Themen 3
"java.util.HashMap.get(Object)" is null Java Basics - Anfänger-Themen 10
jakobfritzz Array- cannot invoke "" because "" is null Java Basics - Anfänger-Themen 4
W Wie ziehe ich von einer bestimmten Zahl, Zahlen ab, bis mein Ergebnis null beträgt? Java Basics - Anfänger-Themen 10
N null in String replacen Java Basics - Anfänger-Themen 16
S JavaKara Null Exception Error Java Basics - Anfänger-Themen 4
K Bufread.readLine())!= null wie beenden? Java Basics - Anfänger-Themen 4
C Variablen Provided text for message may not be null Java Basics - Anfänger-Themen 9
T ComboBox getValue() zeigt null Java Basics - Anfänger-Themen 7
J null exception Array Java Basics - Anfänger-Themen 5
tobikoch String x= null Bedeutung Java Basics - Anfänger-Themen 9
C NumberFormatException: null ohne Ausnahmebehandlung stoppen Java Basics - Anfänger-Themen 7
J Int wird als Null ausgegeben Java Basics - Anfänger-Themen 8
M Prüfen auf null ohne NPE Java Basics - Anfänger-Themen 1
C Array-Eintrag wieder auf Null setzen Java Basics - Anfänger-Themen 3
C Array auf Null-Inhalte prüfen Java Basics - Anfänger-Themen 9
V NullPointerException, wenn Key und Value null sind Java Basics - Anfänger-Themen 2
M jTable bekommt null Java Basics - Anfänger-Themen 1
B MySQL (jdbc) -> connection liefert NULL Java Basics - Anfänger-Themen 3
der_Schokomuffin Hilfe gesucht: String wird auf null gesetzt! Java Basics - Anfänger-Themen 17
L Warum ist Variable null? Java Basics - Anfänger-Themen 3
J javax.servlet.ServletException: Name is null Java Basics - Anfänger-Themen 7
B if(object== null) abkürzen? Java Basics - Anfänger-Themen 6
O JavaArray Null Java Basics - Anfänger-Themen 3
U Null Exception aber keine Ahnung warum Java Basics - Anfänger-Themen 5
W NullPointerException obwohl nicht null? Java Basics - Anfänger-Themen 3
D Best Practice Konvention - Klassenmembers auf null setzen? Java Basics - Anfänger-Themen 2
I Null-Überprüfung durch Lambda-Expressions abkürzen Java Basics - Anfänger-Themen 8
Orkanson Null Pointer Expception Java Basics - Anfänger-Themen 3
M set Integer bzw. set null mit SQL DB Java Basics - Anfänger-Themen 9
I Polymorphie Null Objekt Java Basics - Anfänger-Themen 3
O Datentypen Integer mit führender Null Java Basics - Anfänger-Themen 13
DaCrazyJavaExpert Compiler-Fehler Variable nicht mit null initialisiert, trotzdem: NullPointerException Java Basics - Anfänger-Themen 28
J Einfache Frage zu "null" Java Basics - Anfänger-Themen 2
T Datei in Array einlesen "null" Java Basics - Anfänger-Themen 8
P Operatoren Parameter nicht auf null geprüft? Java Basics - Anfänger-Themen 16
K Operatoren 2D Int Array auf Null-Referenzen prüfen Java Basics - Anfänger-Themen 18
C Null Pointer Exception Java Basics - Anfänger-Themen 10
V Elemente aus einem Array mit null überschreiben Java Basics - Anfänger-Themen 4
V String Array gegen null-Eintrag sichern Java Basics - Anfänger-Themen 11
G Null Pointer Exception Java Basics - Anfänger-Themen 4
R Gleitkommazahlen ohne führende Null Java Basics - Anfänger-Themen 10
M array = null Java Basics - Anfänger-Themen 2
F String equals NULL Problem Java Basics - Anfänger-Themen 4
F JSON null macht mir ein Problem Java Basics - Anfänger-Themen 3
R Property Value als null setzen Java Basics - Anfänger-Themen 1
D Arrays.toString spuckt null aus? Java Basics - Anfänger-Themen 3
T Compiler-Fehler Null type safety (type annotations) Java Basics - Anfänger-Themen 5
F Erste Schritte Unterschied: Array "leer" / "null" Java Basics - Anfänger-Themen 3
J Fehlerhafte Ausgabe "null" Java Basics - Anfänger-Themen 2
G Threads zum Thema Threads??? null Ahnung Java Basics - Anfänger-Themen 4
W Input/Output DataOutputStream gibt NULL zurück Java Basics - Anfänger-Themen 5
J Einfach verkettet List: Ausgabe ohne null Java Basics - Anfänger-Themen 11
D OOP Warum bekomme ich eine Null-Pointer Exception!!? :( Java Basics - Anfänger-Themen 4
D Null Ausgabe obwohl wert zugewiesen Java Basics - Anfänger-Themen 5
J Alias null Java Basics - Anfänger-Themen 4
B Aliasing bei null-Objekten Java Basics - Anfänger-Themen 3
A null-Überprüfung Java Basics - Anfänger-Themen 24
O Methode gibt Null zurück Java Basics - Anfänger-Themen 7
D Methoden Implementieren von einer Zoomfunktion innerhalb eines JPanels mit null-Layoutmanager Java Basics - Anfänger-Themen 1
A Null Pointer Exception in Liste Java Basics - Anfänger-Themen 11
T Null Java Basics - Anfänger-Themen 3
X Array trotz Befüllung "null" Java Basics - Anfänger-Themen 11
P JavaFX Textfelder geben immer null zurück Java Basics - Anfänger-Themen 8
K Selbst renderndes Object auf null setzen Java Basics - Anfänger-Themen 1
L Null Pointer Exception bei setText Java Basics - Anfänger-Themen 9
D Methode die statt char[] ein "null" zurück gibt Java Basics - Anfänger-Themen 8
J .txt Datei "einlesen "und in String speichern ergibt immer NULL Java Basics - Anfänger-Themen 17
M Input/Output File.listFiles() gibt null zurück Java Basics - Anfänger-Themen 3
M Kann einen Array nicht füllen, im Nachhinein nur "null"-Werte Java Basics - Anfänger-Themen 11
J Verschränkte Rekursion und null Ahnung... Java Basics - Anfänger-Themen 0
X Vererbung Setzen auf Null bei Subklassen Java Basics - Anfänger-Themen 2
S Rückgabewert null in Methode mit Thread Java Basics - Anfänger-Themen 2
C MIME-Type null Java Basics - Anfänger-Themen 4
T Null Pointer Exception Java Basics - Anfänger-Themen 4
M toString gibt "null" statt "0.0" aus Java Basics - Anfänger-Themen 5
M Konstruktor auf null prüfen, Arrays Java Basics - Anfänger-Themen 9
G Null Pointer Exeption Java Basics - Anfänger-Themen 8
A If object != null funktioniert nicht Java Basics - Anfänger-Themen 2
N 'null' aus String löschen Java Basics - Anfänger-Themen 7
F Irgendein "Null" Fehler.... Java Basics - Anfänger-Themen 5
P Map liefert bei put null als Ergebnis Java Basics - Anfänger-Themen 6
M Interface Das Null-Layout Java Basics - Anfänger-Themen 12
M Problem mit null pinterexception beim laden von Bildern Java Basics - Anfänger-Themen 20
Dogge NumberFormatException null Java Basics - Anfänger-Themen 5
C 2 Objekte, 1 immer Null? Java Basics - Anfänger-Themen 8
H Mehrdimensionales Array - Inhalt auf Null überprüfen Java Basics - Anfänger-Themen 5
J db4o-attrbibutauslesen null Java Basics - Anfänger-Themen 9
MiMa Null Inhalte in Variablen Java Basics - Anfänger-Themen 28
B Variable wird einfach so wieder auf "null" gesetzt Java Basics - Anfänger-Themen 12

Ähnliche Java Themen

Neue Themen


Oben