Exception im Konstruktor

babuschka

Top Contributor
Ich möchte in der Klasse Name im angegebenen package folgendes machen:
Jedes Objekt vom Typ Name soll einen Vor- und einen Nachnamen haben (beides String).
Im Konstruktor soll nun, falls first oder last null ist, eine NullPointerException mit Meldung geworfen werden.
Der Name darf niemals leer sein, falls dies der Fall ist, soll eine IllegalArgumentException geworfen werden. Ebenfalls mit Meldung.

So, das habe ich auch alles getan. Nur leider wird "nachname" nicht erkannt. Wo liegt mein Fehler?

Der Fehler wird angezeigt in Zeile 17. Das "nachname" wird nicht erkannt? Aber das habe ich doch als Attribut festgelegt?!

Java:
package namesorting;

public class Name {
	
	private final String vorname;
	private final String nachname;
	
	//Constructor Methode:
	public Name(String first, String last){
		
		if(first.equals(null) || last.equals(null)){
			//NullPointerException auswerfen mit aussagekräftiger Meldung
			
			throw new NullPointerException("first und last dürfen nicht leer sein!");
		}
		
		else if(nachname.equals(null)){
			//IllegalArgumentException auswerfen mit aussagekräftiger Meldung
			throw new IllegalArgumentException("Der Nachname darf nicht leer sein!");
		}
		this.vorname=first;
		this.nachname=last;	
	}

}
 
Zuletzt bearbeitet von einem Moderator:

babuschka

Top Contributor
Was meinst du mit Feld name?
Ich habe jetzt einfach aus

nachname.equals(null) folgendes gemacht:

this.nachname.equals(null)

ist das richtig?
 

TKausL

Top Contributor
Das ist komplett falsch. nachname wir IMMER null sein, da du die Instanzvariable ja noch garnicht gefüllt hast. Du musst first und last checken.
 
N

nillehammer

Gast
Objekte nur mit equals vergleichen ist zwar richtig. Aber bei einer Prüfung auf null geht das nicht, weil auch die equals-Methode auf einer nicht null Instanz ausgeführt werden muss. Ändere das wie folgt:
Java:
if(first == null || last == null){
Und das, was Du wahrscheinlich wissen wolltest: Die Prüfung auf
Code:
nachname.equals(null)
führt immer zur IllegalArgumentException. Denn nachname ist die Instanzvariable, die Du ja erst mit dem Konstruktorparameter initialisierst. Wenn überhaupt muss hier
Code:
last
geprüft werden. Und, ob ein String leer ist, wird nicht durch Prüfung auf null ermittelt sondern so:
Java:
// Ab Java 6
if(last.isEmpty()) {
  throw new IllegalArgumentException("Der Nachname darf nicht leer sein!");
}

// Vor Java 6

if(last.length() < 1) {
  throw new IllegalArgumentException("Der Nachname darf nicht leer sein!");
}
 
Zuletzt bearbeitet von einem Moderator:
B

bone2

Gast
Der ganze else if teil macht logisch überhaupt keinen sinn.

[STRIKE]@Nillehammer: wohl eher: nachname may not have been initialized.[/STRIKE]
edit: siehe nächster post
 
Zuletzt bearbeitet von einem Moderator:
N

nillehammer

Gast
bone2 hat gesagt.:
Der ganze else if teil macht logisch überhaupt keinen sinn.
So, wie er da steht, tatsächlich nicht. Wenn man sich aber die Fehlermeldung der IllegalArgumentException anschaut, erkennt man, dass es sich hier wohl um einen Versuch handelt, zu erkennen, ob ein leerer String übergeben wurde (siehe mein letzter Post).
bone2 hat gesagt.:
@Nillehammer: wohl eher: nachname may not have been initialized.
Nope, eine solche Fehlermeldung kommt nur bei Variablen, die man innerhalb von Methoden deklariert hat. Instanzvariablen haben einen Defaultwert null, den man innerhalb des Konstruktors natürlich ändern kann.
 

babuschka

Top Contributor
Ok, ich habe es ein wenig abgeändert:

Java:
package namesorting;

public class Name {

	private final String vorname;
	private final String nachname;

	//Constructor Methode:
	public Name(String first, String last){

		if(first.isEmpty() || last.isEmpty()){
			//NullPointerException auswerfen mit aussagekräftiger Meldung (falls first oder last leer

			throw new NullPointerException("first und last dürfen nicht leer sein!");
		}

		this.vorname=first;
		this.nachname=last;
		
		//IllegalArgumentException auswerfen mit aussagekräftiger Meldung (falls nachname leer)
		if(nachname.isEmpty()){
			throw new IllegalArgumentException("Der Nachname darf nicht leer sein!");
		}
	}
}

Mein Problem liegt aber immer noch an der Aufgabenstellung. Es wird gefordert:

1.) "Dabei darf weder first noch last null sein; ist dies der Fall soll
eine NullPointerException geworfen werden"

