programmera.net -> java -> normal     för utskrift      info@programmera.net

Om Java

1. Allmänt
2. Bytekod
3. Objektorienting
4. Sopsamlare
5. Undantag
6. Standardiserade hjälpklasser
7. Gränssnitt
8. Java EE

1. Allmänt

Java uppkom som en förbättring av C++, och därför kommer jag att på denna sida jämföra Java med C++. Huruvida Java ÄR en förbättring av C++ är svårt att svara på. Jag tror att vissa problem löses bäst med Java, som till exempel applikationer som har en databas i grunden. C++ är fortfarande det språk som används mest då man vill att programmet ska exekvera så snabbt som möjligt. Spel är ett exempel på program som måste gå riktigt snabbt.

2. Bytekod

Java är ett programmeringsspråk som har egenheten att det kompileras till bytekod istället för maskinkod. Bytekoden kan installeras på nästan alla operativsystem, om det bara finns en JVM (Java Virtual Machine) installerad på den aktuella datorn. I till exempel C++ måste koden kompileras för varje operativsystem, men det slipper man alltså i Java. Numera kan Java också kompileras till maskinkod. Till exempel kan GCC 3.0 kompilera Java till maskinkod.

3. Objektorienting

Java är helt objektorienterat, vilket skiljer språket från C++ som är delvis objektorienterat. Objektorentering är en programmeringsparadigm som går ut på att man ska gruppera programkoden efter vilka data som behandlas, inte efter funktionalitet. Man tänker i termer av substantiv istället för verb. När man programmerar Java skriver man Klasser som är ett slags regel för hur ett objekt ska se ut. När programmet väl startar skapas Objekt utifrån dessa klasser. Objekten är de som innehåller de data som programmet arbetar med.

4. Sopsamlare

I Java behöver man inte allokera minne för de objekt man vill skapa, det gör JVM automatiskt. Man behöver inte heller bry sig om att frigöra minnet då man kastar ett objekt, även det klara JVM själv. JVM har nämligen en sopsamlare som letar upp döda objekt och lämnar tillbaka det minne de har tagit upp till processorn. På detta sätt slipper man en del buggar som uppkommer genom att programmeraren glömmer att lämna tillbaka allt minne då det inte används. Utvecklingstiden för applikationen blir kortare och programmet alltså billigare.

5. Undantag

I C++ returnerar en funktion som gjort något dumt ett minusvärde, och genom att kontrollera detta värde kan man fånga upp fel. Ett fel kan t. ex. vara att programmet försöker läsa en fil som inte finns. I Java har en ny typ av felkontroll införts som underlättar uppfångandet av fel, nämligen undantag (exceptions). I Java finns två typer av undantag:

  • Exception är ett fel som bara kan inträffa i ett try-block. Om ett fel inträffar kommer en catch-sats fånga felet och först nu avgör man vad som ska göras, ett alternativ är att skicka felet vidare till högre instans. Denna omskrivning underlättar hanterandet av fel.
  • RuntimeException är ett fel som kan inträffa var som helst. När ett runtimefel inträffar utanför ett try-block avbryts programmet och felet visas på skärmen. Ett exempel är ArrayIndexOutOfBoundsException, ett fel som i C++ inte uppmärksammas alls.
Detta felhanteringssystem är kanske den största nyheten i Java, och kanske orsaken att Java har fått sådan spridning inom områden där krav på säkerhet är stora, som banker och sjukhus. Programmeringsfel kan kosta liv!

6. Standardiserade hjälpklasser

I Java finns en ruskig mängd paket (innehållande en grupp klasser) med färdigskrivna klasser som besparar programmeraren en massa jobb. Att dessa paket är inbyggda i utvecklingsmiljön (SDK) innebär att Javakod är mer standardiserad än kod i C++. Till exempel har Java en inbyggd HashMap-klass, och genom att lära sig hur den fugerar kan man snabbt sätta sig in i andra programmerares kod, eftersom de troligtvis har använt sig av denna.

7. Gränssnitt

Om vi håller oss kvar vid klassen HashMap förstår vi enklare gränssnittets betydelse. Om man efter några år vill byta ut HashMap mot en mer effektiv klass ImprovedMap, så går detta smärtfritt eftersom alla klasser som implementerar gränssnittet Map har samma metoder som HashMap. Om man skapar objektet som Map går det enkelt att ersätta:
Map m=new HashMap();
Den enda förändring som sedan måste göras är att byta new HashMap(); mot new ImprovedMap(); för att börja använda den nya klassen.

8. Java EE

Den vanligaste användningen för Java (år 2005) är för att bygga internetapplikationer. Standarden för hur dessa ska se ut heter Java EE (Java Enterprise Edition). Programmera.nu har en underavdelning som bara handlar om  Java EE .