Java Programmering - 2. del

Tags:    java
Skrevet af Bruger #4487 @ 19.11.2010

Indledning


I denne del, forventer jeg at du ved hvordan man skriver en klasse, med en simpel main metode indeni. Jeg forventer også at du ved at System.out.println(); statementet kan udskrive ting til skærmen, og hvordan du laver kommentarer i din klasse. Hvis ikke du ved disse ting, vil jeg foreslå at du læse min artikel: Java Programmering - 1. del, inden du gennemgår denne her.
I denne del skal vi kigge på hvordan vi skriver en selvstændig klasse, og laver objekter af denne klasse til brug med vores main metode.

Vores første selvstændige klasse


En selvstændig klasse, kan man definere ved at den ikke har nogen main metode. Det har den ikke, fordi vi vil have at vi skal kunne lave objekter af denne klasse, til brug i vores program. En selvstændig klasse er altså også kendetegnet ved at man kan kalde metoder fra det objekt man laver ud fra klassen. Nu tænker du nok, det lyder meget godt alt sammen, men hvor starter jeg, og hvordan kommer jeg igang? Til dette skal vi først have styr på nogle små ting:
1. Felter/variabler og primitive datatyper.
2. konstruktører
3. almindelige metoder.

Felter og primitive datatyper


Et felt i Java programmering er et lille sted hvor vi kan gemme noget data midlertidigt (så længe objektet af klassen er aktiv). Når vi laver et felt og gør det klar, kalder man det at deklarere feltet til brug. Deklarere er synonym med udtrykket 'at klargøre', og det er præcis det vi gør, når vi deklarerer et felt. Det der præcist sker er, at når vi deklarerer et felt, fortæller computeren at den skal reservere et lille felt på hukommelsen, så den er klar til at gemme nogle data midlertidigt. Når man skal deklarere et felt, skal vi også altid fortælle hvilken type af data vi har lyst til at kunne gemme i dette felt, og til det skal vi kende til nogle primitive datatyper.

boolean - Er en datatype der kun kan indeholde true (sandt), eller false (falskt).
byte - Kan kun indeholde hele tal, mellem værdien -128 til 127
short - Kan kun indeholde hele tal, mellem værdien -32.768 til 32.767
int - Kan kun indeholde hele tal, mellem værdien -2.147.483.648 til 2.147.483.647
long - Kan kun indeholde hele tal, mellem værdien -9.223.372.036.854.775.808 til 9.223.372.036.854.775.807
float - Kan indeholde decimaltal, og har en rækkevidde af 1.40129846432481707e-45 til 3.40282346638528860e+38 (Både positiv og negativ).
double - Kan indeholde decimaltal, og har en rækkevidde af 4.94065645841246544e-324d til 1.79769313486231570e+308d (Både positiv og negativ).
char - Indeholder en unicode, mellem 0 til 65,535 (char er ikke det samme som byte, short, int og long).

Disse primitive datatyper kan vi bruge til at fortælle Java hvad vi gerne vil gemme i vores konkrete felt. De mest brugte af disse primitive datatyper er boolean, int og double. Når vi nu ved lidt om disse datatyper, så lad os gå tilbage og prøve og deklarere et felt i vores klasse. Allerførst lav en ny mappe på din computer, hvor vi skal gemme vores nye java filer, du kunne f.eks. kalde den 'Projekt1'. I den mappe lav en ny java fil, og gem den med navnet 'MinKlasse.java'. Lad os nu begynde at lave vores nye klasse, vi skal skrive public class MinKlasse, fordi vores java fil hed MinKlasse.java, og derfor skal vores klasse også hedde MinKlasse. Vores klasse ser nu således ud.
Fold kodeboks ind/udJava kode 

Herefter skal vi have deklareret nogle felter. Vi kan f.eks. lave et felt, som kan indeholde et helt tal (med datatypen int). Dette gøres ved at skrive dette statement - private int heltTal; - private skal du bare ignorere lige nu, men det næste int, er den datatype, som feltet skal kunne indeholde. Feltet kan altså kun indeholde hele tal, af typen int. Det sidste er feltets navn, og i vores eksempel er navnet altså heltTal. Bemærk at navne på felter altid starter med lille bogstav, derfor må du altså ikke skrive navnet sådan her - HeltTal - men kun sådan her - heltTal. Vores felt ser nu således ud i vores klasse.
Fold kodeboks ind/udJava kode 

