2013-07-18 10 views
7

Scusami per la mia mancanza di competenze Java, ma normalmente sono un tipo di persona C. Sto iniziando qualche sviluppo Android e voglio semplicemente fare una richiesta GET. Tuttavia, non riesco nemmeno a ottenere un semplice tipo di URL per compilare correttamente. Continuo a ricevere questo errore:eccezione non dichiarata MalformedURLException durante la creazione di un URL

HelloWorld.java:17: error: unreported exception MalformedURLException; must be caught or declared to be thrown 
URL url = new URL("http://www.google.com/"); 
^ 
1 error 

Quando si esegue questo semplice codice:

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.io.OutputStream; 
import java.io.OutputStreamWriter; 
import java.io.Reader; 
import java.io.Writer; 
import java.net.HttpURLConnection; 
import java.net.ProtocolException; 
import java.net.URL; 
import java.net.URLConnection; 

public class HelloWorld{ 

    public static void main(String []args){ 
     URL url = new URL("http://www.google.com/"); 

     System.out.println(url.toString()); 
    } 
} 

che cosa sto facendo male qui?

+2

Inserisci tutta la tua URL 'url = ...' nel blocco 'Try-Catch'. –

+0

Oh ok .. Tutto il codice Java richiede questo? –

+1

@Matt La maggior parte delle volte sì.Personalmente, penso che le eccezioni siano terribili e che il codice appaia davvero brutto e possa portare a cattive decisioni di progettazione – dougEfresh

risposta

16

Per tutti controllati eccezione, diventa obbligatorio gestirli nel codice. qui ci sono 2 modi per farlo.

in generale, è possibile passare la gestione delle eccezioni al chiamante del metodo di dichiarazione utilizzando la clausola throws. oppure puoi gestirli da solo utilizzando il costrutto try-catch[-finally].

nel tuo caso, vi sia bisogno di aggiungere throws clausola main() Metodo

public static void main(String []args) throws MalformedURLException {

o è necessario circondare dichiarazione URL con try-catch blocco, come qui:

try{ 
    URL url = new URL("http://www.google.com/"); 
    //more code goes here 
}catch(MalformedURLException ex){ 
//do exception handling here 
} 
+0

Penso che tu intenda le eccezioni controllate, così chiamate come il compilatore verifica se le hai rilevate o esplicitamente dichiarate, al contrario delle RuntimeException non controllate. –

+0

@MarkRotteveel oops. è corretto. – Ankit

+1

Proprio come una nota a margine (dal momento che l'OP ha dichiarato che sono di novità in Java) l'eccezione di lanci va su qualunque metodo il codice sia, e quindi deve essere catturato o riscritto dal metodo genitore da cui è stato chiamato quel metodo. Ad esempio, se hai fatto la tua dichiarazione URL nel metodo 'setURL()', potresti lanciare un'eccezione su quel metodo ('public void setURL() genera Exception {...') e poi prendilo dove 'setURL(); 'viene chiamato da, oppure puoi rilanciare l'eccezione anche a quel livello di metodo. Il più grande problema (che io sappia) con il lancio/il rilancio è che rende più difficile trovare bug. – DGolberg

1

Costruttore di URL dichiara che potrebbe generare un'eccezione quindi è necessario prendere o passi indietro


Vedi

3

In java, è deve gestire le eccezioni. Il modo più semplice per fare questo in un programma di esempio di questo tipo è di dichiarare main() buttare:

public static void main(String []args) throws Exception { 

va sulla vostra formazione, e affrontare i problemi di gestione delle eccezioni in seguito.

+0

È necessario gestire solo eccezioni controllate. –

+0

OP sta imparando. Rendilo semplice e la complessità verrà più tardi dall'uso. – PaulProgrammer

+0

È una distinzione davvero importante, soprattutto se sei nuovo in Java. Meglio impararlo presto –

0

dovete avvolgere la dichiarazione URL all'interno di un try-catch (o gettarlo)

Read more about exception handling.

URL url; 
try { 
    url = new URL("http://www.google.com/"); 
} catch(MalformedURLException e) { 
    System.out.println("The url is not well formed: " + url); 
} 

questo è perché la creazione di un URL è "pericoloso", e la creazione di qualcosa di simile:

new URL("testurl"); 

solleverà un'eccezione.

Problemi correlati