Avatar billede Lasse Novice
31. marts 2009 - 00:17 Der er 12 kommentarer og
1 løsning

URL klasse

Hej

URL klassen under JBuilder smider "Unhandled exception type MalformedURLException" ved kald:

URL url = new URL("http://www.google.com/index.html");

Hvad mangler jeg?
Avatar billede arne_v Ekspert
31. marts 2009 - 03:46 #1
Der skal enten en try catch omkring eller en throws på metoden.
Avatar billede arne_v Ekspert
31. marts 2009 - 03:46 #2
import java.net.MalformedURLException;
import java.net.URL;

public class Ex {
    public void m1() throws MalformedURLException {
        URL url = new URL("http://www.google.com/index.html");
    }
    public void m2() {
        try {
            URL url = new URL("http://www.google.com/index.html");
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } 
    }
}
Avatar billede Lasse Novice
31. marts 2009 - 04:48 #3
Mit spg. gik mere paa, hvorfor kaster den en exception. Url'en eksisterer... skal man registrere http protokollen saaledes at URL klassen kan genkende den?
Avatar billede arne_v Ekspert
31. marts 2009 - 05:00 #4
Den smider vel ikke den exception når programmet køres. Det er vel en compile time fejl.

URL constructor kunne smide den exception (f.eks. ved "foo://bar"). Og compileren checker ikke strengen men kun constructor signatur.
Avatar billede Lasse Novice
31. marts 2009 - 05:06 #5
Jeg kommer fra .net verdenen, og er meget groen til java. Er faktisk lige startet idag. Exceptionen bliver smidt under runtime og linien understreges under compile time med meddelelsen MalformedURLException.

Skal man i Java proppe funktionskald i try catch blokke hvis funktionen kan smide en exception? Er det det som er fejlen?
Avatar billede erikjacobsen Ekspert
31. marts 2009 - 09:08 #6
Ja, i Java skal du generelt håndtere exceptions, og compileren hjælper dig med det. I .NET verdenen behøver du ikke.

Man kan diskutere hvad der er bedst. Argumentet for at skulle håndtere exceptions er, at man bliver tvunget til at tage stilling til hvad der skal ske, når der opstår fejl under kørsel. Det sikrer i princippet robuste programmer.
Avatar billede Lasse Novice
31. marts 2009 - 17:45 #7
Test viser at det er saadanne det virker. Svar => point.

Efter lidt tilvaenning, saa er det faktisk meget smart. Man kan ikke undlade at tage stilling til fejl.
Avatar billede arne_v Ekspert
31. marts 2009 - 18:03 #8
Bemaerk at Java har en undtagelse - exceptions der arver fra RuntimeException skal ikke haandteres paa denne maade.
Avatar billede erikjacobsen Ekspert
31. marts 2009 - 19:07 #9
"Man kan ikke undlade at tage stilling til fejl." - principielt korrekt, men praksis er måske anderledes.

Det er bøvlet, og ikke nemt, at håndtere exceptions, så man ser af og til (ofte?)

        try {
            //....noget
        } catch (Exception e) {
        } 

...altså: man har li'som taget hensyn til det, men kun for at få compileren til at holde mund. Derved kan der så opstå fejl andre steder i programmet, som er svære at fange.
Avatar billede arne_v Ekspert
31. marts 2009 - 19:38 #10
Med moderne IDE'er er det nemt at få sat de specifikke exceptions ind.

Og selvom håndteringen ikke altid er optimal, så fremgår det ihvertfald klart af koden at der er et problem.

Der er mange skrækhistorier om hvor galt det kan gå med brug af checked exceptions. Men jeg synes ikke at man ser de scenarier i den virkelige verden.

En af de store fordele ved checked exceptions er naar man definerer et interface foerst med nogle givne exceptions, saa kan klasserne der implementerer kun smide de (checked) exceptions og kalder faar dermed et noget mere stabilt interface, hvor man netop kan undgaa at skulle catche Exception.
Avatar billede Lasse Novice
10. august 2010 - 17:56 #11
Svar => point.
Avatar billede arne_v Ekspert
10. august 2010 - 18:02 #12
svar
Avatar billede arne_v Ekspert
10. august 2010 - 18:02 #13
Jeg gaetter paa at Erik ikke vil have point.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester