Vinnaren i pepparkakshustävlingen!
2016-01-06, 17:38
  #1
Medlem
Tom.Of.Finlands avatar
Jag är klassisk C programmerare då jag håller på med hårdvara. Men jag håller på att lära mig Java. Jag kan grunden...Men jag stöter oftast på try catch throw exception i java. Jag har inte brytt mig så mycket förrän nu.

Oftast brukar jag få errormeddelandet NullPointerException t.ex när jag försöker läsa av något som inte existerar.

Hur ska då använda mig av try catch throw exception i java?
Citera
2016-01-07, 07:42
  #2
Medlem
Jag är inte helt med på vad du undrar, men jag gör ett försök att svara så får du fråga mer om jag missar bollen.

Java har två typer av Exceptions, Checked och Unchecked. Checked Exceptions är sådana som kontrolleras av kompilatorn. Det är exceptions som kan anses väntade och utvecklare kan anses ha ett vettigt svar på. SQLException och DataAccessException är en sådana exempelvis.

Unchecked Exceptions är sådana som på förhand inte kan anses givna. De dyker typiskt upp när en användarinput är inblandad. Exceptions som IllegalArgumentException, ArrayIndexOutOfBoundsException och NullPointerException är sådant som en utvecklare inte själv bör lyckas med, men ger man användaren i uppdrag att ge parametrar till en metod så kan man ge sig tusan på att denne misslyckas.

Använd try/catch-block när du förutser att exceptions kan kastas OCH du samtidigt har något "meningsfullt" att göra i catch-blocket. Använd det inte för att kontrollera "flöde", det ska tex aldrig ses som ett alternativ till en if-sats.

Om du har en metod som riskerar att orsaka exceptions som metoden själv inte kan hantera på ett meningsfullt sätt (kontextberoende) så bör/måste du inkludera en throws klausul i metoddeklarationen och överlåta jobbet med att fånga exceptionen det till den kallande metoden.

Kod:
public void myMethod() throws NullPointerException

Du kan också explicit kasta exceptions, även egendefinierade sådana som ärver Exception-klassen, genom
Kod:
throw new MyException()
Loggning av Exceptions är ofta väldigt värdefullt. Det går inte alltid att helt förutse Exceptions och då kan man heller inte hantera dem på ett meningsfullt sätt.
Citera
2016-01-07, 10:13
  #3
Medlem
rjonssons avatar
Oftast brukar man kontrollera så det inte är null
Kod:
if (myObject  != null
Citera
2016-01-07, 10:51
  #4
Medlem
Är inte jätteexpert på Java men gör ett försök på att besvara.

Just NullPointerException kan man hantera väldigt enkelt som ovanstående menar. Men tex jobbar man mycket med trådar kan man stöta på exceptions som InterrputedException. Man kan redan i metodhuvudet slänga bort exceptionen med att ange throws Exception tex:

Kod:
public void something() throws Exception

Detta medför då om du tex vill anropa something()-metoden, så måste du hantera att man kastar ett Exception, genom att du lokalt hanterar det som ett block genom try/catch/finally, eller att du i metodhuvudet där du anropar something() anger throws Exception. För att förtydliga:

Kod:
public void derp() {
       try {
	   something();
      } catch (Exception e) { 
	   System.out.println("Något gick snett");
      }
} 

Alternativt:

Kod:
public void derp() throws Exception {
        something();
}

I en try/catch-sats hanterar du alltså Exception lokalt i koden och att skriva throws i metodhuvudet så gäller det för hela metoden + att du måste hantera det slängda Exceptionet när du sen anropar metoden.
Något man också kan göra är att slänga ett Exception lokalt i koden med
Kod:
throw new Exception()
Oftast kan den brukas inuti en if-sats, där du vet att Exception kan inträffa. Hoppas jag har givit dig en klar bild. Är inte så bra på att förklara och inte jätteexpert på Java, så de som är mer kunniga kan väl eventuellt rätta mina fel
Citera
2016-01-08, 03:36
  #5
Medlem
- catch an exception only if you can handle it in a meaningful way.
- declare throwing the exception upward if it is to be handled by the consumer of the current method
- throw exceptions if they are caused by the input parameters (but these are more often unchecked)

edit: läs
__________________
Senast redigerad av negerbarnet 2016-01-08 kl. 03:40.
Citera
2016-01-17, 16:50
  #6
Medlem
Checked exceptions brukar orsakas av anledningar som är bort om programmerarens kontroll. Det kan vara en server man försöker ansluta till som är offline osv. Får man en sådan ska man fånga dom i en catch-sats och hantera problemet på ett vettigt sätt.

Unchecked exceptions o andra sidan, orsakas oftast på grund av din egen programmeringskod och du bör fixa till koden om du får en sådan istället för att hantera de i en catch-sats.
Citera
2016-01-20, 23:30
  #7
Medlem
Går det verkligen att fånga RuntimeExceptions? Try catch är smidigt vid IO operationer, felaktiga parametrar, ogiltiga värden
Citera
2016-01-21, 23:42
  #8
Medlem
rjonssons avatar
Ja, du kan fånga alla typer av exceptions, men checked exceptions måste du fånga.
Citera
2016-06-06, 02:33
  #9
Medlem
Kan rekommendera dig att läsa responsen till en fråga på Stack overflow angående try-catch. Skulle även föreslå att du kan läsa på lite om java.util.logging.Logger då man kan föra vidare loggning på olika varningsnivåer såsom warning, info, sever osv. Sedan brukar det såklart ingå att man kan logga mot olika output såsom stdout, filer och databaser mm. Finns även ett log bibliotek från apache (log4j) som nog erbjuder mer än vad Java i sig har.
__________________
Senast redigerad av guuurris 2016-06-06 kl. 02:37.
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback