W oknie poleceń -------------------------------------------------------------------------------Utwórz nowy folder Mojajava i wejdź do niego utwórz nowy dokument tekstowy, nazwij go Newbie.java, otwórz go w Notatniku i wpisz kod: class Newbie { public static void main(String args[]) { System.out.println("male miki"); } } Uruchom okno poleceń, przejdż do folderu Mojajava i wypróbuj polecenia systemowe dir javac Newbie.java dir java Newbie // powinien być widoczny plik żródłowy Newbie.java // kompilacja do kodu bajtowego // przybył plik skompilowany Newbie.class // wykonanie programu na maszynie wirtualnej Javy Utwórz nowy dokument tekstowy Newbie.bat i wpisz polecenia, a następnie uruchom dwuklikiem : java Newbie pause W środowisku ECLIPSE --------------------------------------------------------------------------Uruchom eclipse.exe i podaj jako Workspace swój folder Mojajava Zamknij okno Welcome (zawsze możesz do niego wrócić: w menu Help / Welcome ) Ekran zawiera wiele okienek: pojedyncze okienko – to View układ okienek na ekranie – to Perspective. Domyślnie wybrana jest Java Perspective, ale jeśli jest inaczej to wybierz z menu: Window / Open Perspective/Other/Java Perspective (default) Utwórz nowy projekt: File/New/Java project. Projekt będzie zawierać kod żródłowy i inne pliki potrzebne do zbudowania programu Podaj nazwę projektu Nowy1 i zatwierdż przyciskiem Finish W oknie Package Explorer przybył projekt Nowy1. Odpowiada mu w Workspace folder Nowy1 z przygotowanymi pod-folderami dla plików żródłowych i skompilowanych. W projekcie Nowy1 utwórz nową klasę : File/New/Java Class wpisz nazwę klasy ( Name): Malemiki zaakceptuj ustawienia: folder Nowy1/src dla plików żródłowych modyfikator dostępu: Public klasa bazowa (Superclass): java.lang.Object każ utworzyć automatycznie metodę main zatwierdż przyciskiem Finish W oknie edytora pojawi się kod klasy Malemiki. Do ciała metody main() wprowadź kod i zapisz: System.out.println(”Małe miki czuwa”); W podfolderze src pojawił się plik Malemiki.java, nazwa pliku jest identyczna z nazwą klasy publicznej. W pliku może być tylko jedna klasa publiczna i musi ona mieć nazwę identyczną z nazwą pliku. W podfolderze bin pojawił się plik Malemiki.class. Eclipse automatycznie kompiluje kod przy zapisie ! Uruchom program z menu Run/Run lub ikoną Wynik działania programu pojawi się w oknie Console u dołu ekranu. Sprawdż czy program da się uruchomić bez środowiska Eclipse. W systemowym oknie poleceń przejdź do podfolderu bin zawierającego plik skompilowany Malemiki.class i wywołaj polecenie java Malemiki Najważniejsze nowości w Javie w porównaniu z C++ --------------------------------------- Java jest hardcorowo obiektowa, WSZYSTKO (zmienne, funkcje) jest składnikiem jakiejś klasy program jest definicją klasy, zawiera statyczną metodę main, którą można uruchomić bez tworzenia obiektu – instancji klasy. kompilator nie tworzy pliku wykonywalnego, lecz kod bajtowy, gotowy do ostatecznej kompilacji (z dopasowaniem do sprzętu i systemu operacyjnego) i następnie uruchomienia na maszynie wirtualnej Javy. Cała definicja klasy znajduje się w jednym pliku, nie ma podziału na pliki nagłówkowe *.h i resztę kodu *.cpp. Nie ma wskaźników. Obiekty i tablice tworzy się operatorem new. Usuwane są automatyczne, nie trzeba delete. Klasa może dziedziczyć tylko po jednej klasie bazowej. Operatorów nie można przeciążać. Pliki z definicjami klas są zorganizowane w hierarchiczne pakiety, podobnie do folderów. Pełna nazwa klasy zawiera nazwę pakietu(kolejne poziomy hierarchii oddzielone kropką), nastepnie kropkę i na końcu nazwę własną klasy np. java.moje.szkola.Malemiki Programista musi zatroszczyć się o obsługę wyjątków. W Javie zdefiniowano i udostępniono bogatą bibliotekę klas do realizacji konkretnych zadań, w szczególności wsparcie dla aplikacji sieciowych i programowania współbieżnego. W podstawowej wersji Eclipse (na razie) nie ma narzędzi do programowania wizualnego (nie ma toolboxa z komponentami), także obsługą zdarzeń programista musi zająć się samodzielnie. Przykład importu i zastosowania klasy - dostęp do dat -------------------------------------import java.util.GregorianCalendar; public class Malemiki { public static void main(String[] args) { System.out.println("Małe miki czuwa !"); GregorianCalendar dz = new GregorianCalendar(); System.out.println("Dziś jest "+dz.getTime()); GregorianCalendar matura = new GregorianCalendar(2010,04,04,9,0,0); System.out.println("Matura jest "+matura.getTime()); long msDzis=dz.getTimeInMillis(); long msMat=matura.getTimeInMillis(); long m=(msMat-msDzis)/1000/60; long g=m/60; long d=g/24; System.out.println("Do matury pozostało:"); System.out.println(d+" dni"); System.out.println("lub "+g+" godzin"); System.out.println("lub "+m+" minut"); // lub tak import java.util.Date; Date dzis=new Date(); System.out.println("Dziś jest "+dzis); long milisekundy=dzis.getTime(); // miesiace są 0-based !!! } } // liczby losowe w Javie: import java.util.Random; A gdyby to zrobić w C++ Random r = new Random(); int n= r.nextInt(20); #include <iostream> #include <time.h> using namespace std; int main(int argc, char *argv[]) { time_t dzisS=time(NULL); //aktualny data-czas jako liczba sekund od 1 stycz.1970 tm *w=localtime(&dzisS); tm dzis=*w; cout<<"dzis jest "; cout<<dzis.tm_year+1900<<"/"<<dzis.tm_mon+1<<"/"<<dzis.tm_mday<<endl; tm matura= {0,0,9,4,4,110}; // sec,min,hour,mday,mon_based_0,year-1900 time_t maturaS=mktime(&matura); cout<<"matura jest "; cout<<matura.tm_year+1900<<"/"<<matura.tm_mon+1<<"/"<<matura.tm_mday<<endl; cout<<"Do matury zostalo "<<endl; int m=(maturaS-dzisS)/60; int g=m/60; int d=g/24; cout<<m<<" minut\n"; cout<<"lub "<<g<<" godzin\n"; cout<<"lub "<<d<<" dni\n"; system("PAUSE"); return EXIT_SUCCESS; } Operacje wejścia/wyjscia ----------------------------------------------------------------------------import import import import import java.util.Scanner; java.util.InputMismatchException; java.io. PrintWriter; // ten kolor dotyczy zapisu danych do pliku txt java.io. FileWriter; muszę obsłużyć wyjątki konstrukcją try-catch java.io.IOException; lub w nagłówku metody napisać, że może ona wyrzucić wyjatek: public class Spalanie { public static void main(String[] args) throws InputMismatchException, IOException { System.out.println("Obliczę ci ile spalisz paliwa"); Scanner s = new Scanner(System.in); try { PrintWriter wyjscie = new PrintWriter(new FileWriter("spalanie.txt")); // obie klasy: PrintWriter i FileWriter są w pakiecie java.io.* // plik powstanie w głównym folderze projektu (nie w /bin przy .class!) System.out.println("Podaj długość trasy w km "); int trasa = s.nextInt(); System.out.println("Ile spalasz na 100 km ? "); double nasto = s.nextDouble(); // dane liczby rzeczywiste podawaj Z PRZECINKIEM double p = nasto/100*trasa; System.out.println("Na całej trasie spalisz "+p+" litrów"); wyjscie.println("Na całej trasie spalisz "+p+" litrów"); System.out.println("Podaj pojemność baku w litrach "); int bak = s.nextInt(); int tank=(int) Math.ceil(p/bak); // będzie błąd niezgodności typów, // trzeba rzutować double na int System.out.println("Musisz tankować "+tank+" razy"); wyjscie.println("Musisz tankować "+tank+" razy"); wyjscie.close(); // musisz zamknąć plik aby odczytać jego zawartość } catch (InputMismatchException em) {System.out.println("błedny format danych"); catch (IOException e) {System.out.println("kłopot z utworzeniem pliku"); } } } } Aby Scanner czytał z pliku dane.txt potrzeba: Scanner s = new Scanner(new File("dane.txt")); while (s.hasNext()) { String A=s.next(); String B=s.nextLine(); } Scanner może czytać ze zmiennej typu String (na przykład aby podzielić tekst na słowa) String t = “jakis tekst”; Scanner s = new Scanner(t).useDelimiter("\\s"); Bez Scannera można czytać ze strumienia buforującego dane BufferedReader, umożliwiając czytanie danych porcjami. Przekształcanie bajtowego strumienia w strumień znaków to InputStreamReader. BufferedReader we = new BufferedReader(new InputStreamReader( System.in)); //klawiatura BufferedReader we1 = new BufferedReader(new FileReader("auta.txt")); // plik while (we.ready()) { char c = we.read(); String b=we.readLine(); int i=Integer.parseInt(s);} Debugging --------------------------------------------------------------------------------------------Wybierz perspektywę Debug W oknie edytora kodu ustaw punkt przerwania (2-klik na lewej krawędzi okna na wysokości wybranej linii) Sprawdź fakt ustawienia BreakPoint-a w okienku BreakPoints Uruchom prorgam w trybie Debug i doprowadź działanie do punktu przerwania. Sprawdź wartości zmiennych w okienku Variables Kontynuuj pracę programu krokowo – Step Into (F5) i śledź wartości zmiennych