Eigene Exception nutzen

Hallo!
Ich möchte das erste Mal eine eigene Exception nutzen. Dazu habe ich eine MyException Klasse und eine Unterklasse ArrayFullException.
Leider bekomme ich das nicht so recht hin und weiß mittlerweile nicht, wo das Problem liegt.

Die Idee ist: Ich erstelle ein Array aus der ArrayStack Klasse. Packe in der Main Klasse Items in das Array und wenn das Array voll ist und keine Items mehr rein können, soll meine Exception ausgelöst werden.

Ohne meine Exception geht das Programm.
Mit meiner Exception gibt er mir IMMER die Fehlermeldung meiner Exception aus, obwohl das Array nicht voll ist.


Hier der Code:
Meine Main Klasse, wo in den Stack die Items gelegt werden.
Java:
[/B]
public class Main {

    public static void main(String[] args) {
        
        Stack<String> TestStack = new ArrayStack<String>();
        
        String erster     = "Hallo";
        String zweiter     = "Test";
        String dritter     = "!";

        
        
        try {
            TestStack.push(erster);
            TestStack.push(zweiter);
            TestStack.push(dritter);

        } catch (ArrayFullException e) {
            System.err.println(e.getErrorMessage());
        }
    }
}
[B]

Meine ArrayStack Klasse. Hier soll das Array erstellt werden.
Wenn ich den auskommentierten Teil nutze und nicht meinen neuen Versuch mit einer eigenen Exception, geht alles.
Java:
[/B]
import java.util.Arrays;

public class ArrayStack<T> implements Stack<T> {
    private int maxSize = 10;
    private T[] data;
    private int size = -1;
   
    @SuppressWarnings("unchecked")
    public ArrayStack () {
        this.data = (T[])(new Object[maxSize]);
    }

    public void push(T item) throws ArrayFullException {
//        try {
//            ++size;
//            data[size] = item;
//        } catch (ArrayIndexOutOfBoundsException e) {        //Array voll
//            System.out.println();
//            
//            System.out.println("Das Array ist voll. Das Element '" + item + "' konnte nicht hinzugefuegt werden. "
//                    + "Die maximale Größe das Arrays ist: " + maxSize);
//            
//            System.out.println("Gerade sind folgende Elemente im Array enthalten: " + Arrays.toString(data));
//            System.out.println();
//            --size;
//        }
   
    
        if(size < maxSize) {                   
            ++size;
            data[size] = item;
        } throw new ArrayFullException();
    }
    
//toString, geter, seter
    @Override
    public String toString() {
        return "ArrayStack [maxSize=" + maxSize + ", data=" + Arrays.toString(data) + ", size=" + size + "]";
    }


    public int getMaxSize() {
        return maxSize;
    }


    public void setMaxSize(int maxSize) {
        this.maxSize = maxSize;
    }


    public T[] getData() {
        return data;
    }


    public void setData(T[] data) {
        this.data = data;
    }

}

Hier die MyException Klasse
Java:
@SuppressWarnings("serial")
public abstract class MyException extends Exception {
    
    private String errorMessage;
    
    
    public MyException() {
        this.setErrorMessage("Fehler: ");
    }
    
    public MyException(String m) {
        setErrorMessage(m);
    }
    
    public String getErrorMessage() {
        return errorMessage;
    }

    public void setErrorMessage(String errorMessage) {
        this.errorMessage = errorMessage;
    }

Meine Unterklasse.
Java:
[/B]


@SuppressWarnings("serial")
public class ArrayFullException extends MyException {
  
    public ArrayFullException() {
        super("ArrayStack ist voll.");
    }
   
}
[B]

Mein Interface.
Java:
[/B]
public interface Stack<T> {
    public void push(T item) throws ArrayFullException;
}
[B][B]
 
Zuletzt bearbeitet:
K

kneitzel

Gast
Also irgendwie kann ich Dir nicht ganz folgen:
a) In dem auskommentierten Bereich wirfst Du keine Exception. Und ich verstehe auch nicht, was Du da genau versuchst / machen willst.
b) In dem nicht auskommentierten Teil wirfst Du immer eine Exception. Somit dürfte der Code so, wie er derzeit aufgebaut ist, nicht funktionieren.

