Grunderna Programmering med Java Programspråket Java

Programmering med Java
Grunderna
Game.java
Fil med
källkod:
class Game {
...
}
Programmering med Java
Programspråket Java
Källkodsexempel
Källkod
Java API-exempel
In- och utmatning
Kompilering:
javac Game.java
Game.class
Fil med
byte-kod:
¶W*¶±@"I%N&*
*´¶·µ**´» Y·
...
Tolkning (exekvering):
java Game
Erik Forslin
[email protected]
Rum 1445, plan 4 på Nada
08-7909690
Minne med
maskinkod:
Begin Game...
0110101110101
1010110101110
...
1
2
Programspråket Java
Källkodsexempel
• Som programmerare skriver du ditt program i en
eller flera Javafiler, t ex i filen Game.java
// Schema.java
• Texten i Javafiler kallas källkod
public class Schema {
public static void main(String[] args) {
int startperiod;
startperiod = 1;
• Javaprogram beskrivs alltid med klasser, varpå
källkoden i Javafilen får strukturen:
class Game {
// innehåll i klassen:
// variabler
// metoder()
}
System.out.println("V programmerar under " +
"perioderna " + startperiod +
" och " + (startperiod + 1) +
"!");
} // main()
} // Schema
datorn> javac Schema.java
datorn> java Schema
V programmerar under perioderna 1 och 2!
datorn>
• En klass kan innehålla variabler och metoder
3
4
Källkod i Java
Kommentarer
En programmerare skriver källkod i Java. Källkoden
består av:
• En kommentar beskriver vad en del i programmet
gör
• Kommentarer
• Reserverade ord
• Enradskommentarer:
• Litteraler
// Detta är en enradskommentar
• Identifierare
• Flerradskommentarer:
• Satser
/* Denna kommentar går
över flera rader */
• Klasser
• Variabler
• Flerradskommentarer kan utnyttjas för att ”kommentera bort” delar av källkoden som misstänks
innehålla fel
• Metoder
• Javas API (Application Programmer Interface)
5
6
Litteraler
Reserverade ord
abstract
default
(goto)
(operator) synchronized
boolean
do
if
(outer)
break
double
implements package
throw
byte
else
import
private
throws
(byvalue) extends
(inner)
protected
transient
case
false
instanceof public
true
(cast)
final
int
(rest)
try
catch
finally
interface
return
(var)
char
float
long
short
void
class
for
native
static
volatile
(const)
(future)
new
super
while
continue
(generic) null
this
• En litteral är ett värde som skrivs direkt i
källkoden, t ex
• heltal:
17
-42
4711
• flyttal:
3.14159
-12.5
• tecken:
'A'
• strängar:
• logiska:
switch
7
'?'
2.9E-12
'8'
"Vad heter du?"
true
false
8
Identifierare
Satser
• Identifierare är namn på klasser, variabler och
metoder som du själv inför i din källkod
• En sats är den minsta körbara delen i ett
Javaprogram
• En sats avslutas alltid med ’;’ (semikolon)
• Kan bestå av bokstäver, siffror, _ och $
• En sats skrivs ofta på en egen rad
• Får inte börja med en siffra
• Exempel med kommentarer:
• Java skiljer på STORA och små tecken. T ex är
Bil och bil två olika identifierare
• En klass börjar med stor bokstav, t ex Game
// Deklaration av ett flyttal
double x;
// Tilldelningar (OBS! Högerled körs först!)
x = 3.14;
y = (x + 1.57) / 6.28;
z = Math.sin(1.5 * x);
// Med metodanrop
svar = indata.readLine(); // Med metodanrop
• En variabel börjar med liten bokstav, t ex hastighet
// if-sats
if (z < 0.0)
z = -z;
• En metod börjar med liten bokstav och har
metodparenteser, t ex main() eller starta()
// Metodanrop
System.out.println("Slumpade: " +
Math.cos(Math.random()));
9
10
Klasser
Variabler
En klass är något som kan innehålla variabler och
metoder. En klass kan ha två innebörder:
• En
–
–
–
–
klass samlar ihop ”bra-att-ha”-saker. Innehåll:
Föregås av ordet static
Finns alltid i endast en uppsättning
Exempel på variabel: PI i klassen Math
Exempel på metoder: sin() i klassen Math,
main() i de flesta huvudklasser
• En klass beskriver ett föremål (objekt). Innehåll:
– Föregås ej av ordet static
– Finns i en uppsättning för varje skapat objekt. Objekt skapas med new
– Exempel på variabel: hastighet hos ett Bilobjekt
– Exempel på metod: starta() hos ett Bilobjekt
11
• En variabel är en identifierare som representerar
ett litet minnesutrymme för en viss typ av data.
• Variabler måste deklareras innan de används
• Variabler ritar vi som en ”liten låda”
• Deklarationsexempel:
int x;
int
x
• Användningsexempel (tilldelning):
x = 3;
x
int
3
12
Metoder
• En metod används för att ”gömma” detaljer om
hur något löses
• En metod kan ses från två olika sidor: deklarationssidan och anropssidan.
• Deklarationssidan ses från konstruktören som
skriver källkoden till metoden. Konstruktören känner till alla detaljer
• Anropssidan eller användarsidan ses från den
som vill utnyttja en skriven metod. Användaren
är inte intresserad av detaljer
• Användningsexempel: utskrift med hjälp av metoden println() hos datorsystemets utmatningsenhet System.out:
Metodens huvud
• Då en metod kan ses från två olika sidor behövs något som länkar ihop dessa. Detta gör
metodens deklarationshuvud
• Deklarationshuvudet beskriver metodens namn (som
också antyder vad metoden gör), vilka typer av
värden som kan skickas till metoden samt vilken
typ av värde som kommer tillbaka från metoden
• Exempel på deklarationshuvud: metoden println()
hos ett PrintStream-objekt:
public void println(String x)
System.out.println("Hej");
System.out är ett PrintStream-objekt med meto-
Se även klassen PrintStream i Javas API.
der som alltså underlättar utskrifter
13
Javas API
14
Java API: Exempel
• API står för ”Application Programmer Interface”
• En samling klasser (redan skriven och kompilerad
källkod) med variabler och metoder som man kan
använda vid behov
• Klasserna med tillhörande variabler och metoder
finns beskrivna på webben
• Kan användas efter de importerats med import.
import måste stå i början av Javafilen. Exempel:
import java.io.*;
som importerar alla klasser i paketet java.io
• Observera att alla klasser i paketet java.lang
importeras automatiskt till alla Javaprogram
15
16
In- och utmatning
In- och utmatningsexempel
• Då inmatning från tangentbordet är ganska knöligt utnyttjas hjälpobjektet BufferedReader. Detta
görs genom att skapa och lagra BufferedReaderobjektet i variabeln indata:
BufferedReader indata = new
BufferedReader(new
InputStreamReader(System.in));
Med indata ovan kan nu en hel rad enkelt läsas
in och lagras i variabeln svar:
String svar = indata.readLine();
och t ex göras om till ett heltal:
int tal = Integer.parseInt(svar);
Inmatning kan ge upphov till fel, IOException,
vilket Java kräver att programmeraren tar hand
om alternativt påpekar att det kan inträffa
• Utmatning till skärmen är enklare och utnyttjar
System.out som är ett PrintStream-objekt. I likhet
med indata kan man lagra PrintStream-objektet
i variabeln utdata:
PrintStream utdata = System.out;
Med utdata blir utskrift en enkel match:
utdata.println("Du svarade: " + tal);
17
// InOchUtmatning.java
// Klasserna BufferedReader och PrintStream
// ligger i paketet java.io
import java.io.*;
public class InOchUtmatning {
/* main() är huvudmetoden som körs (exekveras).
I main() kan in- och utmatningsfel
(IOException) inträffa vilket java kräver att
programmet tar hand om. */
public static void main(String[] args) throws IOException {
// indata är hjälpobjektet för inmatning
BufferedReader indata = new BufferedReader(new
InputStreamReader(System.in));
// utdata är hjälpobjektet för utmatning
PrintStream utdata = System.out;
utdata.print("Ange ett tal: ");
String svar = indata.readLine();
int tal = Integer.parseInt(svar);
utdata.println("Du svarade: " + tal);
} // main()
} // InOchUtmatning
datorn> javac InOchUtmatning.java
datorn> java InOchUtmatning
Ange ett tal: -17
Du svarade: -17
datorn>
18