JAVA - plan wykładu Zakres wykładu • • • • • Podstawy języka JAVA w wersji 2 JAVA 2 w praktyce Aplety Servlety Java Server Pages LITERATURA Thinking in Java, Bruce Eckel Helion 2001 Java 2 dla każdego, Laura Lemay i Rogers CadenHead, Helion 2000 Java Servlet - programowanie...., Hunter Jason, Crawford William, Helion 2002 Java Servlet i Java Server Pages.., Hall Marty, Helion 2002 Podstawy języka 1 JAVA – jak to się stało (nie tak dawno w SUN Microsystem) 1990- James Gosling opracowuje język (Oak - dąb) w ramach projektu Green do programowania małych urządzeń elektronicznych które miały się komunikować między sobą, stąd założenia: mały ,stabilny(bezpieczny) i przenośny 1994 – zmiana nazwy Oak na JAVA 1994 – przeglądarka sieciowa HotJava pozwalająca na uruchomienie apletów JAVA, 1995 – interpreter JAVA (Java 1.0) dołączony do Netscape Navigator 1997 – Java1.1 z technologią składników JavaBeans, 1998 – Java 2 Bezpłatny pakiet Java Development Kit dostępny na stronach http://java.sun.com inne pakiety programistyczne: Symantec Visual Cafe, Borland Jbuilder, IBM Visual Age for Java... Podstawy języka 2 JAVA – Java kontra C++ • ograniczenia ułatwiające zrozumienie kodu np. nie można przysłaniać zmiennych, • usunięto wskaźniki, uproszczono zarządzanie pamięcią (brak destruktorów, automatyczne odśmiecanie), • usunięto niektóre konstrukcje np. typedef, preprocesor i jego instrukcje, goto, struct, niektóre zmodyfikowano, • usunięto możliwość przeciążania operatorów, • brak możliwości wielokrotnego dziedziczenia wprost, wprowadzenie implementacji interfejsów, • brak funkcji i zmiennych poza definicjami klas, • wynikiem kompilacji jest kod pośredni (bajtowy) a nie maszynowy jak w C++ co oznacza niezależność od platformy sprzętowej, • java generuje bezpieczny i objętościowo mały kod wynikowy co jest zaletą w sieci, • java posiada narzędzia do pracy w sieci (najpopularniejszy i najczęściej wykorzystywany język programowania). wady ? spokojnie, też się znajdą.... Podstawy języka 3 JAVA – konfiguracja środowiska JAVA 2 Software Development Kit dla Windows 95/98 w autoexec.bat : PATH folder\bin;%PATH% PATH C:\JDK\bin; %PATH% jeżeli istnieje SET CLASSPATH= dopisz SET CLASSPATH=.;folder\lib\tools.jar;%CLASSPATH% JAVA 2 Software Development Kit dla Windows NT/2000 Wybierz Panel Sterowania System Środowisko zmienna PATH Podstawy języka 4 JAVA – środowisko JAVA 2 SDK 1.4 Katalog \ bin\ między innymi: •javac – kompilator •java – interpretator z konsolą •javaw – interpretator bez konsoli, •javadoc – generator dokumentacji •appletviewer – interpretator apletów, •jar – zarządzanie plikami archiwów, •jdb - debager Podstawy języka 5 JAVA – pierwszy program pliki *.JAVA kompilacja pliki *.CLASS (kod bajtowy Javy) // Prog1.java // public class Prog1 { interpretacja przez JVM(Java Virtual Machine) procesor public static void main ( String arg [] ) { System.out.println(" Java is fun "); } } // class Prog1 • plik o nazwie Prog1.java zawiera klasę o nazwie Prog1, wielkości liter są rozróżniane • klasa od której następuje uruchomienie zawiera statyczną i publiczną funkcję main której parametry są parametrami wywołania programu Kompilacja javac Prog1.java kompilator generuje plik Prog1.class Uruchomienie java Prog1 a tak było w C++ pliki *.CPP kompilacja pliki *.EXE (wynikowy kod binarny, maszynowy)procesor Podstawy języka 6 JAVA – typy podstawowe typy do reprezentacji liczb całkowitych byte short int long rozmiar 1 bajt , rozmiar 2 bajty, rozmiar 4 bajty, rozmiar 8 bajtów, min –128 max 127 min –215 max 215-1 min –231 max 231-1 min –263 max 263-1 typ kopertowy (obiektowy) Byte; Short Integer Long typy do reprezentacji liczb rzeczywistych float double rozmiar 4 bajty, rozmiar 8 bajtów, min 1.4E-45 max 3.4E38 min 4.9E-324 max 1.7E308 Float Double rozmiar 2 bajty, min Unicode 0 max Unicode 216-1 Char - - Boolean typ znakowy char typ logiczny boolean - Podstawy języka 7 JAVA – typy podstawowe (wartości domyślne) Zmienne obiektowe typów podstawowych są automatycznie inicjalizowane wartościami domyślnymi class Variables { boolean bo; // zmienne obiektowe o dostępie przyjaznym double du; } public class Prog2 { public static void main(String arg []) { Variables v = new Variables(); //obiekt klasy Variables System.out.println(" boolean = " + v.bo); System.out.println(" double = " + v.du); char ch; // zmienne lokalne byte bt; //System.out.println(" lokalne char = " + ch); // błąd kompilacji } } // Prog2 wartości domyślne: boolean : false char : ’\u0000’ byte : (byte) 0 short : (short) 0 int :0 long : 0l float : 0.0f double : 0.0d Uwaga – w wyniku kompilacji powstają dwa pliki: Variables.class i Prog2.class Podstawy języka 8 JAVA – zasięg zmiennych, stałe, literały, znaki specjalne public class Prog3 { public static void main(String arg []) { final int r = 5; // stała typu int long x = 200l + 10L; // L,l - wymusza long // float t = 3.14; błąd bo literały typu rzeczywistego // są domyślnie typu double float f = 3.14f; // F,f - wymusza float float d = (float)2.71d; // D,d - wymusza double { int y; /* zmienne x,f,d i y sa dostępne */ String s = new String ("Java\u2122"); System.out.print( s + '\n‘ ); //int x; przesłanianie niedozwolone } /* zmienna y jest niedostępna referencja s jest niedostępna */ System.out.print("\" koniec w cudzysłowie \""); } } // Prog3 Podstawy języka wybrane znaki specjalne \n nowy wiersz \t tabulator \b backspace \r powrót karetki \f wysunięcie strony \\ backslash \’ apostrof \” cudzysłów \liczba liczba w notacji ósemkowej \xliczba liczba w notacji szesnastkowej \uliczba znak w standardzie Unicode 9 JAVA – typy kopertowe public class Prog4 { public static void main(String arg []) { int x = 5, i = 10; float f = 3.14f; boolean b = false; Integer t1 = new Integer(i); //obiekt typu Integer Integer t2 = new Integer(5); Float f1 = new Float(f); Boolean b1 = new Boolean(true); x = t1.intValue(); i = t2.intValue(); /* pobranie wartości typu int z obiektu Integer */ f = f1.floatValue() + 3.1f; b = b1.booleanValue(); System.out.println(" t1 = " + t1.intValue()); System.out.println(" t2 = " + t2.intValue()); System.out.println(" f1 = " + f1.floatValue()); System.out.println(" b1 = " + b); if (arg.length > 1) { // tylko jeżeli istnieją argumenty wywołania programu x = Integer.parseInt(arg[0]); /* metoda klasy Integer zamienia obiekt klasy String na wartość typu int */ f = Float.parseFloat(arg[1]); System.out.println(x + ” ”+ f); } }}//Prog4 Podstawy języka 10 JAVA - operatory priorytety operatorów public class Prog5 { public static void main(String arg []) { Box b1 = new Box(); // konstruktor domyślny ma nawiasy ! Box b2 = new Box(); b1.i = 5; b2.i = 5; System.out.println(b1.i== b2.i ); // -> true System.out.println(b1 == b2 ); // -> false (porównuje referencje) System.out.println(b1.equals(b2)); // -> false (porównuje referencje) Integer i1 = new Integer(5); Integer i2 = new Integer(5); System.out.println(i1 == i2 ); // -> false (porównuje referencje) System.out.println(i1.equals(i2)); // -> true (tu działa dobrze) } } // Prog5 class Box { // kolejność klas jest bez znaczenia int i; // konstruktor domyślny jest generowany automatycznie } Podstawy języka . [] () ++ -- ! * / % + - << >> >>> (przes.bitów) < > <= >= == != & bitowe AND ^ bitowe XOR | bitowe OR && logiczne AND || logiczne OR ?: wyrażenie warunkowe instanceof new = += -= *= /= %= ^= &= |= <<= >>= >>>= 11 JAVA – operatory, rzutowanie public class Prog7 { Dla argumentów typu logicznego operatory bitowe działają tak samo jak logiczne ale nie ulegają skracaniu public static void main(String arg []) { int a, x =2, y = 5; a = x>y ? x:y; System.out.println("a = " + a); public class Prog6 { public static void main(String arg []) { int a =0, x =2, y = 5, z = 4; } } // Prog7 public class Prog8 { public static void main(String arg []) { double d1 = 3.4, d2; int x = 1; char c = 'k' ; if( (x>y) && (++z < 5) ) a++; System.out.println("z = " + z); //-> 4 // konwersja rozszerzająca d2 = x; // można niejawnie i jawnie d2 = (double)x; System.out.println(" d2 from int = " + d2); d2 = c; System.out.println(" d2 from char = " + d2); if( (x>y) & (++z < 5) ) a++; System.out.println("z = " + z); //-> 5 } } // Prog6 Uwaga: nie można rzutować na typ logiczny jak i zmiennych tego typu // konwersje z obcięciem – można tylko jawnie x = (int)d1; System.out.println(" x = " + x); c = (char)d1; System.out.println(" c = " + c); } } // Prog8 Podstawy języka 12 JAVA – instrukcje pętli, instrukcja if i switch import java.util.*; public class Prog9 { public static void main(String arg []) { int n = 5; for(int i = 0; i < n; i++) System.out.println(i); int i = 0; // wcześniej i było lokalne while(i < n) System.out.println(i++); // import bibliotek public class Prog10 { public static void main(String arg []) { Random r = new Random(); int n, i = r.nextInt() % 21; // wymuszenie liczby < 21 if (i < 0) n = 0; else if (i < 5) n = 1; else if (i < 10) n = 2; else if (i < 15) n = 3; i = 0; do { System.out.print(i++); System.out.println();} while (i < n); } } // Prog9 else n = 4; switch (n) { case 1: System.out.println(" i < 5 "); break; case 2: System.out.println(" i < 10 "); break; case 3: System.out.println(" i < 15 "); break; case 4: System.out.println(" i < 21 "); default: if (i == 20) System.out.println( "i==20"); else if (i < 0 ) System.out.println( "i < 0"); }} } //Prog10 Podstawy języka 13 JAVA – podstawowe biblioteki java.lang – podstawowa, domyslnie importowana dla każdej klasy java.applet – zawiera klasy potzrzebne do tworzenia apletów java.awt (Abstract Window Toolkit) – zestaw niezależnych od platformy systemowej klas do projektowania aplikacji w środowisku graficznym java.io – klasy implementujące operacje wejścia i wyjściia java.net – klasy służace do operacji wejścia i wyjścia w sieci Internet na niskim poziomie, java.util – zbiór przydatnych klas np. klasa Date import java.util.*; // import zbioru klas ale tylko tych z których korzysta nasza aplikacja import java.util.Date; // import konkretnej klasy Podstawy języka 14 JAVA – instrukcje break i continue import java.util.*; public class Prog11 { public static void main(String arg []) { Random r = new Random(); int n = Math.abs(r.nextInt() % 6); switch (n) { // inaczej niż w C++ case 0: System.out.println( " ? "); break; // case 1,2 : System.out.println(" słabo "); break; // case 3,4 : System.out.println(" dobrze "); break; case 1: case 2: System.out.println(" słabo "); break; case 3: case 4: public class Prog12 { public static void main(String arg []) { int i = 0, n = 6; while (i < n) { i++; if ( i == 3) continue; // dla i == 3 pominie System.out.println(i); } // tą linie System.out.println(" i po while = " + i); // -> 6 i = 0; do { i++; if ( i == 3) break; System.out.println(i); } while (i < n); System.out.println(" dobrze "); break; default: System.out.println(" b.dobrze "); break; } System.out.println(" i po do..while = " + i); //-> 3 } } // Prog12 } } // Prog11 Podstawy języka 15 JAVA – etykiety? public class Prog14 { public class Prog13 { public static void main(String arg []) { boolean b = false; int x =0 ,n = 4; public static void main(String arg []) { int n = 3; out: for(int i =1 ; i< n; i++) { out: // etykieta bezpośrednio przed instrukcja for(int i =1 ; i< n; i++) { for( int j =0; j < n; j++) { x = i*j; if (j == 2) { b = true; break out; } // wyskok poza i } } //i System.out.println("x = " + x); // x-> 2 for( int j =0; j < n; j++) { if (j == 1) continue out; System.out.println("i:j ="+i+":"+j); } } //i } } // Prog14 /* -> 1 : 0 } } // Prog13 -> 2 : 0 */ Podstawy języka 16 JAVA – tablice zmiennych typów podstawowych import java.util.*; public class Prog15 { public static void main(String arg []) { // można napisać String [] arg int [] a = new int [10]; // a jest referencją do tablicy analogicznie można napisać int a [] = new int [10]; for (int i = 0; i < a.length; i++) a[i] = i; for (int i = 0; i < a.length; i++) System.out.println(" a["+i+"] = " + a[i]); // -> 0,1,2,3,4,5,6,7,8,9 int [] b = {3,5,7}; // inny sposób inicjalizacji for (int i = 0; i < b.length; i++) System.out.println(" b["+i+"] = " + b[i]); //-> 3,5,7 b = a; // b jest ustawiona na to samo co a for (int i = 0; i < b.length; i++) System.out.println(" b["+i+"] = " + b[i]); //-> 0,1,2,3,4,5,6,7,8,9 Random r = new Random(); double [] c = new double [Math.abs(r.nextInt()) % 100]; System.out.println(" length of c = " + c.length); } } // Prog15 Podstawy języka 17 JAVA – tablice wielowymiarowe import java.util.*; public class Prog17 { public class Prog16 { public static void main(String arg []) { int [][] a = new int [2][3]; // a jest referencją do tablicy public static void main(String arg []) { int [][] a = new int [2][3]; for (int i = 0; i < a.length; i++) { for (int i = 0; i < a.length; i++) for (int j = 0; j < a[i].length; j++) a[i][j] = i*j; for (int j = 0; j < a[i].length; j++) System.out.print(" a["+i+"]["+j+"] for (int i = 0; i < a.length; i++) { for (int j = 0; j < a[i].length; j++) System.out.print(" a["+i+"]["+j+"] = " + a[i][j]); // -> {0,0,0} System.out.println(); } // -> {0,1,2} = " + a[i][j]); System.out.println(); } // elementy tablic są // wypełniane wart. domyślnymi int [][] b = { {3,5,7},{2,4,1} }; // inny sposób inicjalizacji for (int i = 0; i < b.length; i++) { for (int j = 0; j < b[i].length; j++) System.out.print(" b["+i+"]["+j+"] = " + b[i][j]); // -> {3,5,7} System.out.println(); } // -> {2,4,1} b = a; }} // Prog16 // -> {0,0,0} } // -> {0,0,0} } // Prog17 // b jest ustawiona na to samo co a Podstawy języka 18 JAVA – tablice wielowymiarowe import java.util.*; public class Prog18 { public static void main(String arg []) { int [][][] a = new int [2][3][4]; //int a [][][] = new int [2][3][4]; tak też można Random r = new Random(); int [][][] b = new int [2][][]; for (int i =0 ; i < b.length; i++) b[i] = new int [3][]; for (int i =0 ; i < b.length; i++) for (int j =0 ; j < b[i].length; j++) b[i][j] = new int [2]; double [][] c = new double [Math.abs(r.nextInt()) % 100][Math.abs(r.nextInt()) % 100]; // długości c[i] są takie same double [][] d = new double [Math.abs(r.nextInt()) % 100][]; for (int i = 0; i < d.length; i++) d[i] = new double[Math.abs(r.nextInt()) % 100]; // długości d[i] są losowe } } // Prog18 Podstawy języka 19 JAVA – tablice obiektów import java.util.*; public class Prog19 { public static void main(String arg []) { Byte [] a = new Byte [5]; // a jest referencją do tablicy obiektów typu Byte for (int i = 0; i < a.length; i++) a[i] = new Byte((byte)i); for (int i = 0; i < a.length; i++) System.out.println(" a["+i+"] = " + a[i]); Byte [] b = {new Byte((byte)3),new Byte((byte)5),new Byte((byte)7)}; for (int i = 0; i < b.length; i++) System.out.println(" b["+i+"] = " + b[i]); // -> 0,1,2,3,4 // inny sposób inicjalizacji //-> 3,5,7 Byte [] d = new Byte [] {new Byte((byte)3), new Byte((byte)5), new Byte((byte)7)}; // inny sposób inicjalizacji for (int i = 0; i < d.length; i++) System.out.println(" d["+i+"] = " + d[i]); //-> 3,5,7 b = a; // b jest ustawiona na to samo co a for (int i = 0; i < b.length; i++) System.out.println(" b["+i+"] = " + b[i]); //-> 0,1,2,3,4 Random r = new Random(); Double [] c = new Double [Math.abs(r.nextInt()) % 100]; System.out.println(" length of c = " + c.length); } } // Prog19 Podstawy języka 20 JAVA - tablice obiektów import java.util.*; public class Prog20 { public static void main(String arg []) { Integer [][] a = new Integer [5][3]; // a jest referencją do tablicy dwuwymiarowej obiektów typu Integer for (int i = 0; i < a.length; i++) for (int j = 0; j < a[i].length; j++) a[i][j] = new Integer(i*j); // inny sposób inicjalizacji Integer [][] b = { {new Integer(0), new Integer(1)}, {new Integer(3), new Integer(4)}, {new Integer(6), new Integer(7)} }; // inny sposób inicjalizacji Integer [][] c = new Integer[][] { {new Integer(0), new Integer(1)}, {new Integer(3), new Integer(4)}, {new Integer(6), new Integer(7)} }; } } // Prog20 Podstawy języka 21 JAVA - tablica jako zwracany rezultat metod public class ArrayTest { public static void main(String arg []) public static int [] returnArray1(int n) { { int [] a = new int [n]; int n=5; for(int i = 0; i < n; i++) int [] b = ArrayTest.returnArray1(n); a[i] = i; for(int i = 0; i <n ; i++) return a; } public static Integer [] returnArray2(int n) { System.out.print(b[i]); // -> 0,1,2,3,4 Integer [] a = new Integer [n]; Integer [] c = ArrayTest.returnArray2(n); for(int i = 0; i < n; i++) for(int i = 0; i <n ; i++) a[i] = new Integer(i); System.out.print(c[i]); return a; } // -> 0,1,2,3,4 public short [] returnArray3(int n) { ArrayTest test = new ArrayTest(); short [] a = new short [n]; short [] d = test.returnArray3(n); for(int i = 0; i < n; i++) for(int i = 0; i <n ; i++) a[i] = (short)i; System.out.print(c[i]); return a; } // -> 0,1,2,3,4 } } // ArrayTest Podstawy języka 22 JAVA – klasy, pola i metody import java.util.*; class Box { int n =100; // możemy nadawać wartości static int i; // zmienna statyczna, będzie = 0 Box() {i++;} // przeciążenie, konstruktory Box(int n ) { this.n = n; i++; } } class BoxArray{ int ile = 0; Box [] array; BoxArray(int n) {array = new Box [n];} void putBox(Box x) {array [ile] = x; ile++; } void showBox(int i) {System.out.println(" n w Box nr. " + i + " = " + array[i].n); } } Uwaga! Brak identyfikatora dostępu określa dostęp jako przyjazny (w ramach pakietu) Podstawy języka public class Prog21 { public static void main(String arg []) { System.out.println("Ilosc obiektow Box = " + Box.i); //dostęp do pola static //BoxArray a = new BoxArray(); // błąd BoxArray a = new BoxArray(5); Box x = new Box(); //!!! konstr. domyślny a.putBox(x); for (int i = 1; i < 4; i++) a.putBox(new Box(i)); a.showBox(0); a.showBox(3); int y = a.array[0].i; } } // Prog21 // dostęp do pola static 23 JAVA –pola i metody- dostęp class Alfa{ Uwaga! Dostęp do metod i pól należy definiować przed każdym składnikiem private int r; private Alfa(int r) {this.r = r;} // konstruktor prywatny // metoda makeAlfa musi być statyczna public static Alfa makeAlfa(int x) { return new Alfa(x);} public void changeAlfa(int x){r = x;} public int showAlfa() {return r;} // return zwrot } public class Prog22 { public static void main(String arg []) { // Alfa a = new Alfa(1); Alfa a = Alfa.makeAlfa(1); // a.r = 5; System.out.println(a.showAlfa()); a.changeAlfa(2); System.out.println(a.showAlfa()); } } // Prog22 // konstruktor prywatny, brak dostępu // wywołanie metody statycznej zmienna prywatna brak dostępu Podstawy języka 24 JAVA – klasy, pola i metody - w jednym pliku tylko jedna klasa może być publiczna - tylko klasa wewnętrzna może mieć dostęp chroniony lub prywatny wewnątrz pakietu - klasy w obrębie tego samego katalogu traktowane są jak z jednego pakietu class Alfa{ Alfa() {} } // jednostka kompilacji Prog24.java public class Prog24 { public static void main(String arg []) { /* private class Beta{ Beta() {} } Beta b = new Beta(); b.show(); } } // Prog24 protected class Teta{ Teta() {} } */ /* jednostka kompilacji w tym samym katalogu o nazwie Beta.java */ public class Beta { Beta() {} public class Prog23 { public static void main(String arg []) {} } // Prog23 void show() {System.out.println("Beta");} } // Beta Podstawy języka 25 JAVA – pakiety // plik : kb.ath.library.AlfaP.java // określenie pakietu w pierwszej lini // import kb.ath.library.Alfa; package kb.ath.library; import java.util.*; import kb.ath.library.*; // importuje wszystkie publiczne z \library // Alfa chroniona, nie ma dostepu import kb.ath.library.AlfaP; // importuje klase AlfaP public class Prog25{ class Alfa{ double r; Alfa() { r = Math.random();} } public static void main( String [] arg) { // Alfa a = new Alfa(); // Alfa jest chroniona poza pakietem AlfaP a = new AlfaP(); public class AlfaP { private Alfa a; public AlfaP () {a = new Alfa();} public double giveAlfa() { return a.r; } } double d = a.giveAlfa(); System.out.println(d); } } // Prog25 Podstawy języka 26 JAVA – pakiety // plik : kb.ath.library.AlfaP.java // określenie pakietu w pierwszej lini // plik : kb.ath.library.Beta.java package kb.ath.library; public class Beta{ package kb.ath.library; import java.util.*; class Alfa{ double r; Alfa() { r = Math.random();} } public class AlfaP { private Alfa a; public AlfaP () {a = new Alfa();} public double giveAlfa() { return a.r; } } private Alfa a; public Beta() {a = new Alfa();} // Alfa już nie jest chroniona public double giveAlfa() { return a.r;} // dostęp w ramach pakietu } // Beta import kb.ath.library.*; import kb.ath.library.Beta; public class Prog26{ public static void main( String [] arg) { AlfaP a = new AlfaP(); double d = a.giveAlfa(); Beta b = new Beta(); d = b.giveAlfa(); Podstawy języka }} // Prog26 27 JAVA –dokumentacja kodu, rodzaje znaczników /** komentarz opisujacy klasę*/ public class Nic{ Znaczniki dokumentowania klas: @see odwołanie do innej klasy @version informacja o wersji /** komentarz do zmiennej */ public int i; /** komentarz do konstruktora, metody */ Public Nic() {} } Można osadzać HTML /** *<pre> *System.out.println(new Date()); *<pre> */ @author informacja o autorze @since wskazanie wersji kodu od której dana własność jest dostępna Znaczniki dokumentowania zmiennych: @see Znaczniki dokumentowania metod: @see @param nazwa_parametru opis parametru @return opis zwracanego typu, rezultatu @throws nazwa_klasy_wyjątku opis kiedy i dlaczego może wystąpić @deprecated stosowany do oznaczenia nie zalecanych właściwości wypartych przez nowe i przeznaczonych do usunięcia w przyszłości Podstawy języka 28 JAVA – dokumentacja: przykład /** Klasa BoxArray jest kolekcja /** Funkcja skladowa putBox z jednym parametrem *@param x typu Box wstawia obiekt przesłany * obiektów typu Box * z mozliwością zbierania i przeglądania przez argument do kolekcji * @author Krzysztof Brzozowski @see Box * @author kbrzozowski.pb.bielsko.pl @return brak * @version 1.0 @exception brak zgłaszanych wyjątków */ */ public class BoxArray{ public void putBox(Box x) {array [ile] = x; ile++; } /** Pole ile określa aktualny stan kolekcji */ /** Funkcja wypisująca zawartość obiektu Box pod pozycja i w kolekcji public int ile =0; /** Pole array określa referencje do tablicy obiektów Box */ @param i typu int @see Box public Box [] array; /** Konstruktor klasy BoxArray z jednym parametrem */ @param n określa maksymalny rozmiar kolekcji public void showBox(int i) */ {System.out.println(" n w Box nr. " + i + " = " + array[i].n); } } public BoxArray(int n) {array = new Box [n];} Podstawy języka 29 JAVA – dokumentacja: przykład import java.util.*; /** Klasa Box jako skrytka */ public class Box { int n=100; /** Pole i typu int określa ilość obiektów klasy */ public static int i; // zmienna statyczna Box() {i++;} // przeciążenie, konstruktor Box(int n ) { this.n = n; i++; } } : javadoc –version –author Box.java BoxArray.java Podstawy języka 30 JAVA – dokumentacja Podstawy języka 31 JAVA – dokumentacja, część ogólna Podstawy języka 32 JAVA – dokumentacja, część szczegółowa Podstawy języka 33