Java på 20 enkle ark spesielt for de som kan Simula (og gjerne litt C) Ark 1 av 20 Forelesning 28.9.1998
Et minimalt eksempel Filen Hallo.java ser slik ut: class Hallo { public static void main(string args[]) { System.out.println("Hallo, alle sammen!"); Det kjøres slik: > javac Hallo.java > ls Hallo.class Hallo.java > java Hallo Hallo, alle sammen! Hovedprogrammet er en klasse med en metode main. Det er vanlig å legge hver klassedeklarasjon på en egen fil med samme navn (med.java bak). Forelesning 28.9.1998 Ark 2 av 20
Typisk for Java Java ble utviklet av James Gosling og andre ved SUN i årene 1992 96 for å programmere objektorientert, programmere sikkert, og bli et populært språk for programmering i forbindelse med Internettet. Dette har influert språket: Java er svært objektorientert; alt er klasser. Java har et stort bibliotek med ting som ikke var aktuelle for Simula: Vindusprogrammering, parallelle prosesser, nettoverføring. Svært forenklet karakteristikk «Java er Simula-ideer i C-drakt.» Forelesning 28.9.1998 Ark 3 av 20
Min mening Min meget personlige mening om Java er: Designet av Java er et godt og fornuftig arbeid. Endringene til Simulas klasser er en forbedring. Biblioteket er bare halvveis vellykket; det er for stort og virker unødvendig komplisert. Jeg trives med å jobbe i Java. Forelesning 28.9.1998 Ark 4 av 20
En oversikt over Java Klasser i Java Deklarasjon og bruk av klasser Subklasser static-elementer Setninger Unntak («exceptions») Java-biblioteket Hvor kan man lære mer om Java? Forelesning 28.9.1998 Ark 5 av 20
Klasser i Java Deklarasjon Klasser i Java deklareres nesten som i Simula, men initieringen skjer ved hjelp av en metode med samme navn som klassen: class Punkt { float x, y; Punkt () { x = 0; y = 0; Punkt (float ix, float iy) { x = ix; y = iy; Siden Java kan skille mellom metoder på grunnlag av antallet parametre og deres type, kan vi ha flere initieringsmetoder. IJavaregnesstoreogsmåbokstaver som ulike. Det er vanlig å la klassenavn starte med en stor bokstav. Forelesning 28.9.1998 Ark 6 av 20
Opprettelse av klasseobjekter På samme måte som i Simula kan man opprette nye klasseobjekter med operatoren new: class TestPunkt { public static void main(string args[]) { Punkt origo = new Punkt(); Punkt p1 = new Punkt(2,1); System.out.println("origo: x=" + origo.x + ", y=" + origo.y); System.out.println("p1: x=" + p1.x + ", y=" + p1.y); Operatoren + brukes til å skjøte to tekster. Tallverdier konverteres automatisk til tekst. Kjøring av programmet går slik: > java TestPunkt origo: x=0.0, y=0.0 p1: x=2.0, y=1.0 Forelesning 28.9.1998 Ark 7 av 20
Subklasser Subklasser deklareres med ordet extends: class Pixel extends Punkt { float r, g, b; Pixel(float ir, float ig, float ib) { r = ir; g = ig; b = ib; x = 0; y = 0; Pixel(float ix, float iy, float ir, float ig, float ib) { super(ix, iy); r = ir; g = ig; b = ib; void dump() { System.out.print("(" + x + "," + y + "): [" + r + "," + g + "," + b + "]"); Metoden super referer til superobjektets initiator. Det er ingen automatisk initiering av superobjektet slik det er i Simula. Forelesning 28.9.1998 Ark 8 av 20
Et program som bruker denne klassen kan se slik ut: class TestPixel { public static void main(string args[]) { Pixel origo = new Pixel(1,0,0); Pixel p1 = new Pixel(2,3,0,0,1); System.out.print("origo: "); origo.dump(); System.out.println(); System.out.print("p1: "); p1.dump(); System.out.println(); Metoder kalles slik: p.m(...). Parentesene skal alltid være med. Kjøring går slik: > java TestPixel origo: (0.0,0.0): [1.0,0.0,0.0] p1: (2.0,3.0): [0.0,0.0,1.0] Forelesning 28.9.1998 Ark 9 av 20
Noen viktige predefinerte klasser Diverse predefinerte klasser er alltid tilgjengelige. Klassen Object Alle klasser uten angitt superklasse, er subklasse av denne: class Object { public String tostring() {... public boolean equals(object x) {... : Man kan enkelt få en tekstrepresentasjon av alle objekter. Alle objekter har en likhetstest! Forelesning 28.9.1998 Ark 10 av 20
Klassen String Denne klassen brukes til tekster: final class String { String(...) {... public boolean equals(string s) {... : En «final-klasse» kan ikke utvides med subklasser. Klassen String redefinerer metoden equals. Alle metoder er virtuelle i Java! Forelesning 28.9.1998 Ark 11 av 20
static-elementer Elementer og metoder merket static finnes i selve klassen og ikke i hvert enkelt objekt: class PunktTeller extends Punkt { private static int n = 0; PunktTeller() { super(); ++n; static int antall() { return n; Kun static-metoder får referere til static-elementer. Elementer og metoder merket private er usynlige utenfor klassen. Forelesning 28.9.1998 Ark 12 av 20
Siden static-variable finnes i selve klassen, blir de «globale» for alle objekter av klassen: class TestPunktTeller { public static void main(string args[]) { Punkt p1 = new Punkt(); Punkt p2 = new PunktTeller(); p1 = new PunktTeller(); System.out.println("Totalt " + PunktTeller.antall() + " PunktTeller-objekter."); Vi kaller static-metoder ved å bruke klassenavnet (og ikke en peker til et objekt). Kjører vi dette programmet, får vi > java TestPunktTeller Totalt 2 PunktTeller-objekter. Forelesning 28.9.1998 Ark 13 av 20
Sammendrag av klassebegrepet IN 211 Programmeringsspråk Begrep Simula Java Deklarasjon class C; begin... end classc{... Klasseparametre Ja Nei (men initiatoren) Initiering Kode i klassen Initiator(er) Virtuelle virtual: Alltid Opprettelse new C new C Søppeltømming Ja Ja Referansetest == == Tilordning :- = Egenreferanse this C this Superreferanse this D super Pekerkonvertering pquac (C)p Pekertest pinc p instanceof C Forelesning 28.9.1998 Ark 14 av 20
Setninger i Java Java har de fleste setningene C har: Simula Java begin...end {... v:=e v=e; if B then S else S if (B) S; else S; switch(x) { case a: S; break;... while B do S while (B) S; do S while (B); for i:=a step b until c do S for (i=a; i<=c; i+=b) S; f:=e return e; Forelesning 28.9.1998 Ark 15 av 20
Unntak («exceptions») Unntak er feilsituasjoner som kan oppstå under kjøringen. Programmereren kan angi hvilke feil som skal oppstår, og hvordan de skal håndteres. class Stack { private Object []s; private int sz, n; Stack(int size) { sz = size; s = new Object[sz]; n = -1; Object top() throws EmptyStack { if (n<0) throw new EmptyStack(); return s[n]; void push(object x) throws FullStack { n++; if (n>=sz) throw new FullStack(); s[n] = x; class EmptyStack extends Exception { class FullStack extends Exception { Forelesning 28.9.1998 Ark 16 av 20
Når man kaller en metode som kan fremkalle en feil, må man angi med try og catch hvorledesmanviltasegav feilen: class TestStack { public static void main(string args[]) { Stack s1 = new Stack(6); try { System.out.println("Top is " + s1.top()); catch (EmptyStack e) { System.err.println("Stack is empty!"); Under kjøringen skjer følgende: > java TestStack Stack is empty! Legg forøvrig merke til hvorledes man deklarerer og oppretter matriser. Matriser indekseres alltid fra 0. Forelesning 28.9.1998 Ark 17 av 20
Javas bibliotek Java har et kjempebibliotek, og mye at dette dreier seg om I/U. De viktigste klassene er følgende: Klassen InputStream Det enkleste er å lese én og én byte; annen lesning er dessverre litt kronglete i Java. class InputStream { public int read() throws IOException {... : Klassen PrintStream Denne klassen brukes ved utskrift. class PrintStream { public void print(int x) {... public void print(char x) {... public void print(string x) {... public void print(object x) {print(x.tostring()); public void println(int x) {... : Forelesning 28.9.1998 Ark 18 av 20
Klassen System Denne klassen gir et grensesnitt inn mot maskinen programmet kjører på. Dette inneholder blant annet de tre standard filene. class System { public static InputStream in; //Standard inn public static PrintStream out; //Standard ut public static PrintStream err; // Standard feil : Kommentarer i Java starter med // og varer ut linjen. Forelesning 28.9.1998 Ark 19 av 20
Veien videre IN 211 Programmeringsspråk Den offisielle boken om Java er James Gosling, Bill Joy og Guy Steele: The Java Language Specification. Addison-Wesley, 1996. Denne boken finnes også på /local/doc/java/langspec-1.0.pdf. På /local/doc/java/java-1.1-updates.html finnes en oversikt over det som er endret i versjon 1.1. En mer lettlest bok er Laura Lemay og Charles Perkins: Teach yourself Java 1.1 in 21 days; second edition. Sams.net, 1997. På http://java.sun.com/ finnes diverse informasjon om Java. På http://java.sun.com/docs/white/langenv/ Libraries.doc.html finnes en oversikt over Java-biblioteket. På http: //java.sun.com/docs/books/tutorial/java/ finnes et interaktivt kurs i Java. Forelesning 28.9.1998 Ark 20 av 20