Hoofdstuk 2: Inleiding tot Java Applicaties JAVA 1 2.1 Inleiding In dit hoofdstuk Voorbeelden om enkele kenmerken van Java te illustreren Twee programma vormen : applicaties en applets JAVA 2 2.2 Eerste Java-programma: Een zin afdrukken Gewenste programma uitvoer : Welcome to Java Programming! JAVA 3 1 2 3 4 5 6 7 8 9 10 11 12 13 // Fig. 2.1: Welcome1.java // Een eerste programma in Java. public class Welcome1 { // main methode begint de uitvoering van Java applicatie public static void main( String args[] ) { System.out.println( "Welcome to Java Programming!" ); } // einde methode main } // einde klasse Welcome1 JAVA 4 1 2 // Fig. 2.1: Welcome1.java // Een eerste programma in Java. Commentaar (lijn 1 en 2) Beschrijft stukken code Verhoogt de leesbaarheid van programma Wordt door de Java-compiler genegeerd 3 soorten : Eén-lijn commentaar : // ... Commentaar die uit meerdere lijnen bestaat : /* ... */ Document commentaar : /** ... */ JAVA 5 3 Blanco regel (lijn 3) Zorgt voor de leesbaarheid van programma Witregels, spaties en tabs = “wit-ruimte” karakters, door de compiler genegeerd JAVA 6 1 2 3 4 5 6 7 8 9 10 11 12 13 // Fig. 2.1: Welcome1.java // Een eerste programma in Java. public class Welcome1 { // main methode begint de uitvoering van Java applicatie public static void main( String args[] ) { System.out.println( "Welcome to Java Programming!" ); } // einde methode main } // einde klasse Welcome1 JAVA 7 4 public class Welcome1 Klasse definitie (lijn 4) Ieder Java programma => minstens één klasse door de programmeur gedefinieerd (= user-defined class) Keyword= sleutelwoord, heeft een speciale betekenis in Java class gevolgd door naam van klasse (= identifier) Afspraak : Naam klasse begint altijd met een hoofdletter. Alsook elk woord in de klassenaam. Vb.: VoorbeeldKlasseNaam JAVA 8 4 public class Welcome1 Identifier Rij karakters bestaande uit letters, cijfers, underscores (_) en dollartekens ($) Begint nooit met een cijfer, heeft geen spaties Voorbeelden: Welcome1, $value, value, button7 Java is case sensitive (hoofdletter-gevoelig) 7button is ongeldig a1 A1 public sleutelwoord Wordt later besproken JAVA 9 4 5 … public class Welcome1 { 13 } // einde klasse Welcome1 Linkerhaakje (lijn 5) Blokken vormen Rechterhaakje sluit het blok (lijn 13) JAVA 10 1 2 3 4 5 6 7 8 9 10 11 12 13 // Fig. 2.1: Welcome1.java // Een eerste programma in Java. public class Welcome1 { // main methode begint de uitvoering van Java applicatie public static void main( String args[] ) { System.out.println( "Welcome to Java Programming!" ); } // einde methode main } // einde klasse Welcome1 JAVA 11 7 public static void main( String args[] ) Onderdeel van elke Java applicatie (7) Applicaties starten met de uitvoering van main main is een methode Java applicaties bevatten één of meerdere methodes Juist één methode moet main genoemd worden Methodes verrichten taken en kunnen informatie teruggeven void betekent geen teruggeef-informatie JAVA 12 8 9 10 11 { System.out.println( "Welcome to Java Programming!" ); } // einde methode main Linkerhaakje = begin body main In body : instructies System.out Standard output object Drukt af in command window(MS-DOS prompt) Methode System.out.println Afgesloten door rechterhaakje } (lijn 11) Toont een zin Argument tussen haakjes instructies=statements Statements worden afgesloten met ; JAVA 13 2.2.1 Compilatie en uitvoering van Java Applicatie Bewaren javac Welcome1.java (compiler) Bestandsnaam = klassenaam.java Vb. : Welcome1.java Welcome1.class (=uw applicatie, bestaande uit bytecodes) java Welcome1 (interpreter) JAVA uitvoering van applicatie 14 2.3 Eerste Java programma wijzigen. Eén zin afdrukken met meerdere statements Meerdere zinnen afdrukken met één enkel statement JAVA 15 2.3.1 9 10 Eén zin met meerdere statements System.out.print( "Welcome to " ); System.out.println( "Java Programming!" ); Welcome to Java Programming! JAVA 16 2.3.2 9 Meerdere zinnen met één enkel statement System.out.println ( "Welcome\nto\nJava\nProgramming!" ); Newline karakter (\n) Welcome to Java Programming! “Speciale tekens” bij methodes System.out.print en system.out.println new line = harde return JAVA 17 Escape characters Backslash ( \ ) Speciale karakters die output vormgeven Voorbeelden : \n \t \r \\ \” JAVA 18 2.4 Tekst in een Dialog Box tonen Weergave Meeste Java applicaties gebruiken vensters of een dialog box We gebruikten het command venster De klasse JOptionPane laat ons het gebruik van dialog boxes toe JAVA 19 Packages Verzameling van voorgedefinieerde klassen Groepen gerelateerde klassen = packages Verzameling van alle packages = Java class library of Java applications programming interface (Java API) JOptionPane zit in javax.swing package Deze package bevat klassen om Grafische User Interfaces (GUIs) te gebruiken JAVA 20 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 // Fig. 2.6: Welcome4.java // Meerdere lijnen in een dialog boxafdrukken // Java extension packages import javax.swing.JOptionPane; // importeert klasse JOptionPane public class Welcome4 { // main methode start de uitvoering van Java applicatie public static void main( String args[] ) { JOptionPane.showMessageDialog( null, "Welcome\nto\nJava\nProgramming!" ); System.exit( 0 ); // beëindigt de applicatie } // einde methode main JAVA 21 4 // Java extension packages 5 import javax.swing.JOptionPane; Twee groepen packages in Java API Core (=kern) packages Beginnen met java Zitten in Java 2 Software Development Kit Extension (=uitbreidings) packages Beginnen met javax Nieuwe Java packages Zitten in Java 2 Software Development Kit JAVA 22 4 // Java extension packages 5 import javax.swing.JOptionPane; import statements Laten de compiler toe de gebruikte klassen in een programma te identificeren en te localiseren In ons vb. : import statement vertelt de compiler om de klasse JOptionPane uit de javax.swing package te laden JAVA 23 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 // Fig. 2.6: Welcome4.java // Meerdere lijnen in een dialog boxafdrukken // Java extension packages import javax.swing.JOptionPane; // importeert klasse JOptionPane public class Welcome4 { // main methode start de uitvoering van Java applicatie public static void main( String args[] ) { JOptionPane.showMessageDialog( null, "Welcome\nto\nJava\nProgramming!" ); System.exit( 0 ); // beëindigt de applicatie } // einde methode main JAVA 24 12 13 JOptionPane.showMessageDialog( null, "Welcome\nto\nJava\nProgramming!" ); Aanroep methode showMessageDialog van de klasse JOptionPane Twee argumenten Meerdere argumenten scheiden met komma’s Nu is eerste argument altijd null Tweede argument is string die wordt getoond showMessageDialog is een static methode van de klasse JOptionPane static methodes aanroepen via : klasse-naam . methode-naam JAVA 25 15 System.exit( 0 ); // beëindigt de applicatie Aanroep static method exit van de klasse System Stopt de applicatie 0-argument = applicatie is correct geëindigd Gebruiken in elke applicatie die een GUI toont Niet-nul = meestal heeft zich een fout voorgedaan Klasse System deel van package java.lang Geen import statement nodig java.lang automatisch geïmporteerd in elk Java programma JAVA 26 2.5 Andere Java Applicatie: Optellen van gehele getallen Programma Gebruikt input dialogs om twee waarden aan de gebruiker te vragen Gebruikt message dialog om de som van de twee waarden te tonen JAVA 27 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 // Fig. 2.9: Addition.java // Een bijkomend programma. // Java extension packages import javax.swing.JOptionPane; // importeert klasse JOptionPane public class Addition { // main methode start de uitvoering van Java applicatie public static void main( String args[] ) { String firstNumber; // eerste string ingegeven door gebruiker String secondNumber; // tweede string ingegeven door gebruiker int number1; // eerste getal om op te tellen int number2; // tweede getal om op te tellen int sum; // som van number1 en number2 JAVA 28 12 13 14 String firstNumber; // eerste string ingegeven door gebruiker String secondNumber; // tweede string ingegeven door gebruiker int number1; // eerste getal om op te tellen Variabelen Geheugenlocatie waarin een waarde wordt gestockeerd firstNumber en secondNumber zijn van data type String (package java.lang) bevat strings Naam van variabele = willekeurige identifier Declaraties eindigen met ; Heeft een naam en is van een bepaald datatype Mogelijk meerdere variabelen van hetzelfde type tegelijkertijd te declareren Voeg commentaar toe om het doel van variabelen te beschrijven JAVA 29 14 15 16 int number1; int number2; int sum; // eerste getal om op te tellen // tweede getal om op te tellen // som van number1 en number2 Variabelen van het type int int bevat gehele getallen : 0, -4, 97 Data types float en double kunnen decimalen stockeren Data type char bevat één enkel karakter: x, $, \n, 7 Primitieve data types - later in hoofdstuk 4 JAVA 30 18 // lees eerste getal van gebruiker in als een String 19 firstNumber = 20 JOptionPane.showInputDialog( "Enter first integer" ); 21 22 // lees tweede getal van gebruiker in als een String 23 secondNumber = 24 JOptionPane.showInputDialog( "Enter second integer" ); 25 // som van number1 en number2 JAVA 31 Methode JOptionPane.showInputDialog toont de dialoogbox en leest een string in Bij ingave van een verkeerd type van data (nietinteger) of bij klikken op Cancel, zal er zich een fout voordoen Inleesresultaat van showInputDialog toekennen aan firstNumber Toekenningsstatement = binaire operator - heeft twee operanden Rechterlid wordt geëvalueerd en toegekend aan variabele in het linkerlid Lees als: firstNumber krijgt de waarde van JOptionPane.showInputDialog( "Enter first integer" ) JAVA 32 26 27 28 29 30 31 32 // converteer getallen van type String naar het type int number1 = Integer.parseInt( firstNumber ); number2 = Integer.parseInt( secondNumber ); // Sommeer de getallen sum = number1 + number2; JAVA 33 27 28 number1 = Integer.parseInt( firstNumber ); number2 = Integer.parseInt( secondNumber ); Methode Integer.parseInt Converteert String argument in een integer (type int) int teruggegeven door Integer.parseInt, wordt toegekend aan de variabele number1 (line 27) Klasse Integer in java.lang Herinner u dat number1 als int werd gedeclareerd Lijn 28 idem JAVA 34 31 sum = number1 + number2; Toekenningsstatement Berekent de som van number1 en number2 (rechterzijde) Gebruikt de toekenningsoperator = om het resultaat in de variabele sum te stoppen Lees als: sum krijgt de waarde van number1 + number2 number1 en number2 zijn operanden JAVA 35 31 sum = number1 + number2; Visuele presentatie sum = 0; number1 = 1; number2 = 2; sum 0 sum = number1 + number2; na uitvoering van statement sum 3 JAVA 36 33 34 35 36 37 38 39 40 41 // toon de resultaten JOptionPane.showMessageDialog( null, "The sum is " + sum, "Results", JOptionPane.PLAIN_MESSAGE ); System.exit( 0 ); // beëindigt de applicatie } // einde methode main 42 } // eind klasse Addition JAVA 37 34 35 36 JOptionPane.showMessageDialog( null, "The sum is " + sum, "Results", JOptionPane.PLAIN_MESSAGE ); showMessageDialog om resultaten te tonen "The sum is " + sum Samenvoeging van een String en een ander data type Dit resulteert in een nieuwe string Als sum 117 bevat, dan resulteert "The sum is " + sum in een nieuwe string "The sum is 117” Meer over strings in hoofdstuk 10 JAVA 38 JOptionPane.showMessageDialog( null, "The sum is " + sum, "Results", JOptionPane.PLAIN_MESSAGE ); 34 35 36 Andere versie van showMessageDialog Eist vier argumenten (in plaats van twee) Eerste argument: null Tweede: weer te geven string Derde: string in titelbar Vierde: type van bericht met icoon Lijn 36 geen icoon: JoptionPane.PLAIN_MESSAGE JAVA 39 Messa g e d ia lo g typ e Ic o n Desc rip tio n JOptionPane.ERROR_MESSAGE Displays a dialog that indicates an error to the user. JOptionPane.INFORMATION_MESSAGE Displays a dialog with an informational message to the user. The user can simply dismiss the dialog. JOptionPane.WARNING_MESSAGE Displays a dialog that warns the user of a potential problem. JOptionPane.QUESTION_MESSAGE Displays a dialog that poses a question to the user. This dialog normally requires a response, such as clicking on a Yes or a No button. JOptionPane.PLAIN_MESSAGE no icon Displays a dialog that simply contains a message, with no icon. Fig. 2.12 JOptionPane c o nsta nts fo r m essa g e d ia lo g s. JAVA 40 2.7 Rekenkundige bewerkingen Gebruik * voor vermenigvuldiging / voor deling +, - Geen operator voor exponent (zie hoofdstuk 5) Integer deling kapt quotiënt af 7 / 5 => 1 Rest-operator % 7 % 5 => 2 JAVA 41 Prioriteitsregels Haakjes ( ) *,/,% +, - Bij gelijke prioriteit => regels van de associativiteit (van L naar R) JAVA 42 2.8 Beslissingen: Relationele operatoren if controlestructuur if (voorwaarde) body_voorwaarde_geldig => als de voorwaarde geldt (= true), dan wordt de body van het if statement uitgevoerd Voorwaarden kunnen geformuleerd worden met relationele operatoren en/of gelijkheidsoperatoren JAVA 43 Operator = > < In Java == != > < >= <= exact gelijk verschillend groter dan kleiner dan groter dan of gelijk aan kleiner dan of gelijk aan JAVA 44 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 // Fig. 2.20: Comparison.java // Vergelijk integers gebruikmakend van if structuur, relationele operatoren // en gelijkheidsoperatoren. // Java extension packages import javax.swing.JOptionPane; public class Comparison { // main method start de uitvoering van Java applicatie public static void main( String args[] ) { String firstNumber; // eerste string ingegeven door gebruiker String secondNumber; // tweede string ingegeven door gebruiker String result; // een string die de uitvoer bevat int number1; // eerste getal om te vergelijken int number2; // tweede getal om te vergelijken JAVA 45 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 // lees eerste getal van gebruiker in als een string firstNumber = JOptionPane.showInputDialog( "Enter first integer:" ); // lees tweede getal van gebruiker in als een string secondNumber = JOptionPane.showInputDialog( "Enter second integer:" ); // converteer getallen van type String naar het type int number1 = Integer.parseInt( firstNumber ); number2 = Integer.parseInt( secondNumber ); // initialiseer het resultaat als een lege String result = ""; JAVA 46 34 3534 3635 36 37 37 38 38 3939 4040 4141 4242 4343 4444 4545 4646 4747 48 48 49 49 50 5051 51 if ( number1 == number2 ) ifresult ( number1 == number2 = number1 + " == )" + number2; result = number1 + " == " + number2; if ( number1 != number2 ) if ( number1 != number2 ) result = number1 + " != " + number2; result = number1 + " != " + number2; if if( (number1 number1<<number2 number2) ) result result==result result++"\n" "\n"++number1 number1++" "<<" "++number2; number2; if if( (number1 number1>>number2 number2) ) result==result result++"\n" "\n"++number1 number1++" ">>" "++number2; number2; result number1<= <=number2 number2) ) if if( (number1 result==result result++"\n" "\n"++number1 number1++" "<= <=" "++number2; number2; result if ( number1 >= number2 ) if ( number1 >= number2 ) result = result + "\n" + number1 + " >= " + number2; result = result + "\n" + number1 + " >= " + number2; JAVA 47 34 35 37 38 40 41 if ( number1 == number2 ) result = number1 + " == " + number2; if ( number1 != number2 ) result = number1 + " != " + number2; if ( number1 < number2 ) result = result + "\n" + number1 + " < " + number2; if structuur om te testen op gelijkheid (= =) Als de conditie waar (true) is Rechterlid wordt eerst geëvalueerd, nieuwe string wordt toegekend aan result result = concatenatie variabelen + operator result = result + andere strings Als de conditie onwaar (false) is, dan wordt statement overgeslagen JAVA 48 52 53 54 55 56 57 // Toon resultaten JOptionPane.showMessageDialog( null, result, "Comparison Results", JOptionPane.INFORMATION_MESSAGE ); System.exit( 0 ); // beëindigt de applicatie 58 59 } // einde methode main 60 61 } // einde klasse Comparison JAVA 49 Prioriteitsregels () *, /, % +, <, <=, >, >= ==, != = Bij gelijke prioriteit => alle operatoren worden verbonden van links naar rechts, behalve = (assignment) x = y = z => x = (y = z) JAVA 50 Oefeningen Hoofdstuk 2 JAVA 51 Geldige identifiers? Bill main Sue’s start begin xyz123 123xyz JAVA int y=2 prog#2 DitIsGoed dit_is_ook_goed zonne-kant $ 52 Welke uitvoer krijgen we? System.out.println( ”getal1+getal2" ); System.out.println( getal1 + getal2 ); met in beide gevallen getal1=21 en getal2=43 JAVA 53 Hoe krijg je volgende zinnen op het scherm? Open de map C:\Mijn Documenten Volg de pijl “Omleiding” Het boek voor is dat van Engelstalig Java Deitel. JAVA 54 Bepaal resultaat : 2+3*4= (2+3)*4= 6*3/2*4= 6*3/(2*4)= 6*(8%(2*3))= 17/8+9%5-3*2= 17/(8+9)%(5-3)*2= JAVA 12/(2*8%4)= 20*17/8%4= 55 Schrijf een programma dat 2 getallen met elkaar vermenigvuldigt. Laat de gebruiker hierbij de waarden ingeven. Vraag 2 getallen in en geef het grootste terug op het scherm. Vraag het maandsalaris in en bereken het jaarsalaris (zonder vakantiegeld) en het vakantiegeld (=8% vh jaarsalaris) JAVA 56 Oplossingen Hoofdstuk 2 JAVA 57 Welke uitvoer krijgen we? System.out.println( ”getal1+getal2" ); System.out.println( getal1 + getal2 ); met in beide gevallen getal1=21 en getal2=43 getal1+getal2 64 JAVA 58 Hoe krijg je volgende zinnen op het scherm? Open de map C:\Mijn Documenten System.out.println( "Open de map C:\\Mijn Documenten" ); Volg de pijl “Omleiding” System.out.println( "Volg de pijl \"Omleiding\""); Het boek voor is dat van Java Deitel. Engelstalig System.out.println( "Het boek voor\tJava\nis dat van\tDeitel.\nEngelstalig"); JAVA 59 Bepaal resultaat : 2+3*4 = 2 + 12 = 14 (2+3)*4 = 5 * 4 = 20 6*3/2*4 = 18/2*4 = 9*4 = 36 6*3/(2*4) = 6*3/8 = 18/8 = 2 6*(8%(2*3)) = 6 * (8%6) = 6*2 = 12 JAVA 60 Bepaal resultaat : 17/8+9%5-3*2 = 2+9%5-3*2 = 2+4-3*2 = 2+4-6 = 6-6 = 0 17/(8+9)%(5-3)*2 = 17/17%(5-3)*2 = 17/17%2*2 = 1%2*2 = 1*2 = 2 12/(2*8%4) = 12/(16%4) = 12/(0) fout: deling door nul 20*17/8%4 = 340/8%4 = 42%4 = 2 JAVA 61 Schrijf een programma dat 2 getallen met elkaar vermenigvuldigt. Laat de gebruiker hierbij de waarden ingeven. JAVA 62 // Oefening 1. // vermenigvuldiging van twee getallen // Java extension packages import javax.swing.JOptionPane; // importeert klasse JOptionPane public class Oefening { // main methode start de uitvoering van Java applicatie public static void main( String args[] ) { String firstNumber; // eerste string ingegeven door gebruiker String secondNumber; // tweede string ingegeven door gebruiker int number1; // eerste getal om te vermenigvuldigen int number2; // tweede getal om te vermenigvuldigen int verm; // vermenigvuldiging van number1 en number2 JAVA 63 // lees eerste getal van gebruiker in als een String firstNumber = JOptionPane.showInputDialog( "Geef eerste getal" ); // lees tweede getal van gebruiker in als een String secondNumber = JOptionPane.showInputDialog( "Geef tweede getal" ); // converteer getallen van type String naar het type int number1 = Integer.parseInt( firstNumber ); number2 = Integer.parseInt( secondNumber ); // Vermenigvuldig de getallen verm = number1 * number2; JAVA 64 // toon de resultaten JOptionPane.showMessageDialog( null, "De vermenigvuldiging is " + verm, "Resultaat", JOptionPane.PLAIN_MESSAGE ); System.exit( 0 ); // beëindigt de applicatie } // einde methode main } // eind klasse Oefening JAVA 65 Vraag 2 getallen in en geef het grootste terug op het scherm. JAVA 66 // Oefening 2. // het grootste getal bepalen // Java extension packages import javax.swing.JOptionPane; // importeert klasse JOptionPane public class Oefening { // main methode start de uitvoering van Java applicatie public static void main( String args[] ) { String firstNumber; // eerste string ingegeven door gebruiker String secondNumber; // tweede string ingegeven door gebruiker String result; // een string die de uitvoer bevat int number1; // eerste getal om te vergelijken int number2; // tweede getal om te vergelijken JAVA 67 // lees eerste getal van gebruiker in als een String firstNumber = JOptionPane.showInputDialog( "Geef eerste getal" ); // lees tweede getal van gebruiker in als een String secondNumber = JOptionPane.showInputDialog( "Geef tweede getal" ); // converteer getallen van type String naar het type int number1 = Integer.parseInt( firstNumber ); number2 = Integer.parseInt( secondNumber ); // initialiseer het resultaat als een lege String result = "grootste getal : "; JAVA 68 if ( number1 > number2 ) result = result + number1; if ( number1 < number2 ) result = result + number2; // Toon resultaat JOptionPane.showMessageDialog( null, result, "Resultaat", JOptionPane.INFORMATION_MESSAGE ); System.exit( 0 ); // beëindigt de applicatie } // einde methode main } // eind klasse Addition JAVA 69 Vraag het maandsalaris in en bereken het jaarsalaris (zonder vakantiegeld) en het vakantiegeld (=8% vh jaarsalaris) JAVA 70 // Oefening 3. // jaarsalaris en vakantiegeld // Java extension packages import javax.swing.JOptionPane; // importeert klasse JOptionPane public class Oefening { // main methode start de uitvoering van Java applicatie public static void main( String args[] ) { String firstNumber; // eerste string ingegeven door gebruiker String result; int maandsalaris; int jaarsalaris; int vakantiegeld; // een string die de uitvoer bevat // maandsalaris // jaarsalaris // vakantiegeld JAVA 71 // lees eerste getal van gebruiker in als een String firstNumber = JOptionPane.showInputDialog( "Geef maandsalaris" ); // converteer getal van type String naar het type int maandsalaris = Integer.parseInt( firstNumber ); jaarsalaris = maandsalaris * 12; result = "jaarsalaris = " + jaarsalaris; vakantiegeld = jaarsalaris * 8 / 100; result = result + "\nvakantiegeld = " + vakantiegeld; JAVA 72 // Toon resultaten JOptionPane.showMessageDialog(null, result, "Resultaat", JOptionPane.INFORMATION_MESSAGE ); System.exit( 0 ); // beëindigt de applicatie } // einde methode main } // eind klasse Addition JAVA 73