Java Utvecklat på SUN Microsystems mitten 1990-talet Ursprungligen för Webprogram Nu mycket spritt Massor med läroböcker Vi använder Lewis&Loftus http://javasuncom/javase/6/docs/api/
Skillnader mellan Python och Java Viktigast: Java har statisk typning Alla variabler, metoder etc ska deklareras och ges en fix typ Typen får inte ändras under programmets gång Python Java - int a; def siffersum(n) int siffersum(int n)
En typ kan vara: inbyggd typ namn på en klass int boolean float char String Ball array av ovanstående int[] String[]
fallgropar true och false med små bokstäver char har enstaka tecken omslutn av String har textsträngar omslutna av Javas arrayer påminner om Matlabs, och är mycket olika Pythons listor Pythons listor och dictionaries saknas helt i Java
Allt har en typ Typ ska anges: Varje gång en variabel introduceras För varje attribut till en klass För varje metod: resultattyp och parametrars typer
variabel/attribut: Deklareras genom att skriva typens namn följt av variabelns namn int a; Ball b; Obs! semikolon avslutar alla satser, liksom i Matlab int a = 1; float b = 253; Får i samband med deklarationen ges ett initialvärde
Arraydeklarationer int[] a; a = new int[5]; int[] a = new int[5]; a ska vara av typ array of int, ännu inte bestämt hur lång a blir ett arrayobjekt som tar 5 stycken int, a[0]a[4] (inledningsvis är elementen odefinierade) kombinerar ovanstående int [] a = {5,18,22,0,3; Deklarerar, skapar och initierar i ett drag! int [] [] c; c är en tvådimensionell array Elementet på plats i,j noteras c[i][j]
Metoddeklaration Resultattypen skrivs före metodnamnet För varje formell parameter skrivs dess typ före parameterns namn Inget self! Python: def checkpos(self,ball,pos) boolean checkpos(ball ball, Position pos) En metod som inte returnerar något får void istället för en typ: void runsimulation()
Allt i Java är klasser med sina metoder Det finns inget huvudprogram Det finns inga funktioner - alla sådana måste vara metoder till någon klass Python Java def move(self, pos): <metodkropp> void move(position pos) { <metodkropp> Typdeklarera resultat och parametrar Inget kolon metodkroppen inom krullparanteser {
Blockstruktur Python Kommandon avslutas med ny rad Block av kommandon anges genom indragning Viktiga inledningar av block följs av kolon Java Kommandon avslutas med semikolon, ; Block av kommandon anges genom att innesluta dem i krullparanteser, { Java använder inte kolon alls
Python if a>b: c = 0 a += 1 b = a Java if (a>b) { c = 0; a += 1; b = a;
Indragningar och radbrott är betydelselösa if (a>b) { c = 0; a += 1; b = a; if (a>b) { c = 0; a += 1; b = a; Alla dessa är samma! if (a>b) {c =0; a += 1; b = a; if (a>b) {c=0;a += 1;b = a; Fortsätt att använda indragningar och radbrott för att öka läsbarheten!
Statiskt scope För varje deklaration är det väldefinierat för vilket område av koden den gäller Ex: Deklaration av en variabel har räckvidden resten av det kodblocket, alltså det som avgränsas av { if (a>b) { int a; Här inne kan a användas Här ute kan a inte användas
Tilldelning Python Java a = 0 b = c/(d+1) c += 2 a = 0; b = c/(d+1); c += 2; I Java finns dessutom a++; kortform för a+=1;
if Python if a>b: d = 2 elif a<b: d = 1 e = 0 else: d = 0 Java if (a>b) d = 2; else if (a<b) { d = 1; e = 0; else d = 0; Paranteser runt villkor obligatoriska elif heter else if Inga kolon Glöm inte semikolon efter kommandon
while Python while a>b: d = 2+a a -= 1 Java while (a>b) { d = 2+a; a--; Paranteser runt villkor obligatoriska Inga kolon Glöm inte krullparanteser om loopen består av flera kommandon, och semikolon efter kommandon
do Python Java Finns inte do { d = 2+a; a--; while (a<b); Som while, men kollar loopvillkoret i slutet av loopkroppen
while (villkor) { loopkropp do { loopkropp while (villkor); loopkropp loopvillkor loopvillkor loopkropp
for Python for elem in balls: for i in range(20): Java for (elem:balls) { for (i=0; i<20; i++) {
for i Java for (initiering; villkor; update) { loopkropp 1 initiering görs en gång Den innehåller ofta deklaration av loopräknare 2 Så länge villkor är sant, gör loopkropp 3 Efter varje gång loopkropp gjorts, gör också update
for (initiering; villkor; update) { loopkropp initiering update villkor loopkropp
int sum = 0; for (int i=0; i<10; i++) { sum += i*i
Klassdeklaration Python Java class Ball(): class Ball { def init (self,x): Ball(x) { Inga paranteser eller kolon Glöm inte krullparanteser! Konstruktormetoden heter samma som klassnamnet och ges aldrig någon typ
Instansiering Python Java theball = Ball(25) theball = new Ball(25); Det speciella ordet new signalerar att ett nytt objekt ska konstrueras Att använda attribut och metoder sker exakt likadant, med punktnotation
import Python import Tkinter from Tkinter import Frame from Tkinter import * Java import javaxswing import javaxswingjframe import javaxswing* Inget from, utan använd punktnotation istället
Modifiers Extra egenskaper kan anges i samband med en deklaration Skrivs före typen public Detta kan användas även utanför den fil där deklarationen står static final Detta förknippas med klassen och inte med klassens objekt Detta är en konstant som inte får tilldelas nytt värde
final int SIZE = 600; public static float arcsin(float x) {
Output Python print Hej Java Systemoutprintln ( Hej ); finns också: Systemoutprint() (utan radbyte)
Input import javautilscanner; Scanner scan = new Scanner(Systemin); Python: a = scannextline(); i = scannextint(); a = raw_input() i = input()
Ett fullständigt program Fil Prog: public class Prog class klass1 class klass2 En serie klassdefinitioner varav precis en är public Denna kallas programmets huvudklass och måste ha samma namn som filen den ligger i Obs! inget huvudprogram som i Python
main När ett program körs börjar det alltid med metoden main() i huvudklassen Huvudklassen måste alltså ha en sådan metod För main() gäller: Den ska kunna anropas utifrån, dvs vara public Den ska höra till själva huvudklassen och inte till något av dess objekt, dvs vara static Den ska inte returnera något värde, dvs i stället för resultattyp har den void Den ska som parameter ha en array av String
public class MyMainProg { public static void main(string[] args) { Det som står här kommer att köras när MyMainProg körs
Exempel //******************************************************************** // GasMileagejava Author: Lewis/Loftus // // Demonstrates the use of the Scanner class to read numeric data //******************************************************************** import javautilscanner; public class GasMileage { //----------------------------------------------------------------- // Calculates fuel efficiency based on values entered by the // user //----------------------------------------------------------------- public static void main (String[] args) { int miles; double gallons, mpg; Scanner scan = new Scanner (Systemin); Python: Systemoutprint ("Enter the number of miles: "); miles = scannextint(); miles = input( Enter the number of miles ) Systemoutprint ("Enter the gallons of fuel used: "); gallons = scannextdouble(); gallons = input( Enter the gallons of fuel used ) mpg = miles / gallons; mpg = miles / gallons Systemoutprintln ("Miles Per Gallon: " + mpg); print Miles Per Gallon, mpg
import javatextdecimalformat; import javautilscanner; public class Average { //----------------------------------------------------------------- // Computes the average of a set of values entered by the user // The running sum is printed as the numbers are entered //----------------------------------------------------------------- public static void main (String[] args) { int sum = 0, value, count = 0; double average; sum = count = 0 Scanner scan = new Scanner (Systemin); Systemoutprint ("Enter an integer (0 to quit): "); value = scannextint(); while (value!= 0) // sentinel value of 0 to terminate loop { count++; sum += value; Systemoutprintln ("The sum so far is " + sum); value = input ( Enter an integer (0) to quit ) while value!= 0: count += 1 sum += value print The sum so far is, sum Systemoutprint ("Enter an integer (0 to quit): "); value = scannextint(); value = input ( Enter an integer ) Systemoutprintln (); if (count == 0) Systemoutprintln ("No values were entered"); else { average = (double)sum / count; Systemoutprintln ("The average is " + average); if count == 0: print No values were entered ) else: average = float(sum) / count print The average is, average
mport javautilscanner; ublic class PalindromeTester //----------------------------------------------------------------- // Tests strings to see if they are palindromes //----------------------------------------------------------------- public static void main (String[] args) { String str, another = "y"; another = y int left, right; Scanner scan = new Scanner (Systemin); while (anotherequalsignorecase("y")) // allows y or Y { Systemoutprintln ("Enter a potential palindrome:"); str = scannextline(); left = 0; right = strlength() - 1; while (strcharat(left) == strcharat(right) && left < right) { left++; right--; while another == y or another == Y : str = raw_input( Enter a potential palindrome ) left = 0 right = len(str)-1 while str[left] == str[right] and left < right: left += 1 right -= 1 Systemoutprintln(); if (left < right) Systemoutprintln ("That string is NOT a palindrome"); else Systemoutprintln ("That string IS a palindrome"); if left < right: print That string is NOT a palindrome else: print That string IS a palindrome Systemoutprintln(); Systemoutprint ("Test another palindrome (y/n)? "); another = scannextline(); another = raw_input( Test another palindrome (y/n?
NetBeans http://wwwnetbeansorg/
Inför labben Ny partner, som alltid Läs L&L 21 26, 31-36, 51-58, 71-72 Provkör netbeans med något enkelt, tex http://testwwwnetbeansorg/kb/docs/java/quickstarthtml