java wyklad3 0

background image

Programowanie.

Wykład 3. Operatory, referencje, obiekty

Mgr.inż. Aleksander Bielski

alex@iis.pwsz.elblag.pl

PWSZ, Elbląg, Instytut Informatyki Stosowanej 2004 r. Mgr. Inż. Aleksander Bielski

1

background image

Program wykładu

PWSZ, Elbląg, Instytut Informatyki Stosowanej 2004 r. Mgr. Inż. Aleksander Bielski

2

1) Operatory numeryczne.

2) Operacje bitowe

3) Operatory logiczne
4) Operator warunkowy

5) Typy referencyjne

6) Klasa Object

background image

Operatory numeryczne

unarny (jednoargumentowy): plus

+

i minus

-

mnożenia i dzielenia:

*

/

%

dodawania

+

i odejmowania

-

inkrementacji:

++

(dwie formy – prefiks i sufiks /lub

przedrostkowa i przyrostkowa/ )

PWSZ, Elbląg, Instytut Informatyki Stosowanej 2004 r. Mgr. Inż. Aleksander Bielski

3

background image

PWSZ, Elbląg, Instytut Informatyki Stosowanej 2004 r. Mgr. Inż. Aleksander Bielski

4

Operatory numeryczne c.d.

dekrementacji:

--

(dwie formy – prefiks i sufiks /lub

przedrostkowa i przyrostkowa/ )
znakowy i bezznakowy operator przesunięcia (tylko wartości
całkowite):

<<

>>

>>>

bitowy operator dopełniający:

~

bitowe operatory:

&

|

^

background image

PWSZ, Elbląg, Instytut Informatyki Stosowanej 2004 r. Mgr. Inż. Aleksander Bielski

5

Jednoargumentowy (unarny)

+

i

-

Argumentem musi być jeden z typów numerycznych

W czasie wykonywania programu wartość wyrażenia z
jednoargumentowym minusem jest negacją arytmetyczną

wartości operanda (ekwiwalent odejmowania od zera)

Negacja maksymalnie ujemnej wartości typu int (

??

) lub long

daje w wyniku taką samą wartość. (W tym przypadku jest

przepełnienie, ale nie ma wyjątku)

Dla wszystkich wartości całkowitych

x

,

-x

równe jest

(~x)+1

.

Przykład: program p4/Test.java

background image

PWSZ, Elbląg, Instytut Informatyki Stosowanej 2004 r. Mgr. Inż. Aleksander Bielski

6

Jednoargumentowy (unarny) minus

-

Dla wartości zmiennoprzecinkowych negacja nie jest
równoznaczna z odejmowaniem od zera, ponieważ jeśli

x

jest

+0.0

, wtedy

0.0-x

daje

+0.0

, ale

-x

daje

-0.0

. Unarny minus

jedynie zmienia znak liczby zmiennoprzecinkowej.

Specjalne przypadki:

Jeśli operand jest NaN, wynik jest NaN

Jeśli operand jest nieskonczonością, wynik jest nieskończonością
o przeciwnym znaku
Jeśli operand jest zerem, wynik jest zerem o przeciwnym znaku

background image

PWSZ, Elbląg, Instytut Informatyki Stosowanej 2004 r. Mgr. Inż. Aleksander Bielski

7

Operator

*

Wartości całkowite – możliwe przepełnienie

Dla wartości zmiennoprzecinkowych wg IEEE 754 :

Jeśli co najmniej jeden z operandów jest NaN, wynik jest

NaN.

Jeśli wynik nie jest NaN, znak wyniku jest dodatni jeśli

obydwa operandy mają jednakowe znaki, oraz ujemny, jeżeli

znaki operandów są różne

Wynikiem mnożenia nieskończoności i zera jest NaN.

background image

PWSZ, Elbląg, Instytut Informatyki Stosowanej 2004 r. Mgr. Inż. Aleksander Bielski

8

Operator

*

c.d.

Wynikiem operacji mnożenia nieskończonośći i wartości

skończonej jest nieskończoność ze znakiem, który określamy

zgodnie z poprzednimi regułami.

W pozostałych przypadkach (bez nieskoności i NaN):

wynik jest typu float lub double

background image

PWSZ, Elbląg, Instytut Informatyki Stosowanej 2004 r. Mgr. Inż. Aleksander Bielski

