Java del 2

Tags:    java
Skrevet af Bruger #2796 @ 05.10.2003

Indledning


Denne artikel er nummer 2 i serien, og omhandler: primitive typer, operatorer og String klassen. Grunden til at String klassen også tages med i denne artikel, er fordi den bruges så meget i java, så den er et uundværligt redskab, og derfor er der mange der tænker på den som en primitiv type.
Grunden til at jeg ikke tager flere ting med i denne artikel, er fordi jeg mener at du lige skal vide hvad det helt grundlæggende er, inden du springer ud i at lave Windows ;)

Primitive typer


Der findes et stort antal primitive typer i java. Disse primitive typer, er forskellige fra resten af sproget, da de ikke er objekter. Med det mener jeg, at en primitiv type, til forskel fra f.eks. String klassen ikke arver fra Object-klassen, som er det alle klasser, bevidst eller ubevidst, arver fra.
De primitive typer er følgende:

boolean - enten true, false (også en int type: 0, 1)
byte - en type af int, der rummer tal i mellem -128 til 127
char - 16 bit unikode som går imellem \\u0000 til \\uFFFF
short - en type af int, der rummer tal i mellem -32768 til 32767
int - heltal der rummer tal i mellem -2147483648 til 2147483647
long - heltal der rummer tal i mellem -9223372036854775808 til 9223372036854775807
float - decimaltal der rummer tal i mellem cirka +/- 10^39
double - decimaltal der rummer tal i mellem cirka +/- 10^317

Disse primitive typer, er dem der danner grundstenene i dine programmer. Nu sprøger du måske dig selv, hvilken af int typerne skal jeg bruge? Når du starter med at programmerer, vil jeg bare foreslå dig at bruge int. De andre heltal begynder du først at anvende enten når du skal optimere et program, eller når du skal arbejde med virkelig store/små heltal.

Med hensyn til decimaltyperne vil jeg da foreslå at du bruge double. Grunden til dette, er at du har den største precision, og derved er "sikker" på at du får det mest rigtige tal når du laver en udregning.
Problemet med at bruge decimaltal til at repræsenterer heltal er, at hvis du ligger heltallet 1 ind i double, kan det ske, at det bliver repræsenteret som 0,999999... Men det er ikke noget du skal tænke over lige nu, jeg ville bare lige nævne det.

