Från början
Utveckling
Kodexempel
Hello world! Datatyper Flödeskontroll Objekt Arv

Flödeskontroll

Att kontrollera flödet i ett program är att få olika kod att exekveras beroende av omständigheterna. Det finns olika typer av flödeskontroll, selektion och iterering.
1.  public class Selektionskontroll {
2.   public static void main(String[] args){
3.    int i = 5;
4.    if (i == 5) {
5.     System.out.println("i är 5");
6.    } else {
7.     System.out.println("i är inte 5");
8.    }
9.   }
10. }

== på rad 4 betyder likhet vid jämförelse. På rad 3 ger man variabeln i värdet 5 och på rad 4 jämför man värdet på variabeln i med siffran 5. Andra jämförelseoperatorer är >, <, >=, <= och !. En flödeskontrollsats kommer att utföra olika saker beroende på hur det logiska uttrycket (i == 5) utvärderas. Koden kan utläsas som 'Om (logiskt argument) är sant, utför följande kodblock {}, annars utför följande kodblock {}. Else-klausulen behöver inte vara med, en If-sats kan stå ensam och kommer isåfall bara att utföra kod om uttrycket är sant. Uttrycket på rad 4 kommer att utvärderas som det booleska (boolean) värdet sant, true, och koden på rad 5 kommer att köras. Ett ! framför ett logiskt uttryck inverterar det. !(true) = false.
Iterativ flödeskontroll får kod att upprepas tills ett logiskt uttryck är false.
1.  public class Iterativkontroll {
2.   public static void main(String[] args){
3.    for (int i = 0; i < 10; i++) {
4.     System.out.println(i+1);
5.    }
6.
7.    int j = 0
8.    while (j < 10) {
9.     System.out.println(i+1);
10.    i++;
11.   }
12.  }
13. }

I for-loopen deklarerar man en variabel som ska itereras över (int i = 0;), under vilket villkor satsen ska forsätta loopa (i < 10;) och med hur mycket iterationsvariabeln ska öka (eller minska) efter varje iteration (i++;). Så fort kodblocket efter for-loopen har utförts, kommer variabeln att öka och det logiska villkoret att prövas. Så länge i är mindre än 10 kommer rad 4 att utföras. Eftersom variabeln börjar på 0, kommer koden att utföras 10 gånger. I konsolen står alltså 1, 2, 3, 4, 5, 6, 7, 8, 9, 10. For-loopen används när man i förväg vet hur många gånger man vill iterera över kod. While-loopen fungerar på ett liknande sätt, men är mer versatil. I det här fallet kommer den utföra precis samma kod som for-loopen, men den är uppbygd annorlunda. For-loopen behöver alltid en numerisk variabel den itererar över. While-loopen itererar tills uttrycket är false, vilket är användbart när man itererar över datamängder.

En loop kan användas för enkelt fylla i en array, som kan ses som en lista. En array-variabel innehåller flera värden av samma typ som lättast sätts och hämtas med hjälp av iteration.
1.  public class Array {
2.   public static void main(String[] args) {
3.    int[] intArray = new int[10];
4.    for (int i = 0; i < 10; i++) {
5.     intArray[i] = i+1;
6.    }
7.    System.out.println("Värdet på index 5 är: " intArray[5]);
8.    for (int i = 0; i < 10; i++) {
9.     System.out.println(intArray[i]);
10.   }
11.  }
12. }

En array definieras med två tomma hakparenteser [] efter datatypen, som String[] args i main-metoden. En array initialiseras med nyckelordet new datatyp[storlek]. I exemplet skapas en array för integers med 10 platser. Indexen är noll-baserade, så platserna går från index 0 till index 9. I den första for-loopen placeras värdet i+1 i varje index i. Index 0 får alltså värdet 1 och index 9 får värdet 10. På rad 7 skrivs "Värdet på index 5 är: 6" ut. I den andra for-loopen skrivs alla värden i arrayen ut, från 1-10.

Relaterat till flödeskontroll är metoder. Hittills har alla exempel bara använd main-metoden, som används för att starta kod. Metoder har ett antal nyckelord som definierar dem. Det första är public, protected eller private och indikerar hur restrikterad metoden ska vara. Publika metoder kan anropas överallt, protected kan bara anropas av klasser i samma paket eller underklasser och privata metoder kan bara anropas av den egna klassen. Det andra nyckelordet är static och är inte obligatorisk. Statisk kod beter sig annorlunda än ickestatisk kod, se Objekt. Det tredje nyckelordet är void eller en datatyp och berättar vad metoden returnerar. Void returnerar ingenting. Efter metodnamnet följer argumenten metoden tar. Main måste alltid vara public static void och ta ett argument av String[].
1.  public class Metoder {
2.   public static void main(String[] args){
3.    doSomethingWithAnInt(5);
4.    int i = returnAnInt();
5.    System.out.println(returnAStringDependingOnInput("orange") + i);
6.   }
7.
8.   public static void doSomethingWithAnInt(int base) {
9.    System.out.println(base^2);
10.  }
11.
12.  private static int returnAnInt() {
13.   return 1000;
14.  }
15.
16.  public static String returnAStringDependingOnInput(String s) {
17.   if (s.equals("orange")) {
18.    return "That's a fruit!";
19.   }
20.   return "That's not a fruit!";
21.  }
22. }

Med metoder försvinner en stor del av main-metoden, som bara innehåller anropen till de övriga metoderna i klassen. Nyckelordet return indikerar vilket värde som ska returneras av metoden, om den inte är av void-typ. Det som skrivs ut av programmet är alltså "25" (ifrån doSomethingWithAnInt) och "That's a fruit! 1000". På rad 17 används .equals()-metoden för att jämföra innehållet i strängen s. Equals används för att jämföra objekt. Av olika skäl så fungerar inte == som man förväntar sig vid jämförelse av objekt.