background image

Programowanie.

Wykład 4. 

mgr inż. Aleksander Bielski

alex@iis.pwsz.elblag.pl

www.iis.pwsz.elblag.pl/~alex

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

1

background image

Program wykładu

1) Tablice
2) Metoda main()
3)Czas życia zmiennych
4)Inicjalizacja zmiennych
5)Przekazywanie argumentów
6)Odśmiecacz pamięci
7)Operatory logiczne: obliczanie ”na skróty”

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

2

background image

Tablice

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

3

Tablica

 –  jest  to  zbiór  elementów  typów  podstawowych, 

referencji lub innych tablic. 
Wszystkie elementy tablicy muszą mieć ten sam typ (wyjątek 

– polimorfizm)
Kroki niezbędne do utworzenia tablicy:

deklaracja
konstruowanie
inicjalizacja

background image

Tablice: deklaracja

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

4

Deklaracja  mówi  kompilatorowi  jaka  jest  nazwa  tablicy  i  typ 

elementów.

Przykłady:

int[] ints; 

// tablica typu podstawowego int

double[] dubs; 

// tablica typu podstawowego double

Dimension[] dims; 

// tablica typu referencyjnego (pakiet awt)

float[][] twoDee;    

// dwuwymiarowa tablica 

background image

Tablice: deklaracja c.d.

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

5

Używanie nawiasów kwadratowych:

przed nazwą tablicy

po nazwie tablicy

Przykłady:

Deklaracja metody (parametrem jest tablica wartości typu double):

mojaMetoda(double dubs[])
mojaMetoda(double[] dubs)

Deklaracja metody, która zwraca tablicę wartości typu double:

double[] innaMetoda();
double innaMetoda()[];

 

background image

Tablice c.d 

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

6

Pyt. Kiedy jest określany rozmiar tablicy?
Odp. W czasie utworzenia tablicy.

Przykład:

int[] ints;

 

// Deklaracja

 

ints = new int[25];

 

// Utworzenie w czasie wykonywania

Skutki:

można  określać  rozmiar  tablicy  w  czasie  wykonywania  przy  pomocy 

zmiennej:

int size = 1152 * 900; 
int[] raster; 
raster = new int[size];

background image

Tablice c.d.

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

7

Deklaracja i utworzenie (definicja) tablicy w jednej linii:

int[] ints = new int[25];

Inicjalizacja:

elementy tablicy  przyjmują wartości domyślne dla danego typu danych:

Tblica 4.1 Wartości domyślne zmiennych

background image

Deklaracja, definicja i inicjalizacja tablic

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

8

Wszystko w jednej linii:

float[] diameters = {1.1f, 2.2f, 3.3f, 4.4f, 5.5f};

rozmiar tablicy jest określany ilością elementów w nawiasach 

Inicjalizacja poprzez przypisanie wartości do każdego elementu:

long[] kwadraty; 
kwadraty = new long[6000]; 
for (int i = 0; i < 6000; i++) { 

kwadraty[i] = i * i;  

}

background image

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

9

Jeśli rozmiar tablicy może się zmieniać, to bezpieczniej jest zmienić linijkę 
nr 3 w programie:

short rozmiar;
rozmiar = 6000;
long[] kwadraty; 
kwadraty = new long[rozmiar]; 
for (int i = 0; i < 

kwadraty.length

; i++) { 

kwadraty[i] = i * i;  

}

Deklaracja, definicja i inicjalizacja tablic c.d.

background image

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

10

Można  tworzyć  tablice  o  kształcie  różnym 

od prostokąta

przypadku 

tablic 

wielowymiarowych 

rozmiar każdej „pod-tablicy” nie musi być 

jednakowy

Tablice: kilka uwag

background image

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

11

jest 

punktem 

wejścia 

dla 

każdej 

aplikacji w Javie

jest statyczna i publiczna

deklaracja:

public static void main(String[] args)

tablica 

args

 zawiera  argumenty,  które 

mogą  być  przekazane  przez  użytkownika  z 

wiersza poleceń

Metoda main()

background image

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

12

składowe  klas

 (member  variable)  –  są 

tworzone i unicestwiane wraz z obiektem

automatyczne

 (lokalne  w  metodach)  –  są 

tworzone  w  czasie  wejścia  do  metody, 

istnieją  przez  cały  czas  wykonania 

metody  i  dostępne  tylko  w  czasie 

wykonania  metody  (wyjątek  –  metody  klas 

wewnętrznych)

Wartości  domyślne  zmiennych  które  są 

składowymi klas są podane w tablicy 4.1.

Czas życia zmiennych

background image

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

13

składowe klas:

1.

class maZmienne { 

2.

int x = 20; 

3.

static int y = 30;

4.

...}

Inicjalizacja  zmiennych  nie  statycznych 

odbywa 

się 

tuż 

przed 

wywołaniem 

konstruktora danej klasy

Zmienne  statyczne  są  inicjalizowane  w 

czasie ładowania klasy 

Inicjalizacja zmiennych

background image

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

14

Zmienne 

automatycznie 

nie 

są 

inicalizowane  przez  system,  dlatego  do 

nich w sposób jawny muszą być przypisane 

wartości:

1. 

public int wrong() { 

2. 

int i; 

3.

  return i+5; 

4.

 }

metoda  nie  da  się  skompilować:  błąd  w 

linii  3  „