9

Operator

/

Może wywołać wyjątek w przypadku dzielenia przez zero

( ArithmeticException)

Jeśli co najmniej jeden z operandów jest NaN, wynik jest NaN.

Jeśli wynik nie jest NaN, znak wyniku jest dodatni jeśli obydwa

operandy mają jednakowe znaki, oraz ujemny, jeżeli znaki

operandów są różne

Dzielenie nieskończoności przez nieskończoność daje NaN

Dzielenie nieskończoności przez wartość skończoną daje

nieskończoność ze znakiem, który określamy zgodnie z
poprzednimi regułami.

background image

PWSZ, Elbląg, Instytut Informatyki Stosowanej 2004 r. Mgr. Inż. Aleksander Bielski

10

Operator

%

Binarny operator, zwraca resztę z dzielenia

Operandy mogą być typów całkowitych i zmiennoprzecinkowych

Operator po lewej stronie znaku

%

nazywamy dzielną , po prawej

- dzielnikiem

Dla liczb całkowitych wynik

(a/b)*b+(a%b)

równa się

a

Jeśli dzielnikiem jest 0 (całkowite) , to wygenerowany będzie
wyjątek ArithmeticException

background image

PWSZ, Elbląg, Instytut Informatyki Stosowanej 2004 r. Mgr. Inż. Aleksander Bielski

11

Operator

%

-

przykłady

Przykłady:

5%3

daje w wyniku

2

( 5/3 daje w wyniku 1)

5%(-3)

daje w wyniku

2

( 5/(-3) daje w wyniku -1)

(-5)%3

daje w wyniku

-2

( (-5)/3 daje w wyniku -1)

(-5)%(-3)

daje w wyniku

-2

( (-5)/(-3) daje w wyniku 1)

5.0%3.0

daje w wyniku

2.0

5.0%(-3.0)

daje w wyniku

2.0

(-5.0)%3.0

daje w wyniku

-2.0

(-5.0)%(-3.0)

daje w wyniku

-2.0

przykład: p5/Test.java

background image

PWSZ, Elbląg, Instytut Informatyki Stosowanej 2004 r. Mgr. Inż. Aleksander Bielski

12

Operator

%

- reguły

Jeśli co najmniej jeden z operandów jest NaN, wynik jest NaN.
Jeśli wynik nie jest NaN,

znak wyniku

jest taki sam jak znak

dzielnej

Dzielenie nieskończoności przez nieskończoność daje NaN
Jeśli dzielna jest nieskończonością lub dzielnik jest zerem (oraz

obydwa przypadki naraz), wynikiem jest NaN
Jeśli dzielna jest wartością skończoną i dzielnik jest

nieskończonością, wynik jest równy dzielnej
Jeśli dzielna jest zerem i dzielnik jest wartością skończoną to wynik
jest równy dzielnej

background image

PWSZ, Elbląg, Instytut Informatyki Stosowanej 2004 r. Mgr. Inż. Aleksander Bielski

13

Operator

%

- reguły

c.d.

W pozostałych przypadkach (gdy nie ma nieskończoności, NaN lub
zera) dla wartości zmiennoprzecinkowych reszta

r

dzielenia

dzielnej

n

przez dzialnik

d

jest określana wzorem:

r = n – (d * q)


gdzie

q

jest wartością całkowitą dodatnią tylko jeżeli

n/d

jest

dodatnie, oraz ujemną tylko jeśli

n/d

jest ujemne

background image

PWSZ, Elbląg, Instytut Informatyki Stosowanej 2004 r. Mgr. Inż. Aleksander Bielski

14

Operatory dodawania i odejmowania (typy numeryczne)

Jeśli typ operandów jest całkowity (int lub long) wynik operacji
również jest typu całkowitego

Jeśli w wyniku dodawania jest przepełnienie, wtedy znak

wyniku nie będzie taki jak w wyniku sumy matematycznej

wartości operatorów.
Wynik operacji dla wartości zmiennoprzecinkowych jest

określany wg IEEE 754

background image

PWSZ, Elbląg, Instytut Informatyki Stosowanej 2004 r. Mgr. Inż. Aleksander Bielski

15

Operatory dodawania i odejmowania:

