Java/Arkiv

Fra Wikibøker – frie læremidler
Hopp til navigering Hopp til søk

Denne boken er akkurat begynt på, og ikke veldig brukbar ennå.

Det er flott om flere vil bidra med innhold til denne boka. 
Send gjerne tips om hvordan jeg kan brukes wikibooks på en bedre måte,
Utviklingsfase: 25% (ved 10.jan 2006) Trond

Har du lyst til å lære å programmere? Denne boken har som mål å gi deg en innføring i Java programmering. Er du i tvil om Java er det rette språket for deg, kan det være lurt å ta en titt på Litt om Java. Der vil du få en kort innføring i hva Java er og kan brukes til.


Java er plattform-uavhengig. Når man programmerer innenfor andre språk (f.eks. C++) må man kompilere koden for at den kan kjøres. I andre språk (f.eks. php) tolkes koden hver gang den kjøres. Selvfølgelig er det mer tidkrevende at maskina må tolke en programmeringskode hver gang den skal kjøres, men til gjengjeld vil man kunne kjøre en slik kode på forskjellige platformer (som regel). Java benytter seg av både kompilering og tolkning. Når en java-kode blir kompilert sitter man igjen med en .class fil. Denne filen må igjen tolkens, men har den egenskapen at den kan kjøres på forskjellige typer systemer uten å måtte kompileres på nytt.

Java er et sikkert system for omgivelsene sine. En java-applet vil ikke uten videre ha tilgang til lokale filer. Java har også den fordelen at den rydder opp i ubrukt minne. En uerfaren programmerer vil ved en glipp lett kunne allokere mye mer minne enn han/hun egentlig trenger. I andre programmeringsspråk vil dette bruke mye av systemets resurser, og på enkelt systemer nok til å kræsje en pc. Mens i java er opprydding i minnet en del av selve motoren.

Java har ikke bare fordeler. Siden Java er et høy-nivå-språk er det for eksempel vanskelig å kommunisere direkte mot maskinens hardware. Det er ikke alle som sverger til objektorientert programmering heller. Har du veldig spesifikke krav til det du ønsker å lage bør du muligens vurdere et annet språk. Står du derimot på bare bakke, og bare ønsker å lære deg å programmere i et de meste mulighetsrike og brukte programmeringsspråkene, så kan det anbefales å begynne med Java.

For Java har mange muligheter. Java kan brukes til å utvikle vanlige programmer. Eller så kan du lage applets; små programmer som kan kjøres i en web-browser. Java kan også brukes til å lage programmer til mobiltelefoner og PDA'er (J2ME) eller for å lage programmer som kjøres på webservere (J2EE). Java har muligheter langt utover det jeg kjenner til.

Komme igang Utviklingsfase: 25% (ved 11.jan 2006)[rediger]

Før du kan begynne å taste inn Java-kode, så trenger du en plass å taste inn koden. Du trenger et utviklingsmiljø. Når man programmerer så må du kompilere og kjøre koden din for å se resultatet av det du programmerer. For å kompilere et Java program må du første laste ned og installere Java Development Kit (JDK). Denne finner du på [Sun sin webside].

Det finnes forskjellige måter å få kjørt koden din på. Du kan skrive koden din i et enkelt tekstbehandlingsprogram (som notepad, TextPad og lignende), og kjøre det i kommandolinjen(DOS). Men det finnes også grafiske miljøer som kan hjelpe deg med: å sjekke syntaks, fullføre kommandoer, automatisk kompilering og debugging. Her er forslag på noen slike grafiske utviklingsmiljøer:

Det mest grunnleggende Utviklingsfase: 75% (ved 11.jan 2006)[rediger]

Hello World[rediger]

Nå er det på tide å komme i gang. Lag fila HelloWorld.java og putt inn koden:

public class HelloWorld{
  public static void main( String args[] ){
    System.out.println( "Hello world" );
  }
}

Kompiler og kjør denne koden. Har du gjort alt riktig, så burde det komme "Hello world" der hvor programresultatet skrives. Det er viktig at classen og filen heter det samme. Vi kommer siden tilbake til hva de enkelte tingene betyr, men vil du prøve deg med mer kode, så kan du bare putte det inn istedenfor System.out.println( "Hello world" );

Kommentarer[rediger]