2.) "ebenfalls darf der Nachname kein leerer
String sein, der Vorname hingegen schon; ist der Nachname ein leerer String, soll eine Illegal-
ArgumentException geworfen werden."
 
B

bone2

Gast
Warum ersetzt du dann bei first und last den test auf null?
first und last == null testen
und dann last auch noch auf empty()
dann nachname und vorname setzen und fertig.
 
N

nillehammer

Gast
Offensichtlich fehlt es hier komplett an Durchblick. Ist nicht schlimm, kann am Anfang mal passieren. Aber mit etwas Nachdenken solltest Du doch drauf kommen, dass es nur eine sinnvolle Reihenfolge geben kann:
1. Prüfen ob Parameter null
2. Prüfen, ob Parameter ungültig (hier also leer)
3. Parameter den entsprechenden Instanzvariablen zuweisen.
Es macht keinen Sinn, einen ungültigen Parameter zuzuweisen und dann zu prüfen, ob die Variable gültig is. Da kannst und solltest Du gleich den Parameter prüfen.

Wie auf null und leer geprüft wird, findest Du in unseren Posts. Wie ein Wert zugewiesen wird, hast Du selbst rausgefunden.
 

babuschka

Top Contributor
Ja, bin wirklich ein Anfänger....Aber das leuchtet mir jetzt alles ein. Habe schon selbst gemerkt, dass das teils keinen Sinn macht..
naja, ich glaube, jetzt habe ichs soweit richtig:

Java:
package namesorting;

public class Name {

	private final String vorname;
	private final String nachname;

	//Constructor Methode:
	public Name(String first, String last){

		if(first==null || last==null){
			//NullPointerException auswerfen mit aussagekräftiger Meldung (falls first oder last leer

			throw new NullPointerException("first und last dürfen nicht null sein!");
		}
		else if(last.equals("")){
			throw new IllegalArgumentException("Der Nachname darf nicht leer sein");
		}
		this.vorname=first;
		this.nachname=last;
	}
}
 
B

bone2

Gast
Aber ich dachte Strings darf man nicht mit == vergleichen?
edit: ich geh besser ins bett, mit equals() kann man natürlich das object nicht auf null testen...

Objektvariablen enthalten eine Referenz auf ein Objekt oder eben nichts (null).
Wenn du Strings mit == vergleichst, vergleichst du eben die Referenzen und so kann es kommen, das Strings mit gleichem Inhalt wo anders im Ram gespeichert werden (da steckt mehr hinter als das) und damit verschiedene Referenzen haben. Das führt bei Objekten praktisch immer zu false beim vergleich mit ==. In der equals(o) methode wird der Typ des Objektes und der Inhalt wie z.B. Attribute verglichen.

Wenn du dir mal die SourceCode-Zeilen von equals() anguckst, wirst du sehen, dass auf null, dann == und erst dann der Inhalt geprüft wird.
 
Zuletzt bearbeitet von einem Moderator:
N

nillehammer

Gast
bone2 hat gesagt.:
equals(null) funktioniert tadellos, ist nur halt nicht nötig.
Leider nein. Du hast eine Referenz, die eventuell null sein kann (deswegen ja die null-Prüfung). Auf dieser Referenz rufst Du eine Methode auf (hier equals()). Wass passiert, wenn man auf einer null-Referenz eine Methode aufruft? Es fliegt eine NullPointerException. Aber eben leider nicht die mit der schönen Fehlermeldung. Es sieht also nur so aus als würde es funktionieren und tadellos ist es nicht. Nullprüfung mit
Code:
== null
, fertig!

@haeufi: Dein Code ist jetzt gut. Das mit dem equals("") kann man machen. isEmpty() ist vielleicht nur noch etwas sprechender. Aus dem
Code:
else if
könnte man noch ein reines
Code:
if
machen, aber das ist Geschmackssache.
 
Zuletzt bearbeitet von einem Moderator:
N

nillehammer

Gast
[OT]bone2, in der allerersten Version meiner ersten Antwort hatte ich auch noch geschrieben, dass es ok ist. Aber Edit war mein Freund.;)[/OT]
 

babuschka

Top Contributor
So, noch eine Frage:
In einer weiteren Klasse soll ich nun insertionDort in einer Methode implementieren.der Methodenkopf wird so vorgegeben:
Java:
public static VoIP sortInsertionSort(List<Name> James)

Dabei ist die Verwendung Collections.sort und ähnliches nicht erlaubt. Alles soll selbst implementiert werden.
Kann mir da jemand einen Ansatz geben. Weis nicht genau wie ich mit Listen umgehen muss......
 

piu58