zmiennoprzecinkowe

Jeśli co najmniej jeden z operandów jest NaN, wynik jest

NaN.

Suma dwóch wartości nieskończonych o przeciwnych

znakach jest NaN

Suma dwóch wartości nieskończonych o jednakowych

znakach jest nieskończoność o takim samym znaku

Suma nieskończoności i wartości skończonej równa jest
operandowi o wartości nieskończonej

Suma dwóczh zer o znakach przeciwnych daje zero dodatnie

background image

PWSZ, Elbląg, Instytut Informatyki Stosowanej 2004 r. Mgr. Inż. Aleksander Bielski

16

Operatory dodawania i odejmowania:

zmiennoprzecinkowe c.d.

Suma dwóch wartości zerowych o takim samym znaku daje zero
o tym znaku

Suma zera i skończonej wartości różnej od zera daje w wyniku

operand niezerowy

Suma dwóch niezerowych skończonych wartości tej samej

wielkości o znakach przeciwnych daje dodatnie zero

W pozostałych przypadkach jest liczona dokładna suma

matematyczna

background image

PWSZ, Elbląg, Instytut Informatyki Stosowanej 2004 r. Mgr. Inż. Aleksander Bielski

17

Porównanie z wartością NaN

Dla dowolnego x (włączając NaN) wynikiem poniższych

operacji jest false:

x < Float.NaN

x <= Float.NaN

x == Float.NaN

x > Float.NaN
x >= Float.NaN

background image

PWSZ, Elbląg, Instytut Informatyki Stosowanej 2004 r. Mgr. Inż. Aleksander Bielski

18

Porównanie z wartością NaN

W wyniku testów:

Float.NaN != Float.NaN

oraz

Double.NaN != Double.NaN

otrzymujemy true

Najlepszym sposobem sprawdzenia i porównania wyników obliczeń

z wartością NaN jest użycie metod statycznych

Float.isNaN(float)

lub

Double.isNaN(double)

z pakietu

java.lang

background image

PWSZ, Elbląg, Instytut Informatyki Stosowanej 2004 r. Mgr. Inż. Aleksander Bielski

19

Operator inkrementacji i dekrementacji

Dwie formy :

Prefiks /przedrostkowa:

np.

++x, ++liczba

Sufiks /przyrostkowa:

np.

x--, liczba--

Wynik wyrażenia musi być zapamiętany w zmiennej jednego z

typów numerycznych, inaczej – błąd kompilacji
Wynikiem wyrażenia jest wartość, nie zmienna
Wynikiem wyrażenia prefiksowego jest wartość zmiennej już po

obliczeniu i zapamiętaniu nowej wartości
Wynikiem wyrażenia postfiksowego jest wartość zmiennej przed
obliczeniem i zapamiętaniem nowej wartości

background image

PWSZ, Elbląg, Instytut Informatyki Stosowanej 2004 r. Mgr. Inż. Aleksander Bielski

20

Operator inkrementacji i dekrementacji

Wyjątek:

Do zmiennej zadeklarowanej jako

final

nie może być

zastosowana żadna z operacji inkrementacji lub dekrementacji

dlatego, że gdy uzyskujemy dostęp do zmiennej

final

w wyrażeniu,

otrzymujemy wartośc, nie zmienną

Przykłady:

int x=z=5, y;

y=x++;

// po wykonaniu instrukcji wartość x wynosi 6, wartość y

równa się 5

z=--x;

// wartość x wynosi 5, wartość z równa się 5

background image

PWSZ, Elbląg, Instytut Informatyki Stosowanej 2004 r. Mgr. Inż. Aleksander Bielski

21

Operatory przesunięcia

Rodzaje operatorów:

lewy shift

<<

znakowy prawy shift

>>

bezznakowy prawy shift

>>>

operandy:

operand po lewej stronie operatora zawiera wartość, która będzie

przesuwana

operand po prawej stronie wskazuje odległość przesunięcia w

bitach

background image

PWSZ, Elbląg, Instytut Informatyki Stosowanej 2004 r. Mgr. Inż. Aleksander Bielski

22

Operatory przesunięcia c.d.

Operandy muszą być typów podstawowych
Jeśli typ lewego operanda int, wartość operanda prawego może być w

zakresie od 0 do 31 włącznie

