Toon posts:

[JAVA] Exceptions

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik was een beetje aan het experimenteren met JAVA en toen liep ik tegen het volgende aan:
Ik was een bezig met een programma dat zijn invoer krijgt vanuit een txt-file, in de method waarin ik de data inlees throw ik netjes een IOException.
MAAR bij elke volgende method in (óf buiten deze class) moet ik dan erachter zetten throws IOException.

Nou is mijn vraag kan ik mijn eerste method ook zo maken dat dat niet meer nodig is?

voorbeeld code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.BufferedReader;
import java.io.RandomAccessFile;

public class Test
{
    public Test() throws IOException
    {
        file = new File("input.txt");
        read();
    }

    public String read() throws IOException
    {
        try
        {
            file = new File("input.txt");
            reader = new FileReader(file);
            in = new BufferedReader(reader);
        }
        catch (IOException e)
        {
            System.out.println("Bestand bestaat niet.");
        }

        String inputLine = in.readLine();

        return inputLine;
    }

    public void print()
    {
        String inputLine = read();
        System.out.println(inputLine);
    }

    FileReader reader = null;
    BufferedReader in = null;
    private File file;
}

  • Stubby
  • Registratie: Januari 2002
  • Laatst online: 22:14
Euhm zoals ik het leest declareer je de functie read() zodat hij een IOexceptions gooit, maar die gooi je nergens in de functie. Deze wordt fafgevangen en afgehandeld in de functie zelf.

Throws IOexceprion dus weghalen

  • Robtimus
  • Registratie: November 2002
  • Laatst online: 20:58

Robtimus

me Robtimus no like you

in.readLine() kan nog een IOExceptie gooien hoor

More than meets the eye
There is no I in TEAM... but there is ME
system specs


Verwijderd

Topicstarter
Hartstikke bedankt voor tips..
Ik snapte het niet allemaal, maar het is me gelukt..

En wel op de volgende manier:
(Voor degene na mij met dezelfde vraag)
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.BufferedReader;
import java.io.RandomAccessFile;

public class Test
{
    public Test()
    {
        readFile();
        while(!inputLine.equals("EOF"))
        {
            print(inputLine);
            readNextLine();
        }
    }

    public void readNextLine()
    {
        try
        {
            inputLine = in.readLine();
        }
        catch (IOException e)
        {}

    }

    public void readFile()
    {
        try
        {
            file = new File("input.txt");
            reader = new FileReader(file);
            in = new BufferedReader(reader);
            inputLine = in.readLine();
        }
        catch (IOException e)
        {
            System.out.println("Bestand bestaat niet.");
        }
    }

    public void print(String input)
    {
        System.out.println(input);
    }

    String inputLine = "EOF";

    FileReader reader = null;
    BufferedReader in = null;
    private File file;
}

[ Voor 5% gewijzigd door Verwijderd op 07-04-2003 22:01 ]


  • Robtimus
  • Registratie: November 2002
  • Laatst online: 20:58

Robtimus

me Robtimus no like you

Tja, werken is 1, maar of het net is...

Als er tijdens het lezen van een regel iets fout gaat negeer je het maar gewoon?

More than meets the eye
There is no I in TEAM... but there is ME
system specs


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

In java heb je 2 soorten exceptions: Checked exceptions en unchecked exceptions. Wat is het verschil nu tussen beiden? Een unchecked exception hoef je niet te propageren bij je methode signature. vb.

code:
1
2
3
4
void foo(){
      String s = null;
       int length = s.length();
}

Als je nu van s de lengte op gaat vragen krijg je een NullPointerException. Als je bij iedere methode een throws NullPointerException zou moeten plaatsen, dan gaat het natuurlijk erg onplezierig werken.

Naast de unchecked exceptions heb je ook de checked exceptions. Deze moet je wel bij methode signature propageren. Hierdoor zal de aanroeper van die methode dus
1) de fout moeten afhandelen
2) de exception doorsturen omhoog, zodat bovenliggende methode hem gaat afhandelen.

Als je wilt zien of je exception ook unchecked is, dan moet je controleren of RuntimeException ook in de class hierarchie voorkomt. Als dit zo is, dan is het een unchecked exception.

Wanneer gebruik je nu een checked en wanneer een unchecked exception? De meeste mensen weten het niet goed, en doe klooien er maar een eind op aan. Maar je moet unchecked exception opwerpen als je een progfout hebt gemaakt

vb:
Object item = list.get(-1);
Je krijgt nu een IndexOutOfBoundsException (unchecked exception), want dit is een fout van de programmeur zelf.

Wanneer gebruik je dan een checked exception? Nou, in de andere gevallen :P

[edit]
Java is hierin geloof ik aardig uniek. Er zijn maar weinig talen met checked exceptions. c++ en delphi hebben het niet: logisch het zijn al wat (ver)ouderde talen *houdt zijn handen voor zijn hoofd met al die bitneukers hiero :P* Maar ook c# heeft geen beschikking over checked exceptions. En dit terwijl checked exceptions zeer eenvoudig zijn om te implementeren binnen een taal.

[ Voor 17% gewijzigd door Alarmnummer op 07-04-2003 22:35 ]

Pagina: 1