Generell: Du rennst nicht sehenden Auges in eine Exception nur um diese dann zu fangen. So RuntimeExceptions sind - im Gegensatz zu checked Exceptions die "Der Entwickler war zu faul, richtig zu prüfen" Exception.

Und generell ist die Aufgabe so einer Klasse doch nicht, eine Ausgabe zu machen.

Daher wäre doch der gewünschte Ablauf einfach:
Prüfe ob noch platz ist:
Wenn ja: füge ein
Sonst: Exception

Somit ein einfaches

Java:
        if(size < maxSize) {                   
            ++size;
            data[size] = item;
        } else {
            throw new ArrayFullException();
        }

Wobei ich einfach Methoden gerne aufbaue nach dem Schema:
a) Validierung
b) Tätigkeit
c) Ergebnis zurückliefern

Da sähe es dann so aus:
Java:
        if(size >= maxSize) throw new ArrayFullException();

        ++size;
        data[size] = item;

Oder habe ich etwas falsch verstanden und Deine Anforderungen sind irgendwie anders?
 
Hallo @kneitzel !
Danke für deine Antwort.

b) In dem nicht auskommentierten Teil wirfst Du immer eine Exception. Somit dürfte der Code so, wie er derzeit aufgebaut ist, nicht funktionieren.
Ja! Genau das war mein ursprüngliches Problem!


Ich habe beide Versionen von dir probiert. Das Programm läuft mit beiden Versionen wunderbar, aber wenn ich dann ein volles Array habe passiert folgendes:

Hier habe ich die Größe des Arrays bewusst auf 2 gesetzt und ein 3. Item hinzugefügt. Leider wird dann nicht meine ArrayFullException() genutzt.
ArrayStack [maxSize=2, data=[Hallo, null], size=0]
ArrayStack [maxSize=2, data=[Hallo, Test], size=1]
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2
at ArrayStack.push(ArrayStack.java:61)
at Main.main(Main.java:30)

a) In dem auskommentierten Bereich wirfst Du keine Exception. Und ich verstehe auch nicht, was Du da genau versuchst / machen willst.
Das war einfach meiner "erste" Version, die auch klappte, aber ich wollte lernen, wie ich eigene Exceptions erstelle.
 
K

kneitzel

Gast
Ok, das habe ich übersehen. Die Grenze ist natürlich falsch geprüft. Der Index fängt bei 0 an und geht bis zur Größe - 1.

Das Array ist also voll, wenn size+1 >= maxSize ist.

