Java lathund #2 - Klass och main-metod
Förord
Vad är en klass för något och vad betyder koden i föregående artikel Java lathund #1 - Hello World? Dessa frågor ska jag försöka besvara med denna artikel.Innehåll
»»
»
»
»
»
Relaterade artiklar
» Java lathund #1 - Hello WorldKom igång med Java – Klass och main-metod
Förord
Hejsan!
Denna artikel är en fortsättning på min tidigare artikel ”Java lathund – Hello World”. Här ska vi gå igenom lite grundläggande saker i Java som klass och main-metod.
Klasser
Som tidigare nämnt består Java applikationer av ett antal samverkande objekt, vilka beskrivs med hjälp av s.k. klasser.
Vad är då en klass?
Jo, vi kan försöka föreställa oss en klass som en ritning över något, t.ex. ett hus. Om vi antar att grundstommen för alla hus ser likadana ut kan vi skapa en generell ritning över detta hus, en klass.
Med hjälp av den generella klassen (ritning) kan vi nu skapa (bygga) ett flertal olika hus. Kanske ett hus som är rött, ett hus som har jacuzzi, ett hus som är grönt o.s.v.
Dessa hus som vi skapar med hjälp av våran klass (ritning) kallar vi objekt. Alla objekt har olika identitet, en s.k. objektidentitet. Jämför med om vi bygger två identiska hus bredvid varandra; är det då samma hus? Uppenbarligen inte, men de är lika. Detsamma gäller när man skapar objekt från en viss klass, de kan vara lika när det gäller dess egenskaper men de är inte samma objekt.
Jag nämnde att objekt kan ha egenskaper. Detta innebär att en klass (ritning) är beskriven av dess attribut och metoder. Ett attribut är en variabel som vi definierar i klassen. Det skulle kunna vara en sträng som beskriver husets färg. En metod beskriver vad för operationer denna klass kan utföra på sina objekt.
Detta kanske är svårt att förstå så här i början, men jag ska försöka att beskriva med ett exempel:
Ex:
Anta att vi skapar ett gult hus, d.v.s. ett objekt utifrån vår klass ”Hus”. Attributet skulle då kunna vara en sträng-variabel som beskriver vilken färg huset har. Vilka operationer skulle vi då kunna utföra på huset? En operation skulle kunna vara: ”Sänka värmen i huset”, eller hur? Det kan ju en varm sommardag vara intressant om man kunde sänka värmen i huset.
Denna operation skulle vi då definiera som en metod i vår klass ”Hus”.
Nu tror jag att Ni har ett litet grepp om vad en klass är i Java och andra objektorienterade språk. Låt oss ta ett kodexempel:
class Hus {
}
Ovanstående kod visar definitionen av ett klass-block. Inom ”ramarna” för klass-blocket definierar man klassens attribut och metoder, d.v.s. dess egenskaper.
Alltså, man börjar med det reserverade ordet class följt av ett klassnamn och en ”måsvinge”. Observera att Java är case-sensitive. Detta innebär att Class inte är det samma som class! Vi avslutar vårat klass-block med en ytterligare ”måsvinge”.
I Java är det endast tillåtet att klassnamnen börja på ’_’, ’$’ och bokstäverna ’a…z’ (a t.o.m. z). Siffror får alltså inte inleda ett klassnamn. Däremot får det förekomma efter det första tecknet i klassnamnet.
Ex:
_minKlass = Ok!
hejsan = Ok!
2hus = Fel!
&bil = Fel!
$pengar = Ok!
Älg = Fel!
Min2aKlass = Ok!
Antag att vi vill ha ett attribut (variabel) i vår klass som beskriver dess färg. Det kan se ut så här:
class Hus {
String color;
}
I Java beskriver vi attribut genom att först skriva vilken datatyp som attributet skall ha (i detta fall en sträng), och sedan vad vi vill kalla vårat attribut (mer om datatyper kommer i nästa artikel).
Observera!
Namnet på variabeln, i detta fall color, lyder under samma konventioner som för klassnamn.
Låt oss nu säga att vi vill ha en metod (operation) som har egenskapen att sänka värmen i vårt hus. Denna metod definierar vi precis som attributet inom klass-blocket på följande sätt:
class Hus {
String color;
void sankaVarmen() {
// Kod för att sänka värmen…
}
}
Ovan har vi nu definerat en metod i våran klass ”Hus”.
En metod som inte returnerar ett värde börjar med void. Därefter följer ett metodnamn som lyder under samma konventioner som för klassnamn. Sedan har vi två paranteser och den startande ”måsvingen” och den avslutande ”måsvingen” som säger att ”här startar metoden” och ”nu är metoden slut”. Mer om metoder kommer att komma i framtida artiklar.
Låt oss nu gå vidare in på vad en main-metod innebär…
Main-metod
I den föregående artikeln ”Java lathund – Hello World” skapade vi en liten klass som heter ”HelloWorld”. Denna klass saknar attribut och metoder. Men vänta, saknar den verkligen metoder?
Njae, den innehåller ingen metod som beskriver en egenskap hos klassen, men den innehåller en main-metod.
Koden från föregående artikel ser ut så här:
class HelloWorld {
public static void main(String[] args) {
System.out.println(“Hello World!”);
}
}
Vad är då en main-metod?
Jo, man skulle kunna säga att en main-metod är lik en startmotor på en bil. Den ”startar igång” vår Java applikation. Alla klasser som innehar en main-metod kan således startas från kommandotolken (MS-DOS fönster). Skulle Ni ha utelämnat main-metoden i ovanstående kod kommer Ni inte kunna starta klassen.
Ska vi gå igenom metodens utseende lite närmare? Ja, jag tycker det.
Det första som står i vår main-metod, public, är en s.k. åtkomstmodifierare. Den säger vilka som är behöriga att köra denna metod. Vi ska inte gå in på det nu vad det innebär exakt, utan Ni får godta ovanstående beskrivning så länge.
Det nästkommande som står är static, vilket är en modifierare som säger att vi kan anropa metoden utan att vi först har skapat ett objekt av klassen. Vilka förstod det där?
Jo, för att anropa metoder i ett objekt måste vi ju först ha ett objekt, eller hur? Vi kan ju inte sänka värmen i ett hus som inte existerar. Det verkar ju vettigt.
Då så, för att starta en klass måste vi ju först säga åt klassen att ”start igång dig själv” eller ”skapa ett objekt av dig själv”. Detta görs ju då innan vi har ett objekt, därav modifieraren static.
Sedan har vi void vilket betyder att denna metod inte returnerar ett värde och till sist har vi metodnamnet. Följande så har vi de obligatoriska paranteserna som varje metod ska ha, men i denna metod har vi angett att vi kan ta en inparameter till vår metod av datatypen String.
Det var inte hela sanningen. De två hakparanteserna efter datatypen String är definitionen av en array. D.v.s. att vi kan ta emot en array av datatypen String.
Inparameterns namn har vi döpt till args. Denna skulle lika gärna kunna heta: inparameter, valet är ditt.
Till sist har vi den startande måsvingen som säger att ”metoden startar här” och den avslutande måsvingen som säger att ”metoden slutar här”.
Mellan de två måsvingarna för metoden placerar vi koden för vad metoden ska utföra, i detta fall ska vi skriva ut strängen ”Hello World!” till kommandotolken (MS-DOS fönstret).
Summering
I denna artikel har Ni fått se vad en klass innebär för något. I stort sett allt i Java definieras i s.k. klasser vilket kan ses som generella ritningar på något.
Ni har också fått se vad en main-metod är, hur den är uppbyggd och vad den har för innebörd.
Troligtvis har jag skapat många frågor hos Er, men de kommer förhoppningsvis att bli besvarade med följande artiklar inom ämnet Java.
Referenser
Skansholm, J. (1999). Java Direkt (2:a rev. Uppl.). Lund: Studentlitteratur.
Roberts, S., Heller, P., & Ernest, M. (2000) Complete Java 2 Certification Study Guide (2nd Ed.). Alameda CA: SYBEX.
Om skribenten…
Andreas Eriksson arbetar idag som frilandskonsult med bl.a. distribuerad programmering och systemutveckling i Java. Han har tidigare föreläst på bl.a. Högskolan i Gävle inom objektorienterad databasutveckling med språket Java som verktyg.
Han har mångårig erfarenhet av utveckling i Java och är sedan 2002 Sun Certified Java Developer for the Java 2 Platform.
Maila mig gärna för kommentarer.
ingrid guillermo
läser java på distans, heltid och högskola, och detta du redovisade nu gjorde att bitarna föll mycket bättre på plats.