Ønsker du å kommentere koden din, så kan gjøre det på flere måter:

// Brukes til å kommentere en linje.
/* (start)
 Brukes til å kommentere et område som kan gå over flere linjer eller bare en liten del av en linje.
 (slutt) */

Kommentarer vil ikke bli tolket av kompileren, og brukes derfor kun til å hjelpe programmereren. En god programmerer skriver kommentarer som hjelper en selv og andre til å forstå hva koden gjør, og til å strukturere koden. Men det kan også bli for mye kommentarer.

Variabler[rediger]

En variabel er en beholder som inneholder en verdi. La oss starte med en variabel av typen integer, dvs heltall. For å opprette variabelen skriver vi: int variabelnavn. La oss ta et lite eksempel hvor vi legger sammen to variabler.

int a = 5;
int b = 2;
int c = a + b;
System.out.println( "Summen av " + a + " og " + b + " er " + c  );

Dette kommer da ut: Summen av 5 og 2 er 7 );
Men det er ikke sikkert at vi bare skal jobbe med heltall. Variablen double gir oss desimaltall.

double a = 5.5;
double b = 2.1;
double c = a * b;
System.out.println( "Produktet av " + a + " og " + b + " er " + c );

Dette kommer da ut: Produktet av 5.5 og 2.1 er 11.55
En annen variabel som du kommer til å få mye brukt for er boolean. Denne verdiabelen kan kun ha to verdier, sann eller usann.

boolean verdi = true;
verdi = false;

Her oppretter vi først variablen verdi og setter den til å være sann. Så setter vi verdien til å være usann. Å forstå bruk av boolske verdier vil være veldig viktig når du kommer videre til betingelser og løkker.

Det er både lurt og god programmering å gi en variabel et godt navn, et navn som beskriver hva variabelen inneholder. Det er vanlig å bruke variabler som i,j,k til tellere. Alle vanlige variabler skrives med små bokstaver. Stor forbokstav forbeholder vi til klasser (dette kommer vi tilbake til), mens konstanter navngir vi med bare store bokstaver. En konstant er en variabel som aldri kan skifter verdi, og defineres med nøkkelordet final foran:

final int UTLØP = 2008;

Nå har vi dekket noen av de mest brukte datatypen, ønsker du en oversikt over alle kan du se på [Suns tutorial].

Litt matte[rediger]

På tall-variablene kan du bruke noen enkle mattematiske begreper: + - * / %
De flest av disse burde være kjent for deg. Operanden % (modulus) gir deg resten av en divisjon. Vi tar denne til slutt.

int a = 8;
int b = 2;
int c;
c = a + b;    // c har nå verdien 10
c = a - b;    // c har nå verdien 6
c = a * b;    // c har nå verdien 16
c = a / b;    // c har nå verdien 4

Modulus kan være en litt viren operator. Når vi deler 8 på 2 får vi 4, og ingen rest. Så hvis vi fortsetter forrige eksempel:

c = a / b;    // c har nå verdien 4
c = a % b;    // c har nå verdien 0

Men prøver vi å gjøre en divisjon som ikke går opp i heltall blir saken annerledes.

int a = 7;
int b = 2;
int c;
c = a / b;   // c har nå verdien 3
c = a % b;   // c har nå verdien 1

Vær oppmerksom på at dette ikke gir desimaltallet i divisjonen.
a / b gav oss 3
a % b gav oss 1, fordi (7 - 1)/ 2 gir oss 3
Modulus gir oss resten av det tallet som blir dividert.

I tillegg har vi enkle operatorer for enkelt å legg til / trekke fra én.

int a = 4;
a++;         // a er nå 5
a--;         // a er nå 4

Det finnes også en annen hurtigmetode, hvis du skal gjøre noe med et tall og legge resultatet i de samme variablene.

int a = 4;
int b = 6;

a += b;      // det samme som a = a + b
a -= b;      // det samme som a = a - b
a *= b;      // det samme som a = a * b
a /= b;      // det samme som a = a / b
a %= b;      // det samme som a = a % b

Betingelser[rediger]

Betingelser gjør at du kan velge om noe skal utføres eller ikke. Det engelske begrepet er if, som på norsk betyr hvis. Å tenke dette begrepet kan hjelpe deg med å forstå betydningen av koden.