Mitglied
Genereller Hinweis: Ich würde mir schwer überlegen, ob ich in einem eigenen Programm Null-Werte als normalen Betriebszustand zulasse. Man muss bei einer ganzen Reihe von Operationen jedes Mal im AUge behalten, ob null dafür ein zulässiger Wert ist, dies also prüfen und behandeln.
Initialisiere leere Felder/Objekte/Strings/sonstwas mit eigenen Angaben, die aber für die Operationen zulässig sind. Also z.B. Strings mit "", Ganzzahlen mit MAX_VALUE, Gleitpunktzahlen mit 10^33.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Eigene Exception Klasse - fehlender Konstruktor mit String Java Basics - Anfänger-Themen 3
E Exception im Konstruktor Java Basics - Anfänger-Themen 7
S 2 Einfache Fragen (Exception Breakpoint, Konstruktor) Java Basics - Anfänger-Themen 4
U super-Konstruktor Aufrufen mit Object, dass Exception wirft Java Basics - Anfänger-Themen 2
I Exception wird gefangen, aber trotzdem in Error Log? Java Basics - Anfänger-Themen 10
W Null-Pointer Exception beim Programmstart Java Basics - Anfänger-Themen 8
Ostkreuz String Exception Java Basics - Anfänger-Themen 8
Fiedelbambu Exception in Application constructor Java Basics - Anfänger-Themen 3
S leeres Array statt Null Pointer Exception ausgeben Java Basics - Anfänger-Themen 20
F abbruch Exception lässt sich nicht erstellen Java Basics - Anfänger-Themen 2
U Warum kriege ich hier eine nullpointer exception, sehe den Fehler nicht (swing) Java Basics - Anfänger-Themen 1
F Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 11 at main.main(main.java:11) Java Basics - Anfänger-Themen 2
M Exception in thread "main" java.util.NoSuchElementException Java Basics - Anfänger-Themen 2
N Exception beim Verwenden von Arraylist? Java Basics - Anfänger-Themen 10
B Compiler-Fehler Fehlermeldung Exception in thread, falsche Eingabewert Java Basics - Anfänger-Themen 2
S JavaKara Null Exception Error Java Basics - Anfänger-Themen 4
T Eigene Exception - ohne werfen abfangen Java Basics - Anfänger-Themen 2
LiFunk Exception: es dürfen nur Nummern eingelesen werden Java Basics - Anfänger-Themen 6
low_in_the_head Eigene Exception nutzen Java Basics - Anfänger-Themen 4
1 Exception Java Basics - Anfänger-Themen 2
S Kriege Fehler "Exception in thread" beim Benutzen von SubStrings. Java Basics - Anfänger-Themen 2
I JAX-RS Exception Handling Java Basics - Anfänger-Themen 4
L Meine erste eigene Exception Klasse Java Basics - Anfänger-Themen 10
J null exception Array Java Basics - Anfänger-Themen 5
H Frage zu Throw Exception Java Basics - Anfänger-Themen 2
O Exception in thread "main" java.lang.ArithmeticException: / by zero Java Basics - Anfänger-Themen 4
M Wie kann ich bei int-Variablen im exception handler auf bestimmte Strings reagieren? Java Basics - Anfänger-Themen 5
C Exception-Frage Java Basics - Anfänger-Themen 3
B Exception in thread "AWT-EventQueue-0" java.util.ConcurrentModificationException Java Basics - Anfänger-Themen 8
I Exception bei Button mit wait() und notifyAll() Java Basics - Anfänger-Themen 3
N Wie teste ich eine geworfene Exception? Java Basics - Anfänger-Themen 8
R Methoden ArrayList clonen wirft exception Java Basics - Anfänger-Themen 3
D Scanner- Exception NoSuchElementException Java Basics - Anfänger-Themen 2
N Exception werfen bei falscher Datumseingabe Java Basics - Anfänger-Themen 14
A Exception handeling mit finally und objektreferenzen Java Basics - Anfänger-Themen 6
D Frage zu Strings einer Exception Java Basics - Anfänger-Themen 4
S Exception Java Basics - Anfänger-Themen 2
J Exception-Aufgabe Java Basics - Anfänger-Themen 8
S Verwenden von throw Exception an der Funktion Java Basics - Anfänger-Themen 2
R Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 5
S Compiler-Fehler Exception in thread "main" java.lang.Error: Unresolved compilation problem: Java Basics - Anfänger-Themen 6
Z Fragen zu Exception (Throws/throw) Java Basics - Anfänger-Themen 7
OSchriever Exception für Abbrechen-Schaltfläche JOptionpane Java Basics - Anfänger-Themen 9
J Dateien in Verzeichnissen rekursiv auflisten wirft Exception Java Basics - Anfänger-Themen 4
J Exception unreachable Java Basics - Anfänger-Themen 12
O unchecked Exception Java Basics - Anfänger-Themen 4
P Exception werfen Java Basics - Anfänger-Themen 15
B EJB und Arquillian - bekomme Nullpointer Exception beim Aufruf der EJB Klasse Java Basics - Anfänger-Themen 40
S Exception bei Verwendung von LocalDate Java Basics - Anfänger-Themen 19
I Compiler-Fehler Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5 Java Basics - Anfänger-Themen 3
D Warum die Nullpointer Exception Java Basics - Anfänger-Themen 6
O Exception behandlung einfach Ueben mit Fakt! Java Basics - Anfänger-Themen 10
I OOP Was ist die "Exception Hierarchie" ? Java Basics - Anfänger-Themen 3
U Null Exception aber keine Ahnung warum Java Basics - Anfänger-Themen 5
G Exception und Ausgabe der Duplikate Java Basics - Anfänger-Themen 6
H Try Catch Throw Exception Java Basics - Anfänger-Themen 1
W Exception in Main abfangen oder in der Methode? Java Basics - Anfänger-Themen 10
F Referenz an ein Objekt in einer anderen Klasse erstellen(Nullpointer exception) Java Basics - Anfänger-Themen 6
Mosquera Exception Java Basics - Anfänger-Themen 5
M rekursive division/0 mit exception Java Basics - Anfänger-Themen 18
N Nullpointer exception Java Basics - Anfänger-Themen 4
L Eigene Exception schreiben bei zu langem Array Java Basics - Anfänger-Themen 10
R Exception in thread "main" java.lang.NullPointerException Java Basics - Anfänger-Themen 10
I equals (Override) mit eigener Exception (keine Runtime-Exception) Java Basics - Anfänger-Themen 9
S Array Grenzen-Exception Java Basics - Anfänger-Themen 11
E InputStream im Servlet wirft Exception Java Basics - Anfänger-Themen 5
D Erste Schritte Java.lang.NullPointer.Exception Java Basics - Anfänger-Themen 8
G Arrays out of Bounds exception Java Basics - Anfänger-Themen 2
H Compiler-Fehler Out of Bunce Exception bei einem Char Java Basics - Anfänger-Themen 6
C Compiler-Fehler Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2 Java Basics - Anfänger-Themen 3
C Null Pointer Exception Java Basics - Anfänger-Themen 10
F Klassen Eigene Exception Bedingungen festlegen Java Basics - Anfänger-Themen 2
G Null Pointer Exception Java Basics - Anfänger-Themen 4
GreenTeaYT Exception und zur OOP fragen? Java Basics - Anfänger-Themen 3
O Exception bei Parse-Vorgang Java Basics - Anfänger-Themen 17
T Exception Problem Java Basics - Anfänger-Themen 5
Z Getter/Setter NullPointer Exception Java Basics - Anfänger-Themen 6
W Nullpointer Exception bei .add(...) Java Basics - Anfänger-Themen 6
L Input/Output InputMismatch.Exception Java Basics - Anfänger-Themen 7
B Exception Liste von Liste Java Basics - Anfänger-Themen 3
D Throw Exception Java Basics - Anfänger-Themen 2
MiMa JavaDoc Exception @throws schlagen an Java Basics - Anfänger-Themen 4
J Exception in thread "main" Java Basics - Anfänger-Themen 1
B Exception richtig einbinden Java Basics - Anfänger-Themen 1
M Exception soll Werte mitgeliefert bekommen Java Basics - Anfänger-Themen 12
M Selbstdefinierte Exception Java Basics - Anfänger-Themen 5
B Exception Throwable Java Basics - Anfänger-Themen 11
M Erste Schritte Start Methode - Exception Java Basics - Anfänger-Themen 1
F Operatoren Wieso fliegt hier eine NullPointer Exception :( Java Basics - Anfänger-Themen 3
F nullpointer exception - arrayerstellung Java Basics - Anfänger-Themen 4
K Iterator-Interface implementieren mit Exception Handlung Java Basics - Anfänger-Themen 1
H Erste Schritte Exception: 0 Java Basics - Anfänger-Themen 2
A Exception vs. Testklasse (Programm testen) Java Basics - Anfänger-Themen 2
L Fehler: Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 4
K Exception nur im "Debug"-Modus und jedem 3.-5. mal Ausführen Java Basics - Anfänger-Themen 3
S Java memory fehler: Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap spa Java Basics - Anfänger-Themen 5
L [JFrame] Exception - woher? Java Basics - Anfänger-Themen 8
N Threads Exception in thread "main"... Feher bei dem Versuch ein Radius zu berechnen Java Basics - Anfänger-Themen 4
R "Missbrauch" von Exception zum Programmfluss Java Basics - Anfänger-Themen 1
U Exception: OutOfMemoryError Java Basics - Anfänger-Themen 11

Ähnliche Java Themen

Neue Themen


Oben