DD2310 Javaprogrammering för Pythonprogrammerare Johan Boye
James Gosling pappa till Java Hej.java
public class Hej { public static void main( String[] args ) { System.out.println( "Hej" );
Java basics Klamrar { och grupperar koden i block Python: Indentering Semikolon avslutar varje instruktion Python: Radslut Java kompileras Python interpreteras Java är statiskt typat Python är dynamiskt typat Average.java
public class Average { public static void main( String[] args ) { int x = 10; double y = 20.2; double z = (x+y)/2; System.out.println( z );
Primitiva typer Heltal: int, long, short, byte Reella tal float, double Tecken: char Sanningsvärden: boolean Max.java
import java.util.scanner; public class Max { public static void main( String[] args ) { Scanner scan = new Scanner( System.in ); System.err.print( "Mata in tal 1: " ); int n1 = scan.nextint(); System.err.print( "Mata in tal 2: " ); int n2 = scan.nextint(); if ( n1 >= n2 ) { System.out.println( "Max: " + n1 ); else { System.out.println( "Max: " + n2 );
Utmatning System.out och System.err System.out.println( x ); System.out.print( Svar: ); System.err.println( x );
Inmatning - Scanner Scanner scan = new Scanner(System.in); int i = scan.nextint(); float f = scan.nextfloat(); boolean b = scan.nextboolean(); String s = scan.next(); String line = scan.nextline(); Finns många andra sätt att göra inmatning på
Instruktioner if (cond) { else { while (cond) { do { while (cond) for (init; condition; step){ Fact.java
import java.util.scanner; public class Fact { public static void main( String[] args ) { Scanner scan = new Scanner( System.in ); System.err.print( "Mata in n: " ); int n = scan.nextint(); int result = 1; for ( int i=1; i<=n; i++ ) { result *= i; System.out.println( n + "! = " + result );
Villkor Är av typ boolean x==y x>y x<y x>=y x<=y x!=y p&&q, p q,!p Villkor evalueras bara så långt det behövs: if (x!=0 && y/x>1) { SumSquares.java
import java.util.scanner; public class SumSquares { public static int square( int n ) { return n*n; public static void main( String[] args ) { Scanner scan = new Scanner( System.in ); System.err.print( "Summera kvadrater upp till: " ); int n = scan.nextint(); while ( n>=0 ) { int result = 0; for ( int i=0; i<=n; i++ ) { result += square(i); System.out.println( "Resultat: " + result ); System.err.print( "Summera kvadrater upp till: " ); n = scan.nextint();
Metoder public int square( int x ) { return x*x;
Metoder Synlighet Resultat-typ Namn Parameterlista public int square( int x ) { return x*x;
Metoder boolean isodd( int n ) { return (n%2 == 1); void sayhello() { System.our.println( Välkommen );
Metoder // Detta program är buggigt private void addfive( int n ) { n += 5; public void printresult() { int n = 3; addfive( n ); System.out.println( n ); Voting.java
Arrayer int[] candidate = new int[10];
import java.util.scanner; public class Voting { public static void main( String[] args ) { int[] candidate = new int[10]; Scanner scan = new Scanner( System.in ); System.err.print( "En röst på kandidat nr: " ); int n = scan.nextint(); while ( n>=0 && n<candidate.length ) { candidate[n]++; System.err.print( "En röst på kandidat nr: " ); n = scan.nextint(); for ( int i=0; i<candidate.length; i++ ) { System.out.println( candidate[i] + " röster på kand " + i );
Metoder private void addfive( int[] n ) { n[0] += 5; public void printresult() { int[] n = new int[10]; addfive( n ); System.out.println( n[0] ); Candidate.java NewVoting.java
Objekt Ett objekt är en paketering av data och beteenden (metoder). T.ex. i rösträknings-uppgiften: En Candidate har ett namn och ett antal röster Ett objekt är alltid en instans av en klass Candidate name votes Klass name = kalle votes = 27 name = eva votes = 15 Objekt
Tillstånd Ett objekts tillstånd bestäms av värdena på dess instansvariabler Kalle får en röst till name = kalle votes = 27 name = kalle votes = 28 Samma objekt men nytt tillstånd
public class Candidate { private String name; private int votes; public Candidate( String n ) { name = n; public void addvote() { votes++; public int getvotes() { return votes; public String getname() { return name;
Klasser public class Candidate { private String name; private int votes; public Candidate( String n ) { name = n; public void addvote() { votes++; Instansvariabler Metod Konstruktor FlexibleVoting.java BetterVoting.java
Konstruktor Har samma namn som klassen Ingen resultat-typ Initierar objekt Anropas när objektet skapas (när new anropas) public Candidate( String n ) { name = n;
Deklarera och skapa objekt Candidate k; k null referens till en Candidate k = new Candidate( kalle ); k name = kalle votes = 0
Arrayer av objekt Candidate[] k = new Candidate[5]; k null null null null null k[0] = new Candidate( kalle ); k null null null null name = kalle votes = 0
public class VoteCounter { public static void main( String[] args ) { Scanner scanner = new Scanner( System.in ); Candidate[] cand; /* * Läs in kandidater */ System.err.print( "Hur många kandidater? " ); int k = scanner.nextint(); cand = new Candidate[k]; for ( int i=0; i<k; i++ ) { System.err.print("Namn på kandidat +i+": ); String n = scanner.next(); cand[i] = new Candidate( n ); fortsättning på nästa bild
/* * Läs in röster */ System.err.print( "En röst på kandidat nr: " ); int n = scanner.nextint(); while ( n>=0 && n<cand.length ) { cand[n].addvote(); System.err.print("En röst på kandidat nr: ); n = scanner.nextint(); /* * Skriv ut resultat */ for ( int i=0; i<cand.length; i++ ) { System.out.println( cand[i].getvotes() + " röster på " + cand[i].getname() );
Klassvariabler Klassvariabler är gemensamma för alla objekt av en klass. static double PI = 3.14159265; Konstanter (kan inte ändras) deklareras som static final static final double PI = 3.14159265;
public class Circle { public static final double PI = 3.14159265; private double radius; public Circle( double r ) { radius = r; public double circumference() { return 2*radius*PI; public double area() { return radius*radius*pi;
Statiska metoder Även metoder kan deklareras som static till exempel sqrt i klassen Math Då kan de anropas utan att först skapa en instans, till exempel double x = Math.sqrt(2.0);
Återanvändning av kod Skriv all kod från scratch Hitta en klass som gör exakt det du vill ha gjort Bygg ditt program från existerade, vältestade klasser t.ex. Scanner Utöka en existerande klass genom ärvning
Ärvning Man kan skapa subklasser till klasser med nyckelordet extends public class PartisanCandidate extends Candidate { private String party; public PartisanCandidate( String n, String p ) { super( n ); party = p; String getparty() { return party;
public class Candidate { private String name; private int votes; public Candidate( String n ) { name = n; public void addvote() { votes++; public int getvotes() { return votes; public String getname() { return name;
Ärvning En delklass ärver alla egenskaper från superklassen. PartisanCandidate p = new PartisanCandidate( kalle, S ); String n = p.getname();
Klass-hierarkin Man kan definiera subklasser till subklasser, osv.
Multipel ärvning är inte möjlig public class hasname { public String name; FEL! public class hasparty { public String party; public class Candidate extends hasname, hasparty {
Interface Ett interface är en samling deklarationer av variabler och metoder Interface hasname { String getname(); En klass kan implementera ett eller flera interface public class Candidate implements hasname { String name; public String getname() { return name;
Interface Klasser som inte är relaterade till varandra i hierarkin av klasser kan ändå implementera samma interface public class Candidate implements hasname { public class University implements hasname { hasname h; String name = h.getname();
Interface Ett välanvänt interface är Comparable (används i lab 5) Används för att jämföra vilket av två objekt som är störst