Nu har vi deklareret et felt, der kan indeholde et helt tal, spørgmålet er så nu, hvordan lægger vi så data ind i dette felt?

Konstruktører


En konstruktør er en speciel metode i java, akkurat ligesom main metoden var en speciel metode. Konstruktøren har dog den forskel at hvor main metoden, skulle hedde main, så behøver konstruktøren ikke at hedde det samme altid. Konstruktøren skal dog derimod altid hedde det samme som din klasse, så vores konstruktørs navn i dette tilfælde skal altså være MinKlasse, fordi vores klasses navn var MinKlasse. Konstruktøren har den specielle egenskab at den automatisk bliver kørt, hver gang vi laver et objekt af en klasse. Derfor er konstruktøren ideel til at lægge indhold ind i vores felter, fordi den jo køres automatisk, hver gang vi laver et nyt objekt af denne klasse. Måden man skriver en konstruktør på er ved at starte med ordet public og herefter skrive klassen navn efterfulgt af to parenteser (åbning og afslutning). Det kunne se sådan her ud - public MinKlasse() - Herefter kan man give konstruktøren en krop, akkurat ligesom vi gav main metoden en krop, og ligesom at klassen også har en krop, nemlig med to krøllede parenteser. Vores kode ser nu således ud.
Fold kodeboks ind/udJava kode 

Nu har vi lavet en konstruktør, men lige nu gør den ikke noget. Som nævnt tidligere, er konstruktører ideelle til at lægge data ind i felter. Når man lægger data ind i felter, kalder man det en initialisation. En initialisation foretages ved at benytte noget man i programmering kalder en assignment statement (tildelings sætning på dansk). I teori ser en assignment statement således ud - felt/variabel = udtryk; - Lighedstegnet kaldes også en assignment operator (tildelings operator på dansk). Sådan en assignment statement skal altid læses fra højre mod venstre, fordi først skal vi lave vores udtryk, for derefter at tildele det til et felt/variabel. Hvis vi således gerne vil have tildelt et helt tal, f.eks. 100, til vores felt heltTal, skal vi skrive vores assignment statement således - heltTal = 100; - Dette assignment statement kan vi så skrive i vores konstruktørs krop. Vores kode ser nu således ud.
Fold kodeboks ind/udJava kode 

Nu har vi i konstruktøren initialiseret feltet heltTal, til at indeholde tallet 100. Det betyder at hver gang vi laver et objekt af klassen, vil objektet automatisk indeholde et felt der hedder heltTal, som har en initialiseret værdi der hedder 100.

Almindelige Metoder


Nu har vi beskæftiget os med 2 specielle metoder i Java, nemlig main metoden, men også konstruktøren. Vi kan selvfølgelig også lave vores helt egen almindelige metoder, med valgfrie navne o.lign. F.eks. kan vi lave en metode der henter indholdet af vores felt heltTal. Sådan en metode kaldes en Accessor metode, fordi den skal returnere en værdi. Der findes 2 typer af almindelige metoder:

Accessor Metoder - Er en type af metoder, som altid returnerer noget. Det kunne f.eks. være indholdet af vores felt heltTal.
Mutator Metoder - Er en type af metoder, som kan ændre indhold, eller udføre og vise indhold. Sådan en metode returnerer aldrig noget, i modsætning til en accessor metode.