Jeśli typ lewego operanda long, wartość operanda prawego może być w

zakresie od 0 do 63 włącznie

n<<s

jest równoznaczne z

n*2

s

n>>s

jest równoznaczne z

n>>>s

jest równoznaczne z:

n>>s

w przypadku gdy n jest dodatnie,

(n>>s)+(2<<~s)

gdy n jest typu int ujemne

(n>>s)+(2L<<~s)

gdy n jest typu long ujemne

background image

PWSZ, Elbląg, Instytut Informatyki Stosowanej 2004 r. Mgr. Inż. Aleksander Bielski

23

Operatory przesunięcia c.d.

background image

PWSZ, Elbląg, Instytut Informatyki Stosowanej 2004 r. Mgr. Inż. Aleksander Bielski

24

Operatory przesunięcia: reguły

Pyt.1: Co się dzieję z bitami, które się ”nie

mieszczą” i wychodzą poza liczbę?
Pyt.2: Co sie umieszcza w miejsce brakujących

bitów?

Odp.1: Bity są odrzucane

Odp.2:

W przypadku operacji

<<

oraz bezznakowej

operacji

>>>

nowe bity mają wartość

0

.

W przypadku operacji

>>

nowe bity otrzymują

wartość taką jak najbardziej znaczący bit przed

operacją przesunięcia.

background image

PWSZ, Elbląg, Instytut Informatyki Stosowanej 2004 r. Mgr. Inż. Aleksander Bielski

25

Operatory przesunięcia c.d.

background image

PWSZ, Elbląg, Instytut Informatyki Stosowanej 2004 r. Mgr. Inż. Aleksander Bielski

26

Przesunięcie w prawo

background image

PWSZ, Elbląg, Instytut Informatyki Stosowanej 2004 r. Mgr. Inż. Aleksander Bielski

27

Przesunięcie w prawo: typ byte

W tym przypadku odbywa się rozszerzenie typu byte
na

int.

Otrzymany

wynik

różni

się

od

oczekiwanego, więc nie należy stosować operacji
>>> z liczbami krótszymi od int.

background image

PWSZ, Elbląg, Instytut Informatyki Stosowanej 2004 r. Mgr. Inż. Aleksander Bielski

28

Bitowy operator dopełniający

~

Operandy muszą być typów podstawowych

W czasie wykonywania wartość wyrażenia jest bitowym

dopełnieniem wartości operanda:

~x

równa się

(-x)-1

Inaczej mówiąc, operator ~ konwertuje wszystkie bity o wartości

0 na 1 , a bity o wartości 1 na 0:

dla wartości bitowej 00001111 wynik jest 11110000.

przykład: program p6/Test.java

background image

PWSZ, Elbląg, Instytut Informatyki Stosowanej 2004 r. Mgr. Inż. Aleksander Bielski

29

Operacje bitowe: AND, OR, XOR

A B A*B

0 0

0

0 1

0

1 0

0

1 1

1

A

B A^B

0

0

0

0

1

1

1

0

1

1

1

0

A

B A|B

0

0

0

0

1

1

1

0

1

1

1

1

AND

OR

XOR

background image

PWSZ, Elbląg, Instytut Informatyki Stosowanej 2004 r. Mgr. Inż. Aleksander Bielski

30

Całkowite bitowe operatory

&

,

^

,

|

& - wynik jest bitowym

i

(AND) operandów

^ - wynik jest bitowym

wyłącznym

LUB

(XOR)

operandów

| - wynik jest bitowym

LUB

(OR) operandów

background image

Operatory logiczne

Relacji:

==

i

!=

logicznego dopełnienia:

!

Logiczne:

&

^

|

Warunkowe

i

oraz

lub

:

&&

||

warunkowy:

? :

łańcuchowy plus

+

: konwertuje operand typu boolean

na typ String ("true" lub "false"), następnie tworzy

nowy łańcuch typu String , który jest sumą

PWSZ, Elbląg, Instytut Informatyki Stosowanej 2004 r. Mgr. Inż. Aleksander Bielski

31

background image

PWSZ, Elbląg, Instytut Informatyki Stosowanej 2004 r. Mgr. Inż. Aleksander Bielski

32

Logiczny operator dopełniający

!

Jednoargumentowy