Variable  i  may  not  have  been 

initialized

”.

Inicjalizacja zmiennych c.d.

background image

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

15

public double fourthRoot(double d) { 

double result; 
if (d >= 0) 

{

result = Math.sqrt(Math.sqrt(d)); 

}

 

return result; 

}

wynik kompilacju:
bład  „

variable  result  may  not

 

have  been 

initialized

”.

 

Przykład: kod programu znajduje się w katalogu p1

Inicjalizacja zmiennych c.d.

background image

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

16

Możliwe rozwiązanie problemu:

public double fourthRoot(double d) { 
  double result = 0.0; 

// Inicjalizacja

 

if (d >= 0) { 

 

result = Math.sqrt(Math.sqrt(d)); 

  } 
  return result; 
}

Inicjalizacja zmiennych c.d.

background image

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

17

Do metody przekazywana jest kopia argumentów typów 

prostych:

public void zwieksz(int par) { 

par += 15; 

następnie wywołujemy metodę zwieksz():

int xx = 12345; 
zwieksz(xx); 
System.out.println(”teraz xx ma wartosc: ” + xx);

Pyt. Jaki będzie oczekiwany wynik?

Przekazywanie argumentów

background image

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

18

Przekazywany jest nie obiekt, tylko referencja
Zmiana  parametru  formalnego  powoduje  zmianę 

wartości argumentu wywołania

class Test { 

int a, b; 
Test(int i, int j) { 

a = i; 
b = j; 


void metoda(Test o) { 

o.a *= 2; o.b /= 2; 

}

Przekazywanie obiektów

background image

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

19

class WywolaniePrzezNazwe { 

public static void main(String args[]) { 

Test o = new Test(10, 20); 
System.out.println(” przed wywolaniem: ” 
+ o.a + ”  ” + o.b); 
o.metoda(o); 
System.out.println(” po wywolaniu: ” 

+ o.a + ” ”  + o.b); 

}

Przykład: kod programu znajduje się w katalogu p2.

Przekazywanie obiektów: przykład

background image

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

20

Problem
Jak przekazać zmienne typów podstawowych przez 

referencje?

Rozwiązanie
Utworzenie tablicy jednoelementowej i przekazanie 

jej w wywołaniu metody

Przykład:
program p3/Test.java

Referencje do zmiennych typów podstawowych

background image

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

21

Referencje do zmiennych typów podstawowych

public class Test {
  public static void main(String args[]) {
   int [] tab = { 1 };
   zmien(tab);
   System.out.println("tab ma wartosc " + tab[0]);
   zmien(tab);
   System.out.println("tab ma wartosc " + tab[0]);
  }
  public static void zmien(int [] wartosc) {
    wartosc[0]++;
 }
}

background image

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

22

Odśmiecacz pamięci

Działa jako oddzielny wątek

nie  można  stwierdzić  jak  często  jest 

uruchamiany

dobrym nawykiem jest przypisanie wartości 

null  do  zmiennych  typów  referencyjnych 

których już nie chcemy używać w programie

metody 

System.gc()

 i 

Runtime.gc()

„sugerują” 

wirtualnej 

maszynie 

Javy 

uruchomienie odśmiecacza pamięci 

background image

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

23

Obliczanie ”na skróty”

Dotyczy  operatorów  logicznych 

&&

 i 

|| 

wykonujących  logiczne  AND  i  OR  na 

wartościach typu

 boolean

Dla operacji 

AND

, jeśli jeden z operandów 

ma wartość false, wynik również ma wartość 

false  niezależnie  od  wartości  drugiego 

operanda

Dla  operacji 

OR

,  jeśli  jeden  z  operandów 

ma wartość true, wynik również ma wartość 

true  niezależnie  od  wartości  drugiego 

operanda

background image

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

24

Obliczanie ”na skróty” c.d.

Inaczej  mówiąc  dla  dowolnej 

wartości 

X

 typu boolean:

false 

AND

 

X

 = false

true 

OR

 

X

 = true

background image

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

25

Obliczanie ”na skróty” : przykłady

if 

(s != null)

 {

  if 

(s.length() > 20)

 {

    System.out.println(s);
  }
}

lub ten sam kod zapisany inaczej:

if 

(

(s != null)

 

&&

 

(s.length() > 20)

)

 {

    System.out.println(s);
  }
}

background image

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

26

Obliczanie ”na skróty” - efekt uboczny

Obliczanie  tylko  części  wyrażenia  może 

powodować efekt uboczny.

Przykłady: programy p4/logika.java

p4/logika2.java

background image

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

27

Operator przypisania

Nadaje zmiennej lub wyrażeniu nową wartość.
Forma skrócona:

x 

op=

 y oznacza x 

=

 x 

op

 y

gdzie 

op

 oznacza  jedną  z  operacji 

+,  -, 

*, /, %, <<, >>, >>>, &, |, ^

Różnice:

jeśli  wyrażenie   powoduje  efekt  uboczny, 

to objawia on się jednokrotnie

operator  przypisania  zawiera  niejawny 

operator rzutowania

background image

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

28

Operator przypisania c.d.

byte x = 2;
x += 3;

jest równoznaczne z :

byte x = 2;
x = (byte) (x + 3);

rzutowanie  odbywa  się  w  sposób    niejawny, 

inaczej wynik będzie typu int

background image

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

29

Przykładowy test