Men tilbage til vores eksempel. Vi ville gerne lave en metode, som kunne returnere indholdet af vores felt heltTal. For at lave en accessor metode skal vi starte med ordet public (mere om hvorfor det skal være public senere). Herefter skal vi angive noget som man kalder en return type (returnerings type på dansk). Vores return type, skal være datatypen int, fordi vores felt heltTal, kun kan indeholde data af typen int, så kan vi kun returnere en int værdi. Herefter skal vi fortælle hvilket navn vi vil give vores metode efterfulgt af en åbnings og luknings parentes. Navnet er valgfrit, men det er altid en god ide at kalde ens metoder noget, så man nemt forstår hvad metoden gør. I vores tilfælde kunne vi jo kalde metoden for hentTal(). Vores accessor metode skrives nu sådan her - public int hentTal() - Denne linje kaldes også for en metodes hoved, eller signatur, så når jeg skriver public int hentTal(), har jeg altså givet dig en signatur til en en accessor metode, som returnerer en int værdi, og navnet på metoden er hentTal(). Efter metodens hoved skal vi selvfølgelig give den en krop, men for nu skal den bare være tom, og vores kode ser nu således ud.
Fold kodeboks ind/udJava kode 

Nu har vi lavet en accessor metode, som returnerer en int værdi. Men for at den kan returnere en værdi, skal vi i metodens krop skrive return, og herefter det som skal returneres. Så hvis vi skulle returnere indholdet i feltet heltTal, skal vi altså skrive - return heltTal; - Vores kode ser nu således ud.
Fold kodeboks ind/udJava kode 

Nu er vores selvstændige klasse færdig. Lad os nu lave endnu en ny klasse. Kald denne nye klasse for Main, og gem filen som 'Main.java'. I denne klasse, skal du lave en simpel main metode, og når dette er gjort vil vores Main klasse se således ud.
Fold kodeboks ind/udJava kode 

Nu er vores Main klasse klar til at kunne oprette nye objekter af vores klasse 'MinKlasse'.

Lav objekter af en klasse.


Når man skal lave objekter af en klasse, skal vi først deklarere et sted hvor vi kan gemme objektet. I vores eksempel skal vi ikke lave et nyt felt, men vi skal lave noget som man kalder en lokal variabel. En lokal variabel fungerer ligesom et felt, men hvor et felt eksisterede så længe objektet var aktiv, så eksisterer en lokal variabel kun så længe som metoden hvor den er deklareret i er aktiv. Når man skal deklarere en lokal variabel, behøver vi ikke at skrive private først, men vi kan nøjes med at angive en datatype og et navn. Datatypen i dette tilfælde skal ikke være en primitiv datatype, men vi skal bruge en klasse som datatype. Det skal vi fordi vi vil have at variablen skal indeholde data i form af objekter af typen for den specifikke klasse. Lad os se på vores eksempel. Vores klasse fra før hed MinKlasse, og vores mål var at lave et objekt af denne klasse. Derfor skal vi deklarere en lokal variabel, der kan indeholde data af typen MinKlasse. Vores klasse MinKlasse er pludselig blevet gjort til en datatype. Herefter kan vi give vores lokale variabel et navn, vi kunne f.eks. kalde den for objekt. Vores statement for den lokale variabel ser altså således ud - MinKlasse objekt; - Nu har vi deklareret en lokal variabel, og gjort den klar til at indeholde et objekt af klassen MinKlasse. Vores kode ser nu således ud.
Fold kodeboks ind/udJava kode 

Herefter skal vi initialisere vores lokale variabel. Når vi skal initialisere vores lokale variabel til at indeholde et objekt, skal vi bruge et nøgleord, som hedder new. nøgleordet new betyder at vi vil lave et nyt objekt. Efter nøgleordet new skal vi skrive navnet på vores konstruktør i klassen MinKlasse, og navnet på vores konstruktør er selvfølgelig MinKlasse(). Så vores initialisation ser nu således ud - objekt = new MinKlasse(); - og det ser således ud i koden.
Fold kodeboks ind/udJava kode 

Når vi har initialiseret vores lokale variabel objekt, med et objekt af klassen MinKlasse, kan vi begynde at kalde vores hentTal() metode ved hjælp af noget man kalder dot notation. I vores variabel objekt er der indlagt et objekt af klassen MinKlasse. Vi kan herefter skrive objekt.denMetodeViVilKalde(), så hvis vi vil kalde metoden hentTal(), skal vi altså´skrive - objekt.hentTal();. Dette vil returnere indholdet af feltet heltTal i vores objekt af klassen MinKlasse. Men for at udskrive indholdet til skærmen skal vi benytte vores statement - System.out.println(); - Hvor vi skriver vores dot notation i dette statements parantes. Vores fulde statement ser nu således ud - System.out.println(objekt.hentTal()); - Og i vores Main Klasse ser det sådan her ud.
Fold kodeboks ind/udJava kode 

Nu er vi så færdig med vores Main klasse. Gem så Main klassen som Main.java, og åben din kommandoprompt, og kompiler herefter først MinKlasse.java, for herefter at kompilerer Main.java. Efter kompileringen, udfører du så Main klassen, og resultatet i din kommandoprompt skulle gerne se således ud.



Vi kan nu se at vores resultat udskriver indholdet af feltet heltTal som er et felt i vores objekt af klassen MinKlasse.

String


Nu kan vi udvide vores program en lille smule. Åben din java fil der hedder MinKlasse.java. Nu skal vi lave en ny metode, som også skal være en accessor metode. Denne gang skal metoden returnere en String, altså en lille tekst, så vi skal altså returnere det som man kalder en String. Læg mærke til at en String ikke er en primitiv datatype, ligesom int var, men derimod en anden klasse. Fordi det er en klasse, skal vi skrive String med stort, men ellers fungerer det ligesom en primitiv datatype. Så vores metodes signatur kan se sådan her ud - public String hentTekst() - Vi skal så selvføleglig huske nøgeleordet return i metodens krop. Vores kode i MinKlasse ser nu sådan her ud med den nye metode.
Fold kodeboks ind/udJava kode 

Vi skal nu angive hvad der skal returneres, og til dette formål, kan vi deklarere en lokal variabel. Vores lokale variabel, skal have datatypen String, da vi gerne ville kunne lave en variabel, der kan indeholde data af typen String (altså tekst). Herefter skal vi give den et navn, vi kunne f.eks. kalde variablen for str (forkortelse af String). Efter deklarationen, kan vi initialisere vores lokale variabel til at indeholde en tekst (husk at tekst skal skrives indenfor 2 gåseøjne). Vores tekst kunne f.eks. være "Programmering er sjovt!". Til sidst skal vi så returnere vores lokale variabel, og det gøres ved at skrive - return str; - Vores kode ser nu således ud.
Fold kodeboks ind/udJava kode 


Udfordings Opgave - Vi kan nu i vores Main.java fil, lave endnu en system.out.println(); statement også bruge dot notation til at kalde metoden hentTekst(). Gør nu dette, kompiler nu begge dine java filer (MinKlasse og Main), hvorefter du ufører Main filen i kommandoprompten. Udskrev din kommandoprompt nu både indholdet af feltet heltTal, og din lokale variabel str i hentTekst() metoden? Hvis ikke, så sammenlign din kode med min, og prøv igen.
Fold kodeboks ind/udJava kode 

Outputtet i kommandoprompten skulle gerne se således ud.



Opsummering


Lad os lige gennemgå hvad vi har kigget på i denne anden del.

1. Vi har lært at deklarere felter, og hørt om de forskellige primitive datatyper.
2. Vi har lært hvordan man laver en konstruktør, og kan bruge den til at initialisere vores felter, hver gang vi laver et objekt af klassen.
3. Vi har hørt om accessor metoder og kort om mutator metoder (mere om dette i en anden del), og ved at en accessor metode altid returnerer en værdi, men hvilken slags værdi den returnerer er angivet via dens return type.
4. Vi har lært hvordan man kan lave objekter af andre klasser, ved hjælp af nøgleordet new, og derved få adgang til dette objekts metoder, med dot notation.

Hvis du har mod på at lære noget nyt allerede nu, så fortsæt til del 3 i denne kavalkade af artikler der hjælper dig med at programmerer i Java. Hvis du ikke syntes du er klar til noget nyt endnu, så prøv at lave en helt ny klasse med et eller måske flere felter, og så en accessor metode til hvert af felterne, og i din Main klasse, lav så et kald til disse metoder akkurat som vi lige har gennemgået i denne anden del.

Hvad synes du om denne artikel? Giv din mening til kende ved at stemme via pilene til venstre og/eller lægge en kommentar herunder.

Del også gerne artiklen med dine Facebook venner:  

Kommentarer (0)

Du skal være logget ind for at skrive en kommentar.
t