JVM Java Virtual Machine

Slides:



Advertisements
Liknande presentationer
Föreläsning 9 Programmeringsteknik och Matlab 2D1312/2D1305
Advertisements

Interface.  Interface är en datatyp och har alltså egen syntax och en hel del egna regler för vad arv från interface innebär.  Interface är renodlad.
Avlusning Debugger (”avlusare”) Breakpoints Watch.
INTRODUKTION TILL PROGRAMMERING
Array Skriv ett program som frågar följande: ”Hur många tal vill du mata in?” användaren matat in ett tal t.ex n. då frågar programmet n ggr följande.
Anders Sjögren Lagringsklasser •en variabel i C har två attribut –type( int, float, char..... ) –lagringsklass( auto, extern, register, static ) •lagringsklassens.
Imperativ Programmering
Next previous Internetprogrammering 2000 Internetprogrammering 2000 Föreläsning 10 Distribuerad programmering med Javas RMI, Remote Method Invocation.
Klassarv och inkapsling
Om Java C =>Java syntax variabler metoder färdiga klasser
Välkommen Vahid Mosavat
Programmeringsteknik för K och Media
Programmeringsteknik K och Media
Programmeringsteknik för K och Media
Programkodens uppbyggnad
Att programmera i språket Java
Föreläsning 2 Datalogi för E1 2D1343
Föreläsning 2 Primitiva datatyper Variabler och konstanter Tilldelning Inläsning Operatorer Villkorssatsen if Slingor: while och for.
Next previous Innehåll Inledning Några enkla exempel Pekare till och kort beskrivning av större exempel Speciella referenser (som används i marginalen)
Strömmar Vid läsning och skrivning används något som kallas strömmar.
OOP Objekt-orienterad programmering
Next previous Introduktion till Java Av Björn Eiderbäck Adress: Rum 1641, 6tr NADA Osquars Backe 2 Tel: OOMPAE 2000.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Klasser och instansvariabler -Tabeller av klassobjekt.
Objektorienterad programmering i Java
OOP F4:1 Marie Olsson OOP Objekt-orienterad programmering Föreläsning 4 Metoder klass-metoder instans-metoder.
Repetition inför slutprovet
Föreläsning 2 Kort Översikt Över Javaspråket. Källkodsformat Unicode används åäöμψζ tillåtna Inte alla miljöer klarar av det Källkod Bytekod Java VM för.
Vektorer (klassen Vector) Sortering
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 8 ( ) Innehåll: Trådprogrammering i Java - Avbrott (”interrupts”) - Metoden join() -
Objektorienterad Modellering Programmering och Analys
OOP Objekt-orienterad programmering
Programmeringsteknik för Media1 & K1
1. En infrastruktur för programutveckling
PROCESSPROGRAMMERING Föreläsning ‏ Innehåll: Högnivå objekt för trådprogrammering: - Trådgrupper (”Thread pools”)‏ - Exekverare (Executor.
Mitt första Java program Mahmud Al Hakim Copyright, Mahmud Al Hakim, 1.
OOP F3:1 Marie Olsson OOP Objekt-orienterad programmering Föreläsning 3 Iteration Många variabler av samma sort – Arrayer.
Föreläsning 14 ”Enkel” Filhantering.
1 Föreläsning 6 Programmeringsteknik och Matlab 2D1312/2D1305 Metoder & parametrar Array API och klassen ArrayList.
Next previous Innehåll Del 1-trådar Del 2-URLer Del 1: Trådar Föreläsning 8.
Objektorienterad programmering i Java
Next previous RMI, Remote Method Invocation Om du har boken av Marty Hall, läs avsnitt 15.8 För fler exempel se:
Föreläsning 1 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
1. Ett problem/uppgift.
PROGRAMMERINGSTEKNIK Övningsgrupp 3 Marcus Hjelm
Föreläsning 4 programmeringsteknik och Matlab 2D1312/ 2D1305
Föreläsning 1 Om kursen Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
ITK:P1 Föreläsning 2 Introduktion till objektorientering DSV Marie Olsson.
INTRODUKTION TILL PROGRAMMERING
PROCESSPROGRAMMERING Föreläsning 1 ( )‏ Innehåll: Introduktion till paralellprogrammering (“concurrent programming”)‏ Introduktion till parallellprogrammering.
ITK:P2 F8 Strömmar och filhantering DSV Peter Mozelius.
OOP F13:1 Marie Olsson OOP Objekt-orienterad programmering Föreläsning 13 Repetition variabler, selektion och iteration.
Programmering i C# Laborationer.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 2 ( )‏ Innehåll:Trådar: - Avbrott (”interrupts”)‏ - Metoden join()‏ Högnivå objekt för.
TILLÄMPAD DATALOGI (TILDA) Övningsgrupp 2 Marcus Hjelm
TILLÄMPAD DATALOGI (TILDA) Övning 1 Marcus Hjelm
Övning2 programmeringsteknik och Matlab 2D1312/ 2D1305
Övning 3. Repetition Metoder class RepetitionMetoder { public static void main(String [] args) double längd = 2.0; double bredd = 1.0; double area =
Föreläsning 7 Repetition Sammansatta datatyper –vektor (hakvektor, array) –matris.
1 Föreläsning 2 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
OOP&M - teori1 OOP del III–vecka 15 Mer NetBeans MouseEvent Graphics Threads TIJ Chapter 14 Menus sid Drawing File Dialogs
Föreläsning4 Repetition slingor Metoder. while-sats består av följande delar: 1. while 2. Villkor-sats (condition) 3. uttryck (statement) while-sats int.
OOP&M - teori1 OOP&M – Föreläsning 3 kap 2-4 Repetition Föreläsning-datayper-syntax-tilldelning.
Chapter 11: Exception Handling F Exceptions and Exception Types F Claiming Exceptions F Throwing Exceptions F Catching Exceptions F Creating Your Own Exception.
1 Föreläsning 4 Metoder & parametrar Array API och klassen ArrayList.
OOP&M - teori1 OOPM del II – Föreläsning vecka Abstrakta klasser/metoder igen Gränssnitt/Interface klasser igen tillämpat.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 1 ( ) INNEHÅLL: -Introduktion av kursen -Vad är programmering? -Programmeringsspråk.
Föreläsning 3: Booleans, if, switch
Föreläsning 15: Exceptions & lite swing, gränssnitt
Föreläsning 8: Exempel och problemlösning
Nätverkskommunikation
Presentationens avskrift:

JVM Java Virtual Machine En simulerad dator som förstår Javabytekod Finns utvecklad för alla platt-formar som Java fungerar på Javabytekod (kompilerad Javakod) är generell… Javaprogram interpreteras, C++-program exekveras… Ger något långsammare program…

Traditionell kompilering och exekvering Källkod skapas med texteditor Kompilator översätter källkoden till en objektfil Länkaren sätter ihop flera objektfiler till en exekverbar fil Operativsystemet placerar den exekverbara filen i primär-minnet och programmet exekveras

Kompilering och exe-kvering av Javaprogram Källkod skapas med texteditor Kompilatorn översätter källkoden till Javabytekod Den plattformsberoende interpretatorn (JVM) exekverar programmet genom att läsa Javabytekoden och se till att instruktionerna utförs

För varje program som exekveras startas en ny JVM Internetprogrammering där flera datorer samarbetar kan därigenom utvecklas och simuleras på en dator

Enkel I/O All in- och ut-kommunikation i Java hanteras som strömmar Tangentbord, skärm Filhantering Kommunikation över Internet Ett stort antal strömmar finns: Byte-strömmar in/ut: har ordet stream i sitt namn Char-strömmar in/ut: har orden Reader/Writer i sitt namn

Exempel på inmatning från tangentbord och utmatning till skärm import java.io.*; public class InputOutput { public static void main(String[] args) { String input = null; // Inmatning från tangentbord InputStreamReader in = new InputStreamReader(System.in); BufferedReader br = new BufferedReader(in); try { System.out.print("Mata in sträng: "); input = br.readLine(); } catch (IOException e) {;} // Utmatning till skärm System.out.println("Du matade in: " + input); ****************************************** Mata in sträng: Peter Carlsson Du matade in: Peter Carlsson

Filhantering Filhantering kan utföras på ett plattformsoberoende sätt File file = new File(”Text.txt”); long l = file.length(); boolean b = file.isDirectory(); boolean fd = file.delete(); Osv. Fler möjligheter: Namnbyte, path, senast ändrad, kan läsas/skrivas, skapa mapp, få lista på filer i en mapp etc.

Ex. filkopiering import java.io.*; public class FileCopy { public static void main(String[] args) { try { // Skapa filobjekt in/ut File src = new File(args[0]); File dest = new File(args[1]); // Skapa filströmmar in/ut FileReader srcStream = new FileReader(src); FileWriter destStream = new FileWriter(dest); // Copy file int c; while ((c = srcStream.read()) != -1) { destStream.write(c); } srcStream.close(); destStream.close(); System.out.println("FileCopy performed succesfully"); } // try catch (FileNotFoundException e) { System.err.println("File not found: " + args[0]); } catch (IOException e) { System.err.println("I/O error: " + e.getMessage()); } catch (ArrayIndexOutOfBoundsException e) { System.err.println("<usage: pgm sourceFile destFile>"); } } //main } // class FileCopy

Undantag (Exceptions) Fångar upp fel under exe-kveringen av ett program: Läsa i en tom fil Skriva i skrivskyddad fil Dividera 1 med 0 Överskridande av index i matris Etc. Med undantagshatering kan man bestämma hur sådana fel ska hanteras i programmet. Egna undantag kan skapas.

Catch-blocket utförs endast vid fel i try-blocket Syntax för undantag static void felFångare() { try { // Här görs något som kan leda // t ex till ett fel av typ // NumberFormatException kastas } catch (NumberFormatException e) { // Här görs något med anledning av // det kastade undantaget e Catch-blocket utförs endast vid fel i try-blocket Flera catch-block kan förekomma!

import java.io.*; public class DoubleInput { InputStreamReader in = new InputStreamReader(System.in); BufferedReader br = new BufferedReader(in); String input = null; public static void main(String[] args) throws IOException { DoubleInput dd = new DoubleInput(); // Mata in flyttal double d = dd.getDouble(); System.out.println("Du matade in flyttalet: " + d); } public double getDouble() throws IOException { System.out.print("Ge ett flyttal: "); input = br.readLine(); double d = Double.valueOf(input).doubleValue(); return d; } // getDouble() ************************************************ Ge ett flyttal: 2.56 Du matade in flyttalet: 2.56 Ge ett flyttal: Hej java.lang.NumberFormatException: Hej at java.lang.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1176) … Exception in thread "main"

import java.io.*; public class DoubleInput { InputStreamReader in = new InputStreamReader(System.in); BufferedReader br = new BufferedReader(in); String input = null; public static void main(String[] args) { DoubleInput dd = new DoubleInput(); // Mata in flyttal double d = dd.getDouble(); System.out.println("Du matade in flyttalet: " + d); } public double getDouble() { while (true) { try { System.out.print("Ge ett flyttal: "); input = br.readLine(); double d = Double.valueOf(input).doubleValue(); return d; catch (IOException e) {;} catch (NumberFormatException ee) {System.out.println("Inget flyttal!");} } // getDouble() **************************************************** Ge ett flyttal: asw ee Inget flyttal! Ge ett flyttal: 1.332 Du matade in flyttalet: 1.332

Utöver catch-block kan även finally-block förekomma (efter catch-blocken) Satser i ett finally-block exekveras även om try-blocket fungerar felfritt. Kan t ex användas för att stänga in- eller ut-ström till fil, internet etc.

Trådar Med trådade program kan exekvering pågå på flera ställen i programmet samtidigt En sorts (falsk) parallell-exekvering åstadkoms via trådar Datorn växlar snabbt och omärkligt mellan de olika trådarna Hur trådarna fungerar beror på operativsystemet Java har inbyggt stöd för trådar (Threads). Kan skapas via: Arv av klassen Thread Implemetering av gränssnittet (interface) Runnable

Enkelt tråd-ex I (arv av Thread) import java.io.*; public class SimpleThread { public static void main(String[] args) { // Create thread objects TestThread tt1 = new TestThread(1000000,"Thread 1"); TestThread tt2 = new TestThread(50,"Thread 2"); // Start threads tt1.start(); tt2.start(); // Print results System.out.println("Tråd tt1: " + tt1.sum); System.out.println("Tråd tt2: " + tt2.sum); } // main } // class SimpleThread ************************************************************ public class TestThread extends Thread{ int number, sum; String name; public TestThread(int i, String s) { this.number = i; this.name=s; } // constructor public void run() { for (int i=0;i<number;i++) sum = sum + i; System.out.println(name + ": sum: " + sum); } // run } // class TestThread ************************************************************* Tråd tt1: 0 Tråd tt2: 0

Enkelt tråd-ex II (arv av Thread) import java.io.*; public class SimpleThread { public static void main(String[] args) { TestThread tt1 = new TestThread(1000000,"Thread 1"); TestThread tt2 = new TestThread(50,"Thread 2"); tt1.start(); tt2.start(); try { tt1.join(); tt2.join(); } catch (InterruptedException e) {;} System.out.println("Tråd tt1: " + tt1.sum); System.out.println("Tråd tt2: " + tt2.sum); } // main } // class SimpleThread ************************************************* Tråd tt1: 1783293664 Tråd tt2: 1225

Enkelt tråd-ex III (impl. av Runnable) import java.io.*; public class ThreadRun { public static void main(String[] args) { // Create thread object Thread t1 = new Thread(new TestRunnable(25, "Tråd_1")); Thread t2 = new Thread(new TestRunnable(25, "Tråd_2")); // Start threads t1.start(); t2.start(); } // main() } // class ThreadRun ************************************************* public class TestRunnable implements Runnable { String name; int number; public TestRunnable(int num, String s) { this.number=num; this.name=s; } // constructor public void run() { for (int i=0;i<number;i++) System.out.print(name + ". "); } // run }

Enkelt tråd-ex III (impl. av Runnable) Resultat av exekvering Tråd_1. Tråd_1. Tråd_1. Tråd_1. Tråd_1. Tråd_1. Tråd_1. Tråd_1. Tråd_1. Tråd_1. Tråd_1. Tråd_1. Tråd_1. Tråd_1. Tråd_1. Tråd_1. Tråd_1. Tråd_2. Tråd_1. Tråd_2. Tråd_1. Tråd_2. Tråd_1. Tråd_2. Tråd_2. Tråd_2. Tråd_2. Tråd_2. Tråd_2. Tråd_2. Tråd_2. Tråd_2. Tråd_2. Tråd_2. Tråd_1. Tråd_1. Tråd_1. Tråd_1. Tråd_1. Tråd_2. Tråd_2. Tråd_2. Tråd_2. Tråd_2. Tråd_2. Tråd_2. Tråd_2. Tråd_2. Tråd_2. Tråd_2. Icke-trådad exekvering hade givit utskrift med 25 Tråd_1 följt av 25 Tråd_2

Fler exempel på trådmetoder (endast vid arv av Thread): suspend() (stoppa exekvering) resume() (återuppta exek.) sleep(tid) (vila angiven tid) setPriority(int prio) (ange priritet för tråd) etc

Fördelar med trådar Oundgängligt vid grafiska gränssnitt Arbete kan utföras i bakgrunden Utskrifter Nedladdning av filer från Internet Etc Växling mellan trådar är mindre resurskrävande än växling mellan olika processer Internetservrar kan behandla flera clienter samidigt

Faror med trådar Om flera trådar behandlar samma objekt (t ex en fil) kan oväntade saker hända… Kan förhindras via syn-kronisering (synchronized) av metoder eller programblock

Transaktion på bankkonto: class Konto { private double saldo; ... public void transaktion(double belopp) { saldo = saldo + belopp; } Möjlig händelse: Tråden i obj bankomat har precis hunnit utföra saldo+belopp ovan Tråden i obj bankomat blir avbruten, tråd i obj giro startar och utför saldo + belopp. Tråden i obj giro är färdig och tråden bankomat återupptar sitt arbete.

Åtgård class Konto { private double saldo; ... public synchronized void transaktion(double belopp) { saldo = saldo + belopp; } Synchronized medför att endast ett objekt i taget får använda metoden.