Programowanie obiektowe /Java/
Laboratorium nr 5
1 Pakiety
Pakiet1 to grupa klas zebranych razem we wspólnej przestrzeni nazw. Zaleca się, aby nazwa pakietu
powinna być odwróconą nazwą domeny internetowej autora. np.
1 package pl.kielce.tu.lab5;
2
3 public class MyClass {
4 public static void main(String[] args) {
5 System.out.println("package pl.kielce.tu.lab5");
6 System.out.println(MyClass.class.getPackage());
7 }
8 }
Przykład 1: src/pl/kielce/tu/lab5/MyClass.java{link}
Podczas wyszukiwania klas na dysku wszystkie kropki w nazwie pakietu zostają zamienione na / lub\
(zależnie od systemu operacyjnego), a każdy element nazwy pakietu zostanie zamieniony na podkatalog.
Kompilacja dla Windows (z poziomu katalogu src):
javac pl\kielce\tu\lab5\*.java
Kompilacja dla Linux (z poziomu katalogu src):
javac pl/kielce/tu/lab5/*.java
Uruchomienie:
java pl.kielce.tu.lab5.MyClass
Jeżeli podczas tworzenia klasy nie podamy nazwy pakietu zostanie ona umieszczona w pakiecie domyślnym
( nienazwanym ).
Użycie klasy z tego samego pakietu (np. domyślnego) jest możliwe bez podawania nazwy pakietu:
Complex c = new Complex(1, 2);
Użycie klasy z innego pakietu (bez użycia słowa kluczowego import):
pl.kielce.tu.lab5.MyClass c1 = new pl.kielce.tu.lab5.MyClass();
Użycie klasy z innego pakietu (z użyciem słowa kluczowego import):
import pl.kielce.tu.java.MyClass2;
...
MyClass2 c2 = new MyClass2();
Import wszystkich klas z pakietu:
import pl.kielce.tu.lab5.*;
Dlaczego klasy takie jak np. System możemy używać bez wcześniejszego importu lub podania pełnej
nazwy pakietowej?
1
Thinking in Java, Bruce Eckel, Wydanie IV, Helion, 2006
1
2 Zmienna CLASSP AT H
Zmienna CLASSP AT H2 zawiera ścieżki do katalogów lub archiwów (jar, zip) używanych jako korzenie
przy wyszukiwaniu plików z rozszerzeniem class.
Jeżeli założymy, że system operacyjny to Windows, a skompilowane pliki class znajdują się w katalogu:
D:\java\src
to instrukcja służąca do uruchomienia aplikacji wygląda następująco:
java -cp D:\java\src pl.kielce.tu.lab5.MyClass
java -classpath d:\java\src pl.kielce.tu.lab5.MyClass
Jeżeli założymy, że system operacyjny to Linux, a skompilowane pliki class znajdują się w katalogu:
/home/java/src
to instrukcja służąca do uruchomienia aplikacji wygląda następująco:
java -cp /home/java/src pl.kielce.tu.lab5.MyClass
java -classpath /home/java/src pl.kielce.tu.lab5.MyClass
3 Modyfikatory dostępu
Modyfikatory dostępu:
- public dostępne dla wszystkich,
- protected dostępne dla klas znajdujących się w tym samym pakiecie wszystkich oraz dla klas dziedzi-
czących po tej klasie,
- brak słowa kluczowego (dostęp pakietowy, przyjazny, domyślny) dostępne dla klas znajdujących się
w tym samym pakiecie,
- private dostępne tylko wewnątrz danej klasy.
Przykład:
Plik AAA.java znajdujący się w pakiecie aaa.bbb.ccc.
1 package aaa.bbb.ccc;
2
3 public class AAA {
4 public int publicAccess = 1;
5 protected int protectedAccess = 2;
6 int packageAccess = 3;
7 private int privateAccess = 4;
8
9 public static void main(String[] args) {
10 AAA a = new AAA();
11 System.out.println("public access " + a.publicAccess);
12 System.out.println("protected access " + a.protectedAccess);
13 System.out.println("package access " + a.packageAccess);
14 System.out.println("private access " + a.privateAccess);
15 }
16 }
Przykład 2: src/aaa/bbb/ccc/AAA.java{link}
Plik BBB.java znajdujący się w pakiecie aaa.bbb.ccc.
2
Thinking in Java, Bruce Eckel, Wydanie IV, Helion, 2006
2
1 package aaa.bbb.ccc;
2
3 public class BBB {
4 public static void main(String[] args) {
5 AAA a = new AAA();
6 System.out.println("public access " + a.publicAccess);
7 System.out.println("protected access " + a.protectedAccess);
8 System.out.println("package access " + a.packageAccess);
9 // ERROR The field AAA.privateAccess is not visible
10 System.out.println("private access " + a.privateAccess);
11 }
12 }
Przykład 3: src/aaa/bbb/ccc/BBB.java{link}
Plik Y Y Y.java znajdujący się w pakiecie xxx.yyy.zzz.
1 package xxx.yyy.zzz;
2
3 import aaa.bbb.ccc.AAA;
4
5 //klasa YYY dziedziczy po klasie AAA
6 public class YYY extends AAA {
7 public static void main(String[] args) {
8 AAA a = new AAA();
9 System.out.println("public access " + a.publicAccess);
10 // ERROR The field AAA.protectedAccess is not visible
11 System.out.println("protected access " + a.protectedAccess);
12 // ERROR The field AAA.packageAccess is not visible
13 System.out.println("package access " + a.packageAccess);
14 // ERROR The field AAA.privateAccess is not visible
15 System.out.println("private access " + a.privateAccess);
16 YYY y = new YYY();
17 System.out.println("public access " + y.publicAccess);
18 System.out.println("protected access " + y.protectedAccess);
19 // ERROR The field YYY.packageAccess is not visible
20 System.out.println("package access " + y.packageAccess);
21 // ERROR The field YYY.privateAccess is not visible
22 System.out.println("private access " + y.privateAccess);
23 }
24 }
Przykład 4: src/xxx/yyy/zzz/YYY.java{link}
Plik ZZZ.java znajdujący się w pakiecie xxx.yyy.zzz.
1 package xxx.yyy.zzz;
2
3 import aaa.bbb.ccc.AAA;
4
5 public class ZZZ {
6 public static void main(String[] args) {
7 AAA a = new AAA();
8 System.out.println("public access " + a.publicAccess);
9 // ERROR The field AAA.protectedAccess is not visible
10 System.out.println("protected access " + a.protectedAccess);
11 // ERROR The field AAA.packageAccess is not visible
12 System.out.println("package access " + a.packageAccess);
13 // ERROR The field AAA.privateAccess is not visible
14 System.out.println("private access " + a.privateAccess);
15 }
16 }
3
Przykład 5: src/xxx/yyy/zzz/ZZZ.java{link}
4 Klasy wewnętrzne i statyczne
Java3 pozwala na umieszczanie definicji klasy w obrębie definicji innej klasy. Mowa wtedy o klasie we-
wnętrznej.
Tworzenie obiektu klasy wewnętrznej:
obiektKlasyZewnętrznej.new KonstruktorKlasyWewnętrznej()
Dostęp do obiektu klasy zewnętrznej z obiektu klasy wewnętrznej:
NazwaKlasyZewnętrznej.this
1 package pl.kielce.tu.lab5;
2
3 public class OuterClass {
4
5 private String name = "OuterClassName";
6
7 class InnerClass {
8 String name = "InnerClassName";
9
10 void print() {
11 String name = "LocalVariableName";
12 System.out.println(name);
13 System.out.println(this.name);
14 System.out.println(OuterClass.this.name);
15 }
16 }
17
18 public static void main(String[] args) throws Exception {
19 OuterClass o = new OuterClass();
20 InnerClass i = o.new InnerClass();
21 i.print();
22 }
23 }
Przykład 6: src/pl/kielce/tu/lab5/OuterClass.java{link}
Jeżeli nie potrzebujemy połączenia między obiektem klasy wewnętrznej a obiektem jego klasy zewnętrz-
nej, możemy uczynić klasę wewnętrzną statyczną. Takie klasy są powszechnie określane jako klasy zagnież-
dżone.
1 package pl.kielce.tu.lab5;
2
3 public class OuterClass2 {
4
5 static private String name = "OuterClass2Name";
6
7 static class StaticClass {
8 String name = "StaticClassName";
9
10 void print() {
11 String name = "LocalVariableName";
12 System.out.println(name);
13 System.out.println(this.name);
3
Thinking in Java, Bruce Eckel, Wydanie IV, Helion, 2006
4
14 System.out.println(OuterClass2.name);
15 }
16 }
17
18 public static void main(String[] args) throws Exception {
19 StaticClass i = new StaticClass();
20 i.print();
21 }
22 }
Przykład 7: src/pl/kielce/tu/lab5/OuterClass2.java{link}
5 Import statyczny
1 package pl.kielce.tu.lab5;
2
3 import static java.lang.System.out;
4
5 public class StaticImport {
6 public static void main(String[] args) {
7 System.out.println("package pl.kielce.tu.lab5");
8 // !!!
9 out.println("package pl.kielce.tu.lab5");
10 }
11 }
Przykład 8: src/pl/kielce/tu/lab5/StaticImport.java{link}
6 Przykładowa treść laboratorium
Proszę zapoznać się z następującymi klasami z pakiet java.lang: Boolean, Byte, Character, Double,
F loat, Integer, Long, Math, Object, Short, String, System oraz V oid.
Przykładowa treść laboratorium:
1. Proszę stworzyć, skompilować oraz uruchomić (bez użycia środowiska programistycznego takiego jak
NetBeans czy Eclipse) aplikację zgodną ze specyfikacją podaną przez prowadzącego. Klasy aplikacji
powinny znajdować się w pakiecie o podanej nazwie. Dodatkowo należy uruchomić aplikację z lokalizacji
innej (np. C:\) niż lokalizacja klas.
2. Proszę opracować przykład dotyczący klas wewnętrznych i statycznych.
3. Korzystając z metod klas dostępnych w bibliotece standardowej proszę:
- policzyć sinus podanego kąta,
- sprawdzić czy dana liczba typu F loat jest NaN (ang. Not a Number),
- sprawdzić czy obiekt klasy String rozpoczyna się od podanego prefiksu,
- znalezć indeks pierwszego wystąpienia podanego tekstu,
- usunąć początkowe i końcowe białe znaki (spacje, tabulacje, itd.) w tekście,
- przekształcić podany tekst tak, aby zawierał tylko małe litery,
- podzielić podany tekst na poszczególne wyrazy.
4. Inne
5
Wyszukiwarka
Podobne podstrony:
tpd lab05Lab05 11sop 2009 lab05CAD 15 LAB05 Parametry fizyczne BlokiAiP Lab05BO Lab05java lab05 inheritanceInf Lab05so lab05Lab05 SprawozdanieInf Lab05Lab05 ATMwięcej podobnych podstron