Hvis du har læst Java del 1 (http://www.udvikleren.dk/article.php?aid=150 ) så du hvordan man tildelte og initialiserede variabler. Men ellers kommer det lige igen:
Fold kodeboks ind/udKode 


Det vil sige, at når der skal oprettes en variabel, skal man først skrive typen, derefter navnet og en eventuel værdi.
Variablen tal, af typen int, har derfor værdien 2.

Når du sidder og skal lave et program, bruges der tit tal af typen int, men sommetider, bliver der også brugt double (float bruges egenligt ikke så tit...). Hvis du nu vil konvertere en double variabel om til en int, så skal du være forberedt på, at du ikke kan få hele tallet over i int variablen. Dette er fordi at double ikke er et heltal ligesom int. Derfor mister du alle tallene efter kommaet. Et eksempel følger:
Fold kodeboks ind/udKode 

Dette har nu foresaget, at heltallet indeholder værdien 234, men ikke tallene efter kommaet (0,12). Dette skal du være klar over, når du konverterer et decimaltal om til et heltal, da det kunne være at du skulle bruge tallene efter kommaet til noget senere i dit program alligevel.

Hvordan bruges boolean så? Den bruges på følgende måde:
Fold kodeboks ind/udKode 

Her sættes den bolske variabel erJegSand til at være falsk (false). Bolske variabler kan bruges, når der f.eks. skal tjekkes om man har fundet et bestemt tal i en samling af tal. Hvis man har fundet tallet, sættes den bolske variabel til at være sand (true) og hvis tallet ikke findes, sættes den til at være falsk (false). Jeg kommer ikke med noget eksempel her, da denne artikel ikke vil omhandle if/else, men jeg ville lige fortælle hvor en bolsk værdi kunne bruges henne.

String


String klassen bliver brugt, næsten ligeså meget som de primitive typer. Grunden til dette er, at en String (Streng) kan indeholde almindelige bogstaver og hele sætninger. Derudover kaples dette ind i et objekt, og der kan så bruges forskellige funktioner til at lave noget med dette String objekt.

Et eksempel på en String er, kan være at du vil gemme ordet "hello world"
Fold kodeboks ind/udKode 

Nu indeholder variablen ord så ordet "hello world". Eller mere præcist sagt: Siden String er en klasse som der kan oprettes en instans af (et objekt), indeholder variablen ord en reference til et String objekt.

Jeg håber ikke dette forvirrede dig mere end det gavnede, med det skulle lige siges.

Hvis du er gammel c++ haj ( læser du nok ikke denne artikel ), er du derimod klar over hvordan man lavede en String (streng) i gamle dage... Dette skete nemlig ved at lave et array af char's som der så tildeles en værdi. Dette var så en streng. Dette er imidlertidigt gjort meget lettere i java (og også i c++ nu), ved at der er lavet en decideret String klasse, som gør dette for dig.
Derudover kan du også bruge en række indbyggede funktioner i String klassen, som gør dit programmeringsarbejde meget nemmere.

Denne metode kunne f.eks. være: find længden af din String. Dette gøres ved at kalde en metode i String klassen som hedder length(). Denne metode returnere så længden af din String.

Fold kodeboks ind/udKode 

laengde indeholder nu tallet 9, og er længden af din streng.
Ikke mere om de forskellige klassers metoder, men jeg ville lige nævne hvad forskellen på String og de primitivetyper var.

Hvad er operatorer?


En operator er f.eks. + (plus). Denne operator bruges normal når der skal ligges to tal sammen, men i java kan den også bruges til at ligge to strenge sammen.
De operatorer som man bruger i java er:
+ (plus)
- (minus)
* (gange)
/ (dividere)
= (lig med)
< (mindre end)
> (større end)
Disse operatorer bruges af dig overalt i dine programmer. Derudover kan du kombinere flere af disse operatorer, f.eks.: mindre end eller lig med: <= og du kan også lave en: X = X + 2 om til: X += 2. Alle disse små finurligheder er ikke noget jeg regner med at du begynder at anvende fra starten af, men de er rare at kende, hvis du læser en andens kildekode igennem.

Operatorer bruges, som vist, til aritmatiske udtryk ( a = 2 +2 ), men de kan også bruges i andre situationer. F.eks. nå du skal sætte to tekststrenge sammen med hinanden.

Eksempel:
Det kan f.eks. være at du har to tekststrenge:
Fold kodeboks ind/udKode 

Du vil gerne have at disse to strenge skal blive til én, da du skal bruge denne ene tekststreng på et andet tidspunkt. For at gøre dette skal du bruge en af de før angivne operatorer. Denne operator er plus (+). Dette gøres på følgende måde:
Fold kodeboks ind/udKode 

Hvis du vælger at udskrive den sammenlagte streng, kommer outputtet: hej verden. Dette vil sige, at tekststrengen sammenlagt nu indeholder de værdier som tekst1 og tekst2 havde tilsammen.

Hvis du ønsker at kombinere en tekststreng og en int værdi med hinanden, skal du gøre det på næsten samme måde som vist lige før.
Fold kodeboks ind/udKode 


Her blev der også brugt + operatoren, ligesom før. Derudover blev der også sat en tekststykke direkte i enden af sammenlagt variablen. Dette blev gjort vha. += operatoren. Grunden til at jeg brugte denne her, var for at vise dig, at denne ikke kun virker til tal, men også til tekststrenge.

Operatorer ligger ikke kun værdier sammen, men bruger også til at tjekke om nogle udtryk er sande (true), falske (false) eller lig med (==). De operatorer som der bruges til dette er følgende:
< (mindre end)
> (større end)
== (lig med)
<= (mindre end eller lig med)
>= (større end eller lig med)

Nu kan det være at du spørger dig selv, hvor skal disse operatorer så bruges henne? Mit svar til dig er så, at dette vil jeg komme ind på i den næste artikel (java del 3).
Men for lige at vise hvad == er for noget, er her en beskrivelse:
== bruges, som sagt, når der skal tjekkes om et tal er lig med et andet. Dette bruges f.eks. når man skal udskrive løn til en medarbejder. Hvis denne medarbejder har lavet noget overarbejde, kan dette stå på en anden "konto". Derfor skal der tjekkes om medarbejdere fra den "almindelige løn konto" også findes på "overarbejds kontoen". Hvis medarbejderen nummer (f.eks. cpr nummeret) er ens (==) skal der skrives overarbejde penge over på hans konto.

Dvs. at jeg her brugte == operatoren til at tjekke om det var den samme medarbejder som der havde lavet overarbejde, som vi var igang med at udskrive løn til.

Afsluttende bemærkning


Dette var hvad jeg havde tænkt mig at vise dig i denne artikel, og jeg håber at du kunne bruge det til noget.
Hvis alt dette har givet dig lidt blod på tanden, kan du altid melde dig ind i [dot]java gruppen her på udvikleren, hvor der bliver givet udfordringer ud, som man kan løse eller bare se på. Derudover bliver der også postet lidt nyheder, som enhver java programmør kan finde anvendeligt.

Derudover håber jeg at du kunne bruge artiklen, og at du vil læse den næste jeg er gået i gang med at skrive.

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 (12)

User
Bruger #4522 @ 05.10.03 20:30
Det var en ganske fin artikel. Dog lige en kommentar.
Du skriver:
"boolean - enten true, false (også en int type: 0, 1) "
Dette er ikke rigtigt. I Java er boolean ikke en int type - der kan ikke konverteres mellem talværdier og boolske værdier, selv ikke med en cast.
User
Bruger #285 @ 06.10.03 09:58
Er der ikke også en operator i Java (som der er i PHP), der er === (altså både tjek af indhold og type)?
User
Bruger #4522 @ 06.10.03 16:04
Java har instanceof operatoren, hvis det er den du tænker på.
User
Bruger #285 @ 06.10.03 18:30
Det ved jeg ikke, om det er - har ikke leget ret meget med java...
User
Bruger #2796 @ 07.10.03 00:10
Jacob Rohde har ret, hvis du kun vil have at den skal kigge på objektets type...
Men det var ikke det?
User
Bruger #2397 @ 08.10.03 11:58
Lige et par hurtige kommentarer:

1. Du skriver:

// først initialisere vi strengen
String ord = "";
// derefter tildeler vi den en værdi
ord = "hello world";

Dette er ikke helt korrekt, idet du allerede i den første linje opretter et ikke "muterbart" streng objekt med værdien "" og tildeler dette objekt til variablen ord. Linje nr. 2 opretter endnu et ikke muterbart streng objekt med værdien "hello world" som tildeles variablen ord.

Følgende altså ækvivalent med det originale:

String ord = new String("";);
ord = new String("hello world";);

2. Operatoren = er ikke en "lig med" operator, men en assignment operator.

3. (Kommentar til mikl-dk) Java er et stærkt typet sprog og siden (næsten) alle aritmetiske og boolske operatorer kun fungerer sammen med primitive typer er det ikke noget behov for en === operator som man ser i php.

Den eneste operator som også kan bruges i forbindelse med objekter er den boolske operator == (lig med). Men til forskel fra primitive typer sammenlignes ikke objekternes indhold, men deres adresser i lageret. Et udtryk Objekt1 == Objekt2 er altså kun sandt hvis Objekt1 og Objekt2 har samme fysiske placering i lageret og dermed bare er 2 referencer til samme fysiske objekt. Det er en klassisk begynderfejl at benytte == til at sammenligne objekter.

Som Jacob Rohde skriver kan man anvende (instanceof) operatoren, hvis man vil kontrollere om 2 objekter er samme objekttype eller subtype i forbindelse med nedarvning.

Vil du kontrollere om 2 objekter er ækvivalente (samme indhold) bliver du selv nødt til at implementere dette som en metode i selve objektet. Skal du eksempelvis kontrollere om 2 strenge er ens bliver du nødt til at bruge String klassens equals() metode, dvs String1.equals(String2).
User
Bruger #2397 @ 08.10.03 12:15
Ellers en ganske udemærket artikel :o)
User
Bruger #4503 @ 09.10.03 14:52
God artikel... Det er første gang jeg kikker på Java og det minder overraskende meget om C++
User
Bruger #3353 @ 29.03.06 17:29
god artikel men jeg syntes at du lovede en del 3?
User
Bruger #2796 @ 29.09.06 10:15
til "Smurf Killer": jo, men efter det nye system er kommet her på udvikleren, er artikel 3,4,5 blevet slettet, da de ikke færdige artikler er blevet ført med over...
User
Bruger #11989 @ 13.06.07 13:43
Julietlovelove1@yahoo.co.uk
Hello dear new friend,
how are you today i hope that every things is ok with you as is my pleassure to contact you after viewing your profile which really interest me in having communication with you if you will have the desire with me so that we can get to know each other better and see what happened in future.
i will be very happy if you can write me through my email for easiest communication and to know all about each other,here is my email (Julietlovelove1@yahoo.co.uk) i will be waiting to hear from you as i wish you all the best for your day.
yours new friend.
Juliet
User
Bruger #14855 @ 10.06.09 20:21
Sker der lige for hende Juliet :S?
Du skal være logget ind for at skrive en kommentar.
t