if (betingelse){
  gjør dette hvis betingelsen er sann
} else {
  gjør dette hvis betingelsen er usann
}
if ( i > 0 ){
  System.out.println("verdien er større enn null");
} 
else{
  System.out.println("verdien er ikke større enn null");
}

Disse betingelsene vil kunne bli mye mer komplekse når vi tar med else if. Men et eksempel gjør det kanskje tydligere for deg hvordan dette fungerer:

if ( i > 0 ){
  System.out.println("verdien er større enn null");
}
else if (i < 0){
  System.out.println("verdien er mindre enn null");
} 
else{
  System.out.println("verdien er null");
}

Vi snakker om bregrepene sann og usann, eller true og false. Vi kunne også ha skrevet:

if ( true )
{
  System.out.println("Dette vil alltid være sant.");   
}

Switch-case er en annen måte å sjekke betingelser

int day = 7;
  switch (day) 
  {
    case 1:  System.out.println("Mandag"); break;
    case 2:  System.out.println("Tirsdag"); break;
    case 3:  System.out.println("Onsdag"); break;
    case 4:  System.out.println("Torsdag"); break;
    case 5:  System.out.println("Fredag"); break;
    case 6:  System.out.println("Lørdag"); break;
    case 7:  System.out.println("Søndag"); break;
    default: System.out.println("Ugyldig verdi, ikke en ukedag"); break;
  }

Vi har også noen operatorer for logiske betingelser.

  • > større enn
  • >= større enn eller lik
  • < mindre enn
  • <= mindre enn eller lik
  • == er lik
  • != er ikke lik
int a = 6;
int b = 10;
if ( a > b ) System.out.println( "Dette blir ikke vist" );
if ( a == b ) System.out.println( "Dette blir ikke vist" );
if ( a != b ) System.out.println( "Dette blir vist" );

Det finnes også noen operatorer som brukes i forbindelse med betingelser

  • && Dette er en logisk OG
  • || Dette er en logisk ELLER
  • ! Dette er en logisk IKKE
int a = 6;
int b = 10;
int gammel = false;
if ( a = 6 && b > a ) System.out.println( "Dette blir vist" );
if ( ! gammel ) System.out.println( "Han er ikke gammel" );

Løkker[rediger]

Løkker er noe som får noe til å skje flere ganger. Løkken blir kjørt på nytt og på nytt, helt til den betingelsen som er satt ikke lenger blir oppfylt.

For-løkker[rediger]

For-løkken er lett å bruke ved forskjellige typer av telling. Gjerne at man skal gjøre noe x antall ganger.

for (int i = 0; i < 100; i++){
 System.out.println(i);
}

Her settes først variablen i til 0. Og så lenge i er mindre enn 100, så skal løkken gjennomføres. Ved hver gjennomgang økes variabelen i med én. Syntaksen kan beskrives slik:

for( initialisere teller; evaluere tellerens betingelser; øke telleren){ ... };
Men en forløkke trenger ikke nødvendigvis øke eller telle

int sum = 0;
for ( int i = 100; i > 10; i = i - 2 )
{
  sum = sum + i;
}

While-løkker[rediger]

Det finnes to typer While-løkker.

while (a != true) {
  System.out.println("a is not true");
} 

Her sjekkes betingelsen før den utfører løkka. Hvis a er sann, vil vil kroppen aldri bli kjørt.

do {
  System.out.println("a is not true");
} while (a != true);

Denne do-while-løkka utfører kroppen før den sjekker betingelsen. Hvis a er sann, vil kroppen allikevel bli utført en gang.

Endring i løkker[rediger]

Kommandoene break og continue kan brukes i løkker. Ved kommandoen break blir løkken stoppet, ved continue vil løkken hoppe over resten av den utførelsen og starte på neste gjennomføring av løkka.

for ( int i = 1; i < 6; i++ )
{
  if ( i == 4 ) break;
  System.out.print( i + " " );
}

Dette skriver ut: 1 2 3

for ( int i = 1; i < 6; i++ )
{
  if ( i == 4 ) continue;
  System.out.print( i + " " );
}

Dette skriver ut: 1 2 3 5

Metoder[rediger]

En metode er en kodebit som kan kalles ved ønske. Dette gjør at en programbit kan brukes flere ganger.

