Program napisany w języku Java, w wyniku kompilacji da kod bajtowy, plik z rozszerzeniem .class. Nie jest to plik wykonywalny samodzielnie w systemie operacyjnym tak jak pliki .exe. Uruchomienie gotowego kodu bajtowego wymaga, aby w systemie była zainstalowana JVM – Java Virtual Machine, wirtualna maszyna Javy. Ten sam kod bajtowy można uruchamiać w różnych systemach operacyjnych: Windows, Linux, Solaris, pod warunkiem że jest na nich zainstalowana JVM. JVM można pobrać ze strony http://www.java.com/pl/download/ Do tworzenia kodu bajtowego potrzebny jest kompilator języka Java, nie wystarczy JVM. Najlepiej pobrać i zainstalować pakiet JDK – Java Development Kit, który zawiera także JVM, nie trzeba wówczas instalować jej osobno. JDK można pobrać ze strony http://www.oracle.com/technetwork/java/javase/downloads/jdk-7u2-download-1377129.html Po zakończeniu instalacji JDK, trzeba ręcznie dodać do zmiennych środowiskowych systemu ścieżkę dostępu do katalogu \bin Javy, np.: Start / Panel sterowania / System i zabezpieczenia / System / Zaawansowane ustawienia systemu / przycisk: Zmienne środowiskowe, okno: Zmienne systemowe wybierz Path, przycisk Edytuj na końcu ścieżki (bez żadej spacji!)dodaj średnik i dostęp do do katalogu \bin Javy, np.: C:\Program Files\Microsoft SQL Server\90\Tools\binn\; C:\Program Files\Java\jdk1.7.0_02\bin Można sprawdzić czy kompilator javac jest widziany z dowolnego katalogu, wywołując go w oknie konsoli: javac Kod źródłowy programu w języku Java pisze się w Notatniku i zapisuje w pliku tekstowym. Nazwa pliku musi być identyczna z nazwą klasy (wielkość liter też jest istotna!), z rozszerzeniem .java Nastepnie kod źródłowy kompiluje się w oknie konsoli poleceniem: javac nazwa_pliku.java Jeżeli w kodzie były błędy, należy je poprawić w Notatniku, ponownie zapisać plik i ponowić próbę kompilacji. W wyniku kompilacji powstanie plik kodu bajtowego, o nazwie identycznej jak nazwa klasy i rozszerzeniu .class Kod bajtowy można uruchomić na maszynie wirtualnej Javy, poleceniem w oknie konsoli: java nazwa_klasy Praca z oknem konsoli jest może uciążliwa, łatwiej uruchomić program „dwuklikiem” na ikonie. W tym celu można utworzyć plik wsadowy .bat, w którym zostaną zawarte powyższe polecenia. Najprostszy program który wyświetla jakiś napis, plik Pierwsza.java class Pierwsza { public static void main(String[] a) { System.out.println("Hello World"); } } Pierwsza.bat @echo off javac Pierwsza.java java Pierwsza pause Program źródłowy w języku Java jest więc definicją klasy. Klasa ta (w aplikacji konsolowej) musi zawierać statyczną metodę o nazwie main(). Program może pobierać parametry. Wartości parametrów podaje się w linii poleceń przy uruchomianiu kodu bajtowego. Umieszczane są one w tablicy, której nazwa jest parametrem metody main() Parametry są pobierane jako teksty, wartości typu String. Jeżeli potrzebna jest wartość liczbowa parametru, trzeba go przekonwertować metodą: • Integer.parseInt( String s) • Double.parseDouble(String s) Druga.bat @echo off Przykład: javac Druga.java class Druga { java Druga Jasiu 5 public static void main(String[] a) { java Druga Ania 7 System.out.println("Hello "+a[0]); System.out.println("Let's play!"); pause int n = Integer.parseInt(a[1]); for (int i=1; i<=n; i++) System.out.println("Game "+i); } } ----------------------------------------------------------------------------------- - ECLIPSE Środowisko programistyczne ECLIPSE = edytor i debuger zintegrowany z kompilatorem Javy (uprzednio zainstalowanym w komputerze). Ogromnie ułatwia pracę programisty. Pakiet .zip Eclipse IDE for Java Developers można pobrać ze strony http://www.eclipse.org/downloads/ Należy go tylko rozpakować i uruchomić plik eclipse.exe, nie trzeba nic instalować. Po uruchomieniu program zapyta o Workspace, czyli o folder w którym będzie przechowywać projekty. Programowanie w środowisku Eclipse należy zacząć od utworzenia nowego projektu: File /New / Java project, w polu Name wpisać nazwę projektu i zakończyć przyciskiem Finish. W istniejącym projekcie należy utworzyć nową klasę: File / New / Class lub kliknąć ikonę W polu Source folder powinna zjawić się nazwa projektu, W polu Name trzeba wpisać nazwę klasy i zaznaczyć opcję utworzenia metody main() W pozostałe pola można pozostawić domyślną zawartość. Przyciskiem Finish kończy się tworzenie nowej klasy. W folderze projektu zostaną utworzone dwa podfoldery src – dla plików źródłowych .java bin – dla plików skompilowanych .class Okno programu Eclipse, uruchomienie programu: Eclipse sygnalizuje błędy w kodzie źródłowym. Gdy umieścisz kursor nad błędnym zapisem, wyświetli propozycje naprawy kodu. Wystarczy wybrać myszą właściwą podpowiedź, a Eclipse naprawi błąd. Przykładowe programy – podaję tylko kod metody main(), należy ją umiecić w jakiejś klasie, a niezbędne pakiety zaimportować, korzystając z podpowiedzi Eclipse’a 1 - Obliczanie pola i obwod koła o promieniu podanym z klawiatury. public static void main(String[] args) { System.out.println("Oblicze ci pole i obwod kola"); System.out.print("Podaj promien "); double r; Scanner s = new Scanner(System.in); // klasa Scanner do czytania danych, tu: z konsoli r = s.nextDouble(); //podaj daną z przecinkiem dziesiętnym, jak ustawienia regionalne systemu double pole = Math.PI*r*r; double obwod = Math.PI*2*r; DecimalFormat f = new DecimalFormat("0.00"); // sformatowanie dokładności 2 miejsc po przecinku System.out.println("Pole = "+f.format(pole)+" a obwod = "+f.format(obwod)); } 2 - Obliczanie zapotrzebowania na paliwo i ilości niezbędnych tankowań na trasie o podanej długości. public static void main(String[] args) { System.out.print("Podaj długość trasy podróży w km "); Scanner s = new Scanner(System.in); int km = s.nextInt(); System.out. print("Ile litrów spalasz na 100 km ? "); double nasto = s.nextDouble(); double paliwo = nasto/100*km; DecimalFormat f = new DecimalFormat("0.00"); // formatowanie z dokładnoscią 2 miejsc dziesiętnych System.out.println("Na całej trasie spalisz "+f.format(paliwo)+" litrów"); System.out.println("Podaj pojemność baku w litrach "); int bak = s.nextInt(); int t = (int) Math.ceil(paliwo/bak); System.out.println("Musisz tankować "+t+" razy"); } 3 – teścik: treści pytań, do każdego pytania 3 odpowiedzi: A B C, oraz poprawna odpowiedź, z pliku txt public static void main(String[] args) { int suma=0; // liczba poprawnych odpowiedzi try { Scanner plik = new Scanner(new File("tescik.txt")); // jeden skaner czyta z pliku Scanner gracz = new Scanner(System.in); // drugi skaner do pobrania odpowiedzi z konsoli while(plik.hasNext()) { // dopóki w pliku jest jeszcze jakieś pytanie… for (int i = 0; i < 4; i++) System.out.println ( plik.nextLine() ); // czytaj I wyświetl String poprawna = plik.nextLine(); // przeczytaj z pliku poprawną odpowiedź System.out.println ("która odpowiedź jest poprawna? "); String odp = gracz.next(); // pobierz odpowiedź z konsoli odp= odp.toUpperCase(); // odpowiedź z konsoli przerób na duże litery if (odp.length()>1) odp=odp.substring(0, 1); // i skróć do jednego znaku if (odp.equals(poprawna)) { suma++; System.out.println ("OK !\n"); } else System.out.println ("niestety nie :(\n"); // porównaj odpowiedzi } System.out.println ("\nKoniec testu, "+suma+" poprawnych odpowiedzi"); } catch (FileNotFoundException e) { System.out.println ("brak pytań"); } } Klasa Scanner jest zdefiniowana w pakiecie java.util.Scanner. Trzeba ten pakiet zaimportować do swojego pakietu (na początku programu, przed definicją klasy aplikacji) poleceniem: Import java.util.Scanner; Wewnątrz klasy aplikacji trzeba zadeklarować nową zmienną typu Scanner i przyłączyć ją do wybranego wejścia: konsoli, pliku lub zmiennej typu String. Nowa zmienna będzie obiektem, trzeba ją tworzyć używając operatora new. Na przykład do czytania z konsoli (z klawiatury): Scanner s = new Scanner(System.in); Klasa Scanner ma wbudowane wiele metod przydatnych w różnych sytuacjach: • • • • • • • • next() - pobiera tekst nextLine() - pobiera wiersz danych i przechodzi na początek następnego wiersza nextInt() - pobiera liczbę całkowitą nextFloat() i nextDouble() - pobiera liczbę rzeczywistą nextBoolean() - pobiera wartość logiczną hasNext() - zwraca true gdy skaner ma jeszcze jakieś dane na wejściu. Mozna badać szczegółowo jaka dana znajduje się na wejściu: hasNextInt(), hasNextDouble(), hasNextLine(), hasNext("konkretny łańcuch znaków") useDelimiter("łańcuch znaków") domyślnie skaner używa białych znaków (spacja) jako separatorów, ale można to zmienić useRadix(n) - ustawia na n podstawę systemu liczbowego czytanych danych liczbowych (może być 10,2,16...) Dostęp do metod uzyskasz przy pomocy notacji kropki: nazwa_zmiennej_obiektowej.nazwa_metody, na przykład: s.nextInt() Gdy typ danej na wejściu nie jest zgodny z typem oczekiwanym, skaner wyrzuca wyjątek InputMismatchException. Zawartość pliku tekstowego tescik.txt do czytania przez nasz program: Jak nazywa się twórca języka Java? A - James Gosling B - Linus Thorvalds C - Niklas Wirth A Historia Javy zaczyna się w roku...? A - 1990 B - 1993 C - 1996 C Java jest językiem programowania: A - proceduralnym B - obiektowym C - proceduralno-obiektowym B Program napisany w Javie jest kompilowany do: A - samodzielnego pliku wykonywalnego pod systemem operacyjnym B - kodu bajtowego przeznaczonego do uruchomienia na wirtualnej maszynie Javy C - skryptu dla strony internetowej B