Operand musi być typy boolean

Typ wyniku – boolean
W czasie wykonywania wartość wyrażenia jest:

true

jeżeli operand ma wartość

false

false

jeżeli operand ma wartość

true

background image

PWSZ, Elbląg, Instytut Informatyki Stosowanej 2004 r. Mgr. Inż. Aleksander Bielski

33

Logiczny operator dopełniający

! c.d.

Operator

!

często jest częścią instrukcji

if()

. Poniższe elementy

programów wykonują te same czynności:

public Object myMethod(Object x) {

if (x instanceof String) {

// nic nie robimy

}
else {

x = x.toString();

}
return x;

}

public Object myMethod(Object x) {

if (!(x instanceof String)) {

x = x.toString();

}

return x;
}

background image

Logiczne operatory

==

i

!=

Wynik operacji

==

jest true jeśi obydwa operandy

jednocześnie mają taką samą wartość logiczną, inaczej
wynik jest false.

Wynik operacji

!=

jest false jeśi obydwa operandy

jednocześnie mają taką samą wartość logiczną, inaczej
wynik jest true.

PWSZ, Elbląg, Instytut Informatyki Stosowanej 2004 r. Mgr. Inż. Aleksander Bielski

34

background image

Referencje a logiczne operatory

==

i

!=

Jeśli obydwa operandy są typu referencyjnego lub typu

null, wtedy operacja porównuje obiekty
W czasie wykonywania wynik operacji

==

jest true jeśli

obydwa operandy jednocześnie mają wartość null albo

odwołują się do tego samego obiektu lub tablicy; w

przeciwnym przypadku wynikiem jest false.
Wynik operacji

!=

jest false jeśli obydwa operandy

jednocześnie mają wartość null albo odwołują się do

tego samego obiektu lub tablicy; w przeciwnym

przypadku wynikiem jest true.

PWSZ, Elbląg, Instytut Informatyki Stosowanej 2004 r. Mgr. Inż. Aleksander Bielski

35

background image

Obiekty String a logiczny operator

==

Porównujemy tylko referencje, nie zawartość

obiektów klasy String
Porównanie zawartości dwóch obiektów

s

i

t

klasy

String można wykonać stosując metodę klasy String :

s.equals(t)

PWSZ, Elbląg, Instytut Informatyki Stosowanej 2004 r. Mgr. Inż. Aleksander Bielski

36

background image

Logiczne Operatory

&

,

^

,

|

Gdy obydwa operandy są typu boolean, wtedy typ

wyrażenia boolean

PWSZ, Elbląg, Instytut Informatyki Stosowanej 2004 r. Mgr. Inż. Aleksander Bielski

37

A

B

A & B

False

False

False

False

True

False

True

False

False

True

True

True

A

B

A ^ B

False

False

False

False

True

True

True

False

True

True

True

False

A

B

A | B

False

False

False

False

True

True

True

False

True

True

True

True

background image

Operator warunkowego

I (AND)

&&

Działanie jest podobne do operatora

&

Każdy operand musi mieć typ boolean

Wynik wyrażenia zawsze ma typ boolean

Wartość operanda po prawej stronie jest

obliczana tylko wtedy, gdy wartość lewego
operanda jest true

PWSZ, Elbląg, Instytut Informatyki Stosowanej 2004 r. Mgr. Inż. Aleksander Bielski

38

background image

Operator warunkowego

LUB (OR)

||

Działanie jest podobne do operatora

|

Wartość operanda po prawej stronie jest

obliczana tylko wtedy, gdy wartość lewego

operanda jest false

Każdy operand musi mieć typ boolean

Wynik wyrażenia zawsze ma typ boolean

PWSZ, Elbląg, Instytut Informatyki Stosowanej 2004 r. Mgr. Inż. Aleksander Bielski

39

background image

Operator warunkowy

? :

Używa wartości logicznej lub wyrażenia logicznego do

określenia które z dwóch wyrażeń zostanie wykonane

Zawiera trzy wyrażenia:

Pierwsze – typu logicznego (boolean)

Drugie i trzecie: jednego z typów numerycznych, typu

boolean, typu referencyjnego lub null

Sposób wykonania

Grupowanie od prawej do lewej:

a?b:c?d:e?f:g

oznacza to samo co

