OOMPAE 2000
Introduktion till Java
Av Björn Eiderbäck
Email:
[email protected]
Adress:
Rum 1641, 6tr
NADA
Osquars Backe 2
Tel: 7906277
previous
next
Introduktion Java
Momentets uppläggning och innehåll...
• Föreläsningar och övningar: introduktion till Java
– På kursen 2D1360 ingår två introduktionsföreläsningar och en övning
om och med Java. Resten av kursen samläses med 2D1359.
• Måndag 4/9 kl 8-10
– Java introduktion.
• Tisdag 5/9 kl 13-15
– Mer om Java, framförallt via exempel.
• Onsdag 6/9 kl 8-10
– Första föreläsningen tillsammans med 2D1359.
– Beskrivning av hela kursen och introduktion till objektorienterad
programmering.
• Torsdag 7/9 kl 15-17
– Java-övning.
previous
next
2
Introduktion Java
Java
• Java är konstruerat på SUN
– Första versionen släpptes 1995
• Starkt typat
– Dvs det går att avgöra typkompatibilitet av alla uttryck i programmet vid
kompileringstillfället.
• Virtuell maskin (VM) som gör det maskinoberoende
– En speciell VM per plattformstyp överbryggar olikheter i plattformarnas arkitektur
• Klassbibliotek
– språkklasser, stränghantering, grafik, gränssnitt, fönster, Internet,
händelsehantering, processer, collections, mm
• Bindning till WWW
– med applets och liknande
• Har fått sin huvudsakliga spridning via Internet
• Syntax som C. Semantik och klasser mer som Smalltalk
previous
next
3
Introduktion Java
Virtuell maskin
källkod
kompilera
(javac)
java bytekod
kör
(java)
en virtuell
maskin
per plattformstyp
previous
next
Pc
VM
Mac
VM
Unix
VM
4
Introduktion Java
Java: mitt första "program"
• Skapa en fil med namnet MyFirstProgram.java
• Skriv följande kod i filen:
import java.io.*;
public class MyFirstProgram{
public static void main (String [] args){
System.out.println("Mitt första program!");
}
}
previous
next
5
Introduktion Java
... kompilera och kör
• Kompilera
>javac MyFirstProgram.java
• Då genereras en körbar fil MyFirstProgram.class
• Kör genom att starta Javas virtuella maskin med
program/klassnamnet som argument
>java MyFirstProgram
Mitt första program!
• Regeln är att klassens static void main-metod alltid
exekveras
previous
next
6
Introduktion Java
Ett "Javaprograms" struktur
• En klass ser ut på följande sätt
public class KlassNamn extends
SuperKlassNamn{
attribut (instans- och klassvariabler)
Kallas också
för
metoder (instans- och klassmetoder)
medlemmar
konstruktörer
}
• En metod
modifierare returtyp funktionsnamn(argument){
programsatser
}
previous
next
7
Introduktion Java
Konstruera klass
• Klassnamn = filnamn
– En klass skall ha samma namn som den fil den placeras i
• Klassen Circle i filen Circle.java
• En fil kan innehålla flera klasser men bara en av dem kan
vara deklarerad public,
– Det är den publika klassens namn som motsvarar filens
• Definition av klass, mall
instansvariabler
metoder
konstruktörer
previous
public class KlassNamn extends SuperKlassNamn{
Modifierare TypIvar1 ivar1;
Modifierare MetodTyp metod1(TypArg1 arg1) {}
public KlassNamn() {}
}
next
8
Introduktion Java
Deklarera och instansiera
• Deklaration av instans
KlassNamn variabelNamn;
• Instansiering
variabelNamn = new KlassNamn();
alternativt, både deklaration och instansiering på en
gång
KlassNamn variabelNamn = new KlassNamn();
previous
next
9
Introduktion Java
Kompilera och köra
• Environmentvariabel
– För bekväm hantering sätt path (se systemdokumentation) så
att kompilator, virtuell maskin och bibliotek enkelt hittas
• Plattformsberoende hur detta går till
• Kompilera med javac filnamn
javac KlassNamn.java
– om allt går bra skapas då en fil med namnet
KlassNamn.class
• Kör med java klassnamn
java KlassNamn
previous
next
10
Introduktion Java
Sammanfattning enkelt program: Hello World
Det mesta i Java
tillhör klasser
public class Hello {
Alla program måste
ha en main()
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
Spara i en fil med namnet Hello.java
Kompilera med javac Hello.java
Då skapas en binärfil Hello.class
Kör med java Hello
previous
next
11
Introduktion Java
Typer
• I Java måste alla variabler och metoder deklareras med typ
Typ variabel;
• Det finns primitiva typer som int, char, float och boolean
int x;
• En variabel kan ges ett initialt värde vid deklarationen
int x = 10;
• Man kan också använda typer som är implementerade som
vanliga klasser
String course = "PIM-99";
previous
next
12
Introduktion Java
Modifierare
• En modifierare kan användas för att ange vilka objekt som kan
accessa en klass eller dess medlemmar (dvs dess attribut eller
metoder), mest grundläggande är:
static
• indikerar att medlemmen är klassvariabel eller klassmetod
public
• medlemmen är accessbar överallt där dess klass är accessbar
protected
• medlemmen endast accessbar i klassen, dess subklasser eller i aktuellt
package (vi återkommer till package vid senare tillfälle)
private
• medlemmen endast accessbar i den klass som definierar den
ingen modifierare
• accessbar av andra klasser i samma paket
previous
next
13
Introduktion Java
Exempel
public class BankAccount{
protected int balance = 0;
public void deposit (int amount) {
balance = balance + amount;
}
public void withdraw (int amount) {
balance = balance - amount;
}
public int balance (){
return balance;
}
}
previous
next
14
Introduktion Java
...
BankAccount account1, account2;
int transfer;
account1 = new BankAccount();
account2 = new BankAccount();
account1.deposit(200);
account2.deposit(100);
transfer = 75;
account1.withdraw(transfer);
account2.deposit(transfer);
account2.balance(); // resultat 175
previous
next
15
Introduktion Java
Sammanfattning: Konstruera klass
• Klassnamn = filnamn
– En klass skall ha samma namn som den fil den placeras i
• Klassen Circle i filen Circle.java
• En fil kan innehålla flera klasser men bara en av dem kan vara
deklarerad public,
– Det är den publika klassens namn som motsvarar filens
• Definition av klass, mall
public class KlassNamn extends SuperKlassNamn{
attribut (instans- och klassvariabler)
metoder (instans- och klassmetoder)
konstruktörer
}
previous
next
16
Introduktion Java
Sammanfattning: Deklarera och instansiera
• Deklaration av instans
KlassNamn variabelNamn;
• Instansiering
variabelNamn = new KlassNamn();
alternativt, både deklaration och instansiering på en
gång
KlassNamn variabelNamn = new KlassNamn();
previous
next
17
Introduktion Java
Sammanfattning: Kompilera och köra
• Environmentvariabel
– Sätt path- (environment-) variabel, dvs sätt den att (också)
referera Javas katalog
• Kompilera med javac filnamn
javac KlassNamn.java
– om allt går bra skapas då en fil med namnet
KlassNamn.class
• Kör med java klassnamn
java KlassNamn
previous
next
18
Introduktion Java
Exempel: Klass Circle
// Klassdefinition (utan extends medför subklass till Object)
public class Circle {
public double x, y;
public double r;
public double circumference(){
return 2 * 3.14 * r;
}
public double area(){
return 3.14 * r * r;
}
// för att testa det hela skriver vi en static main-metod
public static void main (String args[]) {
//Vi deklarerar en temporär variabel
Circle circle;
// och instansierar
circle = new Circle();
previous
next
19
Introduktion Java
... forts ...
//vi ändrar några värden
circle.x = 100; circle.y = 200; circle.r = 20;
// vi gör några testutskrifter
System.out.println("Cirkelns x-koordinat: " +
circle.x + " och dess y-koordinat: "
+ circle.y);
System.out.println("den har en radie också: " +
circle.r);
System.out.println(
"metoden circumference ger omkretsen: " +
circle.circumference());
System.out.println("och med area:" + circle.area() +
" dess area");
}
}
previous
next
20
Introduktion Java
... och så sparar vi, kompilerar och kör
• Spara
– Spara filen med samma namn som klassen med extension
.java, dvs här Circle.java
• Kompilera
javac Circle.java
– Skapar en fil Circle.class
• Kör
java Circle
previous
next
21
Introduktion Java
Exempel: Eka argument
• Skapa fil Echo.java (som ekar argumenten vid exekveringen)
public class Echo {
public static void main(String argv[]) {
for(int i = 0; i < argv.length; i++)
forloopar
ser ut
System.out.print(argv[i] + " ");
som i
System.out.print("\n");
ANSI-C
}
}
• Kompilera
javac Echo.java
• Kör
java Echo detta är input
previous
next
22
Introduktion Java
In- och utmatning
• Textutmatning sker via klassen System
System.out.println(...);
– Där:
• System är en klass i java.lang
• out är en klassvariabel i System
• out är en instans av klassen PrintStream
• PrintStream har en instansmetod println som skriver ut text på
terminalen
• Textinmatning sker också via klassen System
char c = System.in.read()
– Inmatningen måste dock ”fånga” undantag
try{char c = System.in.read()}
catch(IOException e){//fel har inträffat}
previous
next
23
Introduktion Java
Exempel: ”program” med teckeninmatning
package Tests;
import java.io.*;
class TestIO_1_1 {
public static void main(String [] args) {
for(;;){
int in;
try
{in = System.in.read();}
catch(IOException e)
{in = -1;}
if ((char) in == '0') return;
System.out.println(in);
}
}
}
previous
next
24
Introduktion Java
Exempel: dialog med stränginmatning
package Tests;
import java.io.*;
class TestIO {
public static void main(String [] args) throws IOException
{ System.out.println("TEST OF INTERACTION/1");
BufferedReader in = new BufferedReader(
new InputStreamReader(System.in));
for(;;) {
System.out.print(">");
String line = in.readLine();
if (line.equalsIgnoreCase("quit"))
break;
if (line.equalsIgnoreCase("help"))
System.out.println("To quit: write 'quit'");
else System.out.println("\teko: " + line);
}
}
}
previous
next
25
Introduktion Java
Java: läsa argumenten som ges via terminalen
public class ShowArgs {
public static void main(String[] args) {
main
for(int i=0; i<args.length; i++)
for-loop
System.out.println("Arg " + i + " is ”
+ args[i]);
}
}
Testa med tex
java ShowArgs arg1 arg2 arg3
previous
next
26
Introduktion Java
… “använd” syntax
for
• I föregående exempel använde vi en for-loop
– Syntaxen är följande:
for(initialvärde; villkor; uppdatera)
sats
• Andra loopkonstruktioner
while
do
– while-loop
while(villkor) sats
– do-loop
do sats while(villkor)
• Där en sats antingen är
– enstaka sats som System.out.println(“Test”);
– eller flera satser inom måsvingar som
{ x += 10;
System.out.println(“X: “ + x);
}
previous
next
27
Introduktion Java
Java: exempel med bla villkor och modulo
% är
modulo
previous
public class FizzBuzz {
public static void main(String[] args) {
for(int i = 1; i <= 100; i++) {
if (((i % 5) == 0) && ((i % 7) == 0))
System.out.print("fizzbuzz");
else if ((i % 5) == 0)
System.out.print("fizz");
else if ((i % 7) == 0)
System.out.print("buzz");
else
System.out.print(i);
System.out.print(" ");
}
System.out.println();
}
}
next
28
Introduktion Java
Villkor
• Villkor kan skrivas
if (uttryck) sats
– eller
if (uttryck)
sats
else sats
• Man kan ibland också använda ?:
uttryck ? omSantVärde : annarsVärde
• Eventuellt switchar
switch(heltal) {
case värde1 : sats1;
break;
case värde2 : sats2;
break;
…
default: satsN;
}
previous
next
29
Introduktion Java
Java: fler exempel, Fibonacci
public class Fibonacci {
public static void main(String[] args){
int current, prev = 1, prevprev = 0;
for(int i = 0; i < 20; i++) {
current = prev + prevprev;
System.out.print(current + " ");
prevprev = prev;
prev = current;
}
System.out.println();
}
}
previous
next
30
Introduktion Java
Java: ännu fler exempel
public class Reverse {
public static void main(String[] args) {
// Loopa baklänges genom orden som ges som argument
for(int i = args.length-1; i >= 0; i--) {
// Loopa baklänges genom tecknen i varje argument
for(int j=args[i].length()-1; j>=0; j--) {
// Skriv ut tecken j i i:te argumentet.
System.out.print(args[i].charAt(j));
}
System.out.print(" ");
}
System.out.println();
}
}
previous
next
31
Introduktion Java
Java: exempel, iterativ fakultetsfunktion
public class Factorial {
public static int factorial(int x) {
int fact = 1;
for(int i = 2; i <= x; i++)
fact *= i;
return fact;
}
}
previous
next
32
Introduktion Java
Java: exempel, rekursiv fakultetsfunktion
public class Factorial2 {
public static long factorial(long x) {
if (x == 1) return 1;
else return x * factorial(x-1);
}
}
previous
next
33