Das Problem ist hier halt, dass size nicht die belegte Größe ist, sondern der letzte index. Das zeigt einmal mehr auf, wie wichtig richtige Bezeichner sind, denn so Fehler können schnell passieren. size < maxSize besagt: Die größe ist noch nicht auf Maximum ... also geht da noch was... sieht ja richtig aus. Nur eben ist es - wie oben geschrieben - je der index. Wenn size 10 ist, sind 11 Elemente im Array abgelegt. (So Du bei 0 anfängst - das habe ich jetzt aber nicht geprüft.)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Eigene Exception - ohne werfen abfangen Java Basics - Anfänger-Themen 2
L Meine erste eigene Exception Klasse Java Basics - Anfänger-Themen 10
L Eigene Exception schreiben bei zu langem Array Java Basics - Anfänger-Themen 10
F Klassen Eigene Exception Bedingungen festlegen Java Basics - Anfänger-Themen 2
C eigene Exception Java Basics - Anfänger-Themen 4
S Eigene Exception Klasse - fehlender Konstruktor mit String Java Basics - Anfänger-Themen 3
K Klassen Eigene Exception verwenden Java Basics - Anfänger-Themen 9
S Eigene Exception Schreiben und Welche Auslösen wie ? Java Basics - Anfänger-Themen 7
T eigene Exception Klasse Java Basics - Anfänger-Themen 12
B eigene Exception.... Java Basics - Anfänger-Themen 5
F Eigene Exception StackTrace und Message ist leer warum??? Java Basics - Anfänger-Themen 3
R Eigene Exception deklarieren Java Basics - Anfänger-Themen 3
F eigene Exception aus try-catch werfen Java Basics - Anfänger-Themen 10
Amina556 Eigene Klasse definieren Java Basics - Anfänger-Themen 9
T Datentypen Eigene Datentypen Java Basics - Anfänger-Themen 15
C Archiv für eigene Klassen Java Basics - Anfänger-Themen 9
D Attribut Telefonnummer - eigene Klasse oder String Java Basics - Anfänger-Themen 13
B JUnit 4: Wie man die eigene Liste testen kann [TDD] Java Basics - Anfänger-Themen 46
C eigene Methoden erstellen (Instanzmethoden) Java Basics - Anfänger-Themen 7
S Eigene LinkedList Klasse Java Basics - Anfänger-Themen 4
I Eigene Java Tools Nutzung Java Basics - Anfänger-Themen 6
G eigene Bibliothek einbinden Java Basics - Anfänger-Themen 1
K Eigene Annotations, Pre-/Post-/Call-Method Java Basics - Anfänger-Themen 6
O Erste Schritte Eigene charAt(i) Methode schreiben Java Basics - Anfänger-Themen 10
D Methoden Eigene Methode um alle Ausgaben aufzurufen Java Basics - Anfänger-Themen 17
P Maven und eigene Jars Java Basics - Anfänger-Themen 4
J Algorithmus - Strings auf eigene Reihenfolge miteinander vergleichen Java Basics - Anfänger-Themen 4
R Interface Eigene Objekte in Listen sortieren mit Interface Comparable Java Basics - Anfänger-Themen 5
A Eigene Methoden entwicken Java Basics - Anfänger-Themen 3
H GSON-Bibliothek für eigene Programme benutzen Java Basics - Anfänger-Themen 2
H Klassen auf eigene Klasse zugreifen Java Basics - Anfänger-Themen 2
N Eclipse - eigene Icons unter ClassPath Resource Java Basics - Anfänger-Themen 0
N Eigene Stream Methoden implementieren Java Basics - Anfänger-Themen 3
R eigene Graphikbedienelemente Java Basics - Anfänger-Themen 8
V Generics / eigene Liste Java Basics - Anfänger-Themen 4
T Eigene Bedingung in IF-Bedingung Java Basics - Anfänger-Themen 22
P Java 8 & Eigene Applets Java Basics - Anfänger-Themen 3
E Best Practice Exaktes Rechnen mit (Pseudo-)Rationalen/Realen Zahlen. Operations Zuweisung für (eigene) Klassen Java Basics - Anfänger-Themen 3
G eigene Bibliothek in Java importieren Java Basics - Anfänger-Themen 5
D Klassen Eigene Klasse für ArrayList Java Basics - Anfänger-Themen 6
M Wann eigene implementierte HashCode Methode zwingend erforderlich? Java Basics - Anfänger-Themen 1
B Klassen Eigene "non static" Klasse in Main verwenden! Java Basics - Anfänger-Themen 12
P Vererbung Eigene HashMap Variante Java Basics - Anfänger-Themen 2
J Eigene Klasse für die Variablen? Java Basics - Anfänger-Themen 3
P Eigene Knöpfe mit eigenem Listener Java Basics - Anfänger-Themen 5
S Wann existiert eine Instanz (eigene Klasse) Java Basics - Anfänger-Themen 8
T Muss ein Parametertest immer eine eigene Testklasse sein? Java Basics - Anfänger-Themen 3
B Multithreading und eigene Queue entwickeln Java Basics - Anfänger-Themen 3
O GUI: Eigene Fenster "Form"? Java Basics - Anfänger-Themen 13
F Eigene LinkedList - toString Java Basics - Anfänger-Themen 10
O Denkanstöße für eigene Konfigurations-Datei Java Basics - Anfänger-Themen 12
SexyPenny90 Wieso ist diese eigene Equals-Methode schlecht? Java Basics - Anfänger-Themen 17
M externe JARs in die eigene JAR einbinden Java Basics - Anfänger-Themen 9
V Klassen import - einfaches Umleiten auf eigene Klassen? Java Basics - Anfänger-Themen 8
B eigene klasse in listen eintragen Java Basics - Anfänger-Themen 6
A Objekte in eigene Klasse auslagern Java Basics - Anfänger-Themen 2
S [JavaFX 2.1] - Eigene Sprachauswahl? Java Basics - Anfänger-Themen 4
J eigene packages bzw klassen verwenden Java Basics - Anfänger-Themen 25
E Eigene Stackklasse Java Basics - Anfänger-Themen 7
B Eigene Exceptions entwerfen Java Basics - Anfänger-Themen 3
P eigene kleine Datenverwaltung Java Basics - Anfänger-Themen 5
N Eigene Methoden-> Werte übergeben Java Basics - Anfänger-Themen 5
U Klassen Eigene Klassen importieren Java Basics - Anfänger-Themen 13
Kenan89 ActionListener in eigene Klasse Java Basics - Anfänger-Themen 8
E Object in eigene Klasse umwandeln? Java Basics - Anfänger-Themen 7
S Eigene Klassen addieren Java Basics - Anfänger-Themen 3
B OOP Eigene Objekte in Arrays zusammenfassen Java Basics - Anfänger-Themen 3
E Eigene class datum Java Basics - Anfänger-Themen 2
G Eigene MessageBox kreieren Java Basics - Anfänger-Themen 9
I Erste Schritte Eigene Fehlermeldungen bei Exceptions Java Basics - Anfänger-Themen 19
F Klassen Eigene Klasse definieren Java Basics - Anfänger-Themen 4
S Eigene KeyEvent-Mask erstellen Java Basics - Anfänger-Themen 4
X Eigene Libary Java Basics - Anfänger-Themen 2
Crashbreaker Eigene Java-Programm ohne hilfe des CMD starten Java Basics - Anfänger-Themen 11
A Klassen Eigene Datenklasse - Strings mit fixer Länge Java Basics - Anfänger-Themen 2
G Shape um eigene Achse drehen Java Basics - Anfänger-Themen 2
P Vererbung Basisklasse soll eigene Methode benutzen Java Basics - Anfänger-Themen 38
F Eigene Klasse für die Keys von HashMap Java Basics - Anfänger-Themen 5
J Eigene kleine Datenbank programmieren Java Basics - Anfänger-Themen 2
G Eigene Klasse als Array, zugriff? Java Basics - Anfänger-Themen 2
xehpuk Ordner "Eigene Bilder" ansteuern Java Basics - Anfänger-Themen 3
V Sonderzeichen als eigene "Operatoren" im JTextField Java Basics - Anfänger-Themen 4
S Eigene Stack Klasse Java Basics - Anfänger-Themen 26
D Eigene equals methode schreiben Java Basics - Anfänger-Themen 4
dataframe OOP Eigene typisierte Liste Java Basics - Anfänger-Themen 3
W GUI als eigene Klasse oder in die Startklasse? Java Basics - Anfänger-Themen 21
T Konstruktor für eigene Klasse erstellen Java Basics - Anfänger-Themen 6
H Buttonbefehle in eigene Klasse schreiben Java Basics - Anfänger-Themen 8
M Datentypen Eigene iterierbare Liste Java Basics - Anfänger-Themen 4
G Eigene Klasse für externe Befehle - Warten auf Prozesse Java Basics - Anfänger-Themen 6
S Klassendiagramm - nur eigene Klassen? Java Basics - Anfänger-Themen 3
nrg Eigene simple List-Klasse programmieren Java Basics - Anfänger-Themen 3
C Eigene Interpreter-Programmiersprache mit Java Java Basics - Anfänger-Themen 17
N Java Programm soll Datei in eigene jar schreiben Java Basics - Anfänger-Themen 13
M Eigene Pakete in Eclipse erstellen Java Basics - Anfänger-Themen 5
M Eigene Hash Funktion Java Basics - Anfänger-Themen 5
O Eigene Exceptions Java Basics - Anfänger-Themen 11
H eigene Schriftarten registrieren Java Basics - Anfänger-Themen 5
Kasoki Eigene Funktionen / Commands Java Basics - Anfänger-Themen 14
M Eigene LinkedList und Nodes Java Basics - Anfänger-Themen 20

Ähnliche Java Themen

Neue Themen


Oben