a?b:(c?d:(e?f:g))

PWSZ, Elbląg, Instytut Informatyki Stosowanej 2004 r. Mgr. Inż. Aleksander Bielski

40

background image

Operator warunkowy – typ wyrażenia

Jeśli drugi i trzeci operand mają ten sam typ (również

null), wtedy wyrażenie warunkowe będzie miało taki

sam typ
W przeciwnym przypadku, jeżeli te operandy są

numeryczne, to:
jeśli jeden z operandów jest typu byte, drugi – short,

wynik jest typu short
jeśli jeden z operandów jest typu T (gdzie T jest byte,

short lub char), a drugi operand jest wyrażeniem stałym

typu int (z tym, ze wartość wyrażenia może być

reprezentowana przez T, wtedy typ wyrażenia

warunkowego jest T.

PWSZ, Elbląg, Instytut Informatyki Stosowanej 2004 r. Mgr. Inż. Aleksander Bielski

41

background image

Operator warunkowy – typ wyrażenia c.d.

Jeśli drugi lub trzeci operator mają typ null , a
jeden z nich jest typu referencyjnego, to

wynikiem wyrażenia warunkowego będzie ten

typ referencyjny
Jeśli drugi i trzeci operator należą do różnych
typów referencyjnych, wtedy musi istnieć

możliwość konwersji jednego z tych typów na

drugi (powiedzmy – typ T), wtedy typ wyrażenia

warunkowego również jest T

PWSZ, Elbląg, Instytut Informatyki Stosowanej 2004 r. Mgr. Inż. Aleksander Bielski

42

background image

Operator rzutowania typów

Jest używany do wymuszenia zmiany typu wyrażenia

Rzutowanie może być użyte do zmiany typu wartości
podstawowych, np. zamieniając wartość double na int:

int obszar = (int)(Math.PI * diameter);

Można stosować również do typów referencyjnych, np. :

Vector v = new Vector();

v.add (” Hello” );
String s = (String)v.get(0);

PWSZ, Elbląg, Instytut Informatyki Stosowanej 2004 r. Mgr. Inż. Aleksander Bielski

43

background image

Wyrażenia logiczne

Umożliwiają sterowanie wykonaniem :

instrukcji warunkowej

if

instrukcji

while

instrukcji

do

instrukcji

for

wyrażenie logiczne również określa która instrukcją zostanie
wykonana w operatorze warunkowym

? :

PWSZ, Elbląg, Instytut Informatyki Stosowanej 2004 r. Mgr. Inż. Aleksander Bielski

44

background image

Typy referencyjne

Klasa -

class

interfejs –

interface

Tablicowy

array

Uwaga:

typ specjalny -

null

PWSZ, Elbląg, Instytut Informatyki Stosowanej 2004 r. Mgr. Inż. Aleksander Bielski

45

background image

Typy referencyjne c.d.

Przykład:

class Punkt { int[ ] metryka; }
interface Przesun {

void przesun(int deltax, int deltay);

}
deklaracja klasy typu Punkt, interfejsu typu
Przesun, i tablicy typu int[ ] do deklaracji pola

metryka klasy Punkt

PWSZ, Elbląg, Instytut Informatyki Stosowanej 2004 r. Mgr. Inż. Aleksander Bielski

46

background image

Obiekty

obiekt reprezentuje pojedynczy element

klasy lub może być tablicą

referencje – są wskaznikami do obiektów

referencja null nie wskazuje na żaden

obiekt

PWSZ, Elbląg, Instytut Informatyki Stosowanej 2004 r. Mgr. Inż. Aleksander Bielski

47

background image

Utworzenie obiektu

Dwie formy tworzenia obiektu:

Utworzenie obiektu przy użyciu operacji

new

Utworzenie obiektu z użyciem wyrażenia

rozpoczynającego się od

Primary

– umożliwia

utworzenie obiektów klas wewnętrznych i podklas

anonimowych
Uwaga:
zastosowanie operatora

+

np. w wyrażeniach z

obiektami String powoduje utworzenie nowego

obiektu klasy String w sposób niejawny

przykład: p1/Test.java

PWSZ, Elbląg, Instytut Informatyki Stosowanej 2004 r. Mgr. Inż. Aleksander Bielski

48

background image

Utworzenie obiektu: 1

class Punkt {

int x, y;
Punkt( ) { System.out.println("konstruktor domyslny"); }
Punkt(int x, int y) { this.x = x; this.y = y; }

// Obiekt klasy Punkt jest tworzony w czasie inicjalizacji klasy

static Punkt origin = new Punkt(0,0);

// String - niejawne utworzenie przy użyciu operatora +

public String toString( ) {

return "(" + x + "," + y + ")";

}

}

PWSZ, Elbląg, Instytut Informatyki Stosowanej 2004 r. Mgr. Inż. Aleksander Bielski

49

background image

Utworzenie obiektu: 2

class Test {

public static void main(String[ ] args) {

// Utworzenie obiektu Punkt z użyciem newInstance:

Punkt p = null;
try {

p = (Punkt)Class.forName("Punkt").newInstance();

}
catch (Exception e) {

System.out.println(e);

}

// Tablicę utworzymy przy użyciu konstruktora tablicowego:

Punkt a[ ] = { new Punkt(0,0), new Punkt(1,1) };

PWSZ, Elbląg, Instytut Informatyki Stosowanej 2004 r. Mgr. Inż. Aleksander Bielski

50

background image

Utworzenie obiektu: 3

// String - utworzenie przy użyciu operatora +

System.out.println("p: " + p);
System.out.println("a: { " + a[0] + ", " + a[1] + " }");

// Tablicę utworzymy przy użyciu

//wyrażenia tworzącego tablicę

String sa[ ] = new String[2];
sa[0] = "he"; sa[1] = "llo";

System.out.println(sa[0] + sa[1]);

}

}

PWSZ, Elbląg, Instytut Informatyki Stosowanej 2004 r. Mgr. Inż. Aleksander Bielski

51

background image

Referencje do obiektu: operatory

Operatory na referencjach do obiektu:

Umożliwiają dostęp do pól z użyciem nazwy kwalifikowanej

(

this.x, this.y

) lub wyrażenia dostępu do pola

Wywołanie metody

Operator rzutowania:

p = (Punkt)Class.forName("Punkt").newInstance();

Operator

+

dla klasy String

Operator

instanceof

Operatory równości

==

i

!=

Operator warunkowy

? :

PWSZ, Elbląg, Instytut Informatyki Stosowanej 2004 r. Mgr. Inż. Aleksander Bielski

52

background image

Referencje do obiektu

Można utworzyć wiele referencji do tego samego obiektu.

Przykład: p2/Test.java

v1.val = 5;

Value v2 = v1;

Następnie w linijce :

v2.val = 6;

zmienia się wartość pola obiektu

v1

, jest to skutkiem

wielokrotnego wskazania na ten sam obiekt.

PWSZ, Elbląg, Instytut Informatyki Stosowanej 2004 r. Mgr. Inż. Aleksander Bielski

53

background image

Klasa Obiekt

Jest nadklasą (klasą macierzystą) wszystkich innych

klas w Javie

Zmienna typu Object może być referencją do

dowolnego obiektu lub tablicy

PWSZ, Elbląg, Instytut Informatyki Stosowanej 2004 r. Mgr. Inż. Aleksander Bielski

54

background image

Klasa Obiekt: metody, c.d.

getClass

zwraca klasę obiektu. Można użyć np. do wykrycia

pełnej nazwy klasy, jej nadklasy, zaimplementowanych interfejsów

toString

zwraca reprezentację obiektu w postaci String

equals

– służy do porównania obiektów

clone

– jest używana do tworzenia kopii obiektu

wait

,

notify

, and

notifyAll

– używane są w programowaniu

współbieżnym z użyciem wątków

finalize

- jest uruchamiana bezpośrednio przed zniszczeniem

obiektu

PWSZ, Elbląg, Instytut Informatyki Stosowanej 2004 r. Mgr. Inż. Aleksander Bielski

55

background image

Operator instanceof

Umożliwia testowanie klasy obiektu w czasie wykonywania

Lewy argument może być dowolnym wyrażeniem typu referencja

do obiektu, zwykle zmienna lub element tablicy, prawy operand
musi być typu: klasa, interfejs, tablica.

Operator instanceof zwraca true jeśli lewy operand jest tej samej
klasy lub podklasy jak i prawy.

Prawy operand może być również typu interface, wtedy test

określa czy obiekt będący lewym argumentem implementuje ten
interfejs.

PWSZ, Elbląg, Instytut Informatyki Stosowanej 2004 r. Mgr. Inż. Aleksander Bielski

56

background image

Operator instanceof

public class Classroom {

private Hashtable inTheRoom = new Hashtable();
public void enterRoom(Person p) {

inTheRoom.put(p.getName(), p);

}
public Person getParent(String name) {

Object p = inTheRoom.get(name);
if (p instanceof Parent) {

return (Parent)p;

}
else {

return null;

}

}

}

PWSZ, Elbląg, Instytut Informatyki Stosowanej 2004 r. Mgr. Inż. Aleksander Bielski

57

background image

Typy, klasy, interfejsy

public interface Kolorowy {

void ustawKolor(byte r, byte g, byte b);

}

class Punkt { int x, y; }

class KolorowyPunkt extends Punkt implements Kolorowy {

byte r, g, b;

public void ustawKolor(byte rv, byte gv, byte bv) {

r = rv;

g = gv;

b = bv;

}

}

PWSZ, Elbląg, Instytut Informatyki Stosowanej 2004 r. Mgr. Inż. Aleksander Bielski

58

background image

Typy, klasy, interfejsy c.d.

class Test {

public static void main(String[] args) {

Punkt p = new Punkt();
KolorowyPunkt cp = new KolorowyPunkt();
p = cp;
Kolorowy c = cp;

}

}
Uwaga: kod programu znajduje się w katalogu p3

PWSZ, Elbląg, Instytut Informatyki Stosowanej 2004 r. Mgr. Inż. Aleksander Bielski

59

background image

Przykład: referencje

Punkt

p =

new

Punkt();

Zmienna lokalna p metody main w klasie Test ma typ

Punkt

,

jej wartością początkową jest

referencja

do

nowego

obiektu

klasy

Punkt

.

KolorowyPunkt

cp =

new

KolorowyPunkt();

Podobnie zmienna lokalna cp ma typ

KolorowyPunkt

oraz

do niej jest przypisana wartość referencji do nowego obiektu
klasy

KolorowyPunkt

.

PWSZ, Elbląg, Instytut Informatyki Stosowanej 2004 r. Mgr. Inż. Aleksander Bielski

60

background image

Przykład: referencje c.d.

p = cp;

przypisanie wartości cp do zmiennej p powoduje, iż p

zawiera

referencję

do obiektu klasy

KolorowyPunkt.

obiekt klasy

KolorowyPunkt

zawiera wszystkie

metody

klasy

Punkt

, oraz również

pola

r,g,b oraz x,y.

Kolorowy c = cp;

Zmienna lokalna c ma typ interfejsu Kolorowy, dlatego

może zawierać referencję do dowolnego obiektu, którego
klasa implementuje ten interfejs (tu – klasa

KolorowyPunkt

).

Uwaga: wyrażenie

new Kolorowy()

nie jest prawidłowe –

nie można utworzyć obiektu typu interfejs

PWSZ, Elbląg, Instytut Informatyki Stosowanej 2004 r. Mgr. Inż. Aleksander Bielski

61

background image

Klasy i tablice

Każda tablica również ma klasę; metoda

getClass

użyta

dla objektu tablicowego zwróci obiekt,który reprezentuje
klasę dla danej tablicy.

Klasy dla tablic mają dość dziwne nazwy, które nie są

prawidłowymi identyfikatorami.

Naprzykład, wartość wyrażenia:

new int[10].getClass().getName()

jest łańcuchem "

[I

"

PWSZ, Elbląg, Instytut Informatyki Stosowanej 2004 r. Mgr. Inż. Aleksander Bielski

62


Wyszukiwarka

Podobne podstrony:
java wyklad 1
java wyklad 4 0
Java wykłady1, Java wykłady:
java wyklad2
Java wykład 3, Java wykład 2
java wyklad
wyklad5.cpp, JAVA jest językiem programowania obiektowego
Java podstawy jezyka wyklad1
Wykład 9 wątki java
Napęd Elektryczny wykład
wykład5
Psychologia wykład 1 Stres i radzenie sobie z nim zjazd B
Wykład 04

więcej podobnych podstron