public class BrukAvMetoder
{
   public static void main(String[] args)
   {
       System.out.println("Inni main metode! Kaller egen metode!");
       minMetode();
       System.out.println("Tilbake i main!");
   }
   public static void minMetode()
   {
       System.out.println("Inni minMetode!");
   }
}

Tekst[rediger]

En annen type variabel er String.

String tekst = "Jeg er glad i deg";
System.out.println( tekst );

Dette lager variabelen tekst og skriver den ut. Det er også mulig å legge sammen tekst.

String fornavn = "Arne";
String etternavn = "Jensen";
String navn = fornavn + " " + etternavn;
String vers = "Selv om jeg går i dødsskyggens dal, frykter jeg ikke for noe vondt.";
System.out.println( vers.indexOf( "e" ) );
System.out.println( vers.lastIndexOf( "e" ) );

Dette gir outputen 1 og 59

Objekter og arv Utviklingsfase: 25% (ved 11.jan 2006)[rediger]

Java er et objektorientert programmeringsspråk, og til nå har vi ikke sett så mye på det. Men fra nå av skal vi tenke og programmere objekter. Frem til nå har vi bare sett på ulike funksjoner. Alt vi har gjort har vi skrevet under hverandre og forventet at programmet utfører linje for linje. Men hverdagen din består helt sikkert ikke av en linje for linje instruks for hva du skal gjøre. Det er nesten lettere å sette sammen hverdagen din av objekter. Disse objektene kan være alt mulig rart: Sokk, sko, brødskive, ost, mamma, pappa. Og mer slik skal vi venne oss til å tenke nå. For å bli vant til dette, er det best om vi ser på noen eksempler. La oss først lage en klasse.

class MittObjekt {
  //variabler og metoderdefinisjoner
}

Definisjon av objekter[rediger]

La oss tenke oss at vi skal lage et program som skal lagre informasjon om en rekke personer. Vi starter med å lage et menneske-objekt.

public class Menneske {
  String navn = "";
}

Husk at når du lager en klasse, må du legge den i en fil med samme navn (menneske.java). I tillegg til å lage klassen Menneske, har vi gitt denne variabelen navn. Vi skal nå legge til en konstruktør og noen metoder, dvs gi dette objektet noen egenskaper.

public class Menneske 
{
  private String navn = "";

  public Menneske( String navn )
  {
    this.navn = navn;
  }

  public void setNyttNavn( String navn )
  {
    this.navn = navn;
  }

  public String toString()
  {
    return navn;
  }
}

Det som er verdt å legge merke til er at variabelen navn her blir satt til å være private. Det vil si at det er umulig å endre eller nå denne variabelen utenfor selve klassen. Mens klassens kontruktør og metoder kan endre innholdet i variabelen navn. La oss nå se hvordan vi kan bruke dette objektet.

public class Program
{
  public static void main(String[] args)
  {
    Menneske dama = new Menneske( "Sissel" );
    dama.setNyttNavn( "Trude" );
    System.out.println( "Dama mi heter " + dama.toString() );
  }
}

Dette burde gi outputen: Dama mi heter Trude

Arv[rediger]

Nå har vi laget klassen Menneske, og skal ta for oss arv. Det vil si at en klasse kan arve egenskapene fra en annen klasse.

public class Programmerer extends Menneske
{
  boolean java = false;
}

Nå arver objektet Programmerer egenskapene til Menneske. Det vil si at en programmerer, siden det er et menneske, vil ha et navn, men vil i tillegg ha bestemt om det kan programmere java. Men nå trenger vi å lage ny konstruktør og metoder.

public class Programmerer extends Menneske
{
  boolean java = false;
    
  public Programmerer ( String navn, boolean java )
  {
    super( navn );
    this.java = java;
  }
    
  public void byttJava()
  {
    java = ! java;        
  }
   
  public boolean kanJava()
  {
    return java;
  }
}

Så la oss ta dette i bruk:

public class Program
{
  public static void main(String[] args)
  {
    Programmerer meg = new Programmerer( "Truls", true );
    if ( meg.kanJava() ) System.out.println( "Jeg kan java" );
  }
}

klasser kan være public, abstract, final

Interfacer[rediger]

implements Interfaces



Forfatter(e)[rediger]