inicjalizacja i sprz tanie
Download
Skip this Video
Download Presentation
Inicjalizacja i sprzątanie

Loading in 2 Seconds...

play fullscreen
1 / 23

Inicjalizacja i sprzątanie - PowerPoint PPT Presentation


  • 114 Views
  • Uploaded on

Inicjalizacja i sprzątanie. Wykonał: Marcin Ganczarek 140544. Plan. Gwarantowana inicjalizacja przez konstruktor Przeciążanie metod Sprzątanie: finalizacja i odśmiecanie pamięci Inicjalizacja składowych Inicjalizacja tablic. Plan. Gwarantowana inicjalizacja przez konstruktor

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'Inicjalizacja i sprzątanie' - glain


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
inicjalizacja i sprz tanie

Inicjalizacja i sprzątanie

Wykonał:

Marcin Ganczarek 140544

slide2
Plan
  • Gwarantowana inicjalizacja przez konstruktor
  • Przeciążanie metod
  • Sprzątanie: finalizacja i odśmiecanie pamięci
  • Inicjalizacja składowych
  • Inicjalizacja tablic
slide3
Plan
  • Gwarantowana inicjalizacja przez konstruktor
  • Przeciążanie metod
  • Sprzątanie: finalizacja i odśmiecanie pamięci
  • Inicjalizacja składowych
  • Inicjalizacja tablic
gwarantowana inicjalizacja przez konstruktor
Gwarantowana inicjalizacja przez konstruktor
  • W Javie pojęcia tworzenia i inicjalizacji obiektu połączono
  • Do tworzenia i inicjalizacji obiektu służy specjalna metoda nazwana konstruktorem
  • Konstruktor nie zwraca żadnej wartości i nie można tego zmienić
  • Jeżeli napiszemy klasę bez konstruktora to kompilator automatycznie utworzy konstruktor domyślny za nas
  • Konstruktor domyślny to konstruktor nie pobierający żadnych argumentów
gwarantowana inicjalizacja przez konstruktor1
1. Konstruktor bez argumentów

class Ala

{

Ala()

{

System.out.println(”Ala ma kota”);

}

}

2. Konstruktor z argumentami

class Ola

{

Ola (int i)

{

System.out.println(”Ola ma” + i + ”kotów”);

}

}

Gwarantowana inicjalizacja przez konstruktor

Proste przykłady klas z konstruktorem

slide6
Plan
  • Gwarantowana inicjalizacja przez konstruktor
  • Przeciążanie metod
  • Sprzątanie: finalizacja i odśmiecanie pamięci
  • Inicjalizacja składowych
  • Inicjalizacja tablic
przeci anie metod
Przeciążanie metod

class Drzewo {

int wysokość;

Drzewo() {

System.out.println(”Zasadzenie ziarna”);

wysokość = 0;

}

Drzewo(int i) {

System.out.println(”Stworzenie drzewa o wysokości ” + i + ”metrów”);

wysokość = i;

}

void info() {

System.out.println(”Wysokość drzewa to ” + wysokość + ”metrów”);

}

void info(String s) {

System.out.println(s + ”: Wysokość drzewa to ” + wysokość + ”metrów”);

}

}

Przykład klasy z przeciążonymi metodami

przeci anie metod1
Przeciążanie metod
  • Każda przeciążona metoda musi posiadać unikatową listę typów argumentów
  • Nie można użyć typu wartości zwracanej do odróżnienia metod przeciążonych
  • Różnica w kolejności argumentów jest wystarczająca, aby odróżnić dwie metody

class Student {

Student(String s, int i) {

System.out.println(s + ” otrzymał ocenę ” + i);

}

Student(int i, String s) {

System.out.println(i + ” to ocena ” + s);

}

}

przeci anie metod2
Przeciążanie metod

Słowo kluczowe this – zwraca odwołanie do obiektu, na rzecz którego metoda została wywołana. Może być stosowane tylko wewnątrz metody

  • Wywołując metodę klasy z wnętrza innej metody tej klasy, nie ma potrzeby używania this
  • this jest wykorzystywane tylko w przypadkach, kiedy trzeba jawnie użyć odwołania do aktualnego obiektu
  • Słowo kluczowe this umożliwia nam wywoływać jeden konstruktor z drugiego
przeci anie metod3
Przeciążanie metod
  • Wywołanie konstruktora za pomocą this musi być pierwszą rzeczą, którą robimy
  • Stosując słowo kluczowe this można wywołać tylko jeden konstruktor
  • Za pomocą this nie można wywołać konstruktora z wnętrza jakiejkolwiek metody nie będącej konstruktorem
przeci anie metod4
Przeciążanie metod

Przykład wywoływania konstruktora z konstruktora

class pies {

pies(int i) {

System.out.println(”Mam ” + i + ” psów”);

}

pies(String s) {

this(i);

System.out.println(s + ” ma psa”);

}

pies(String s, int i) {

this(s);

System.out.println(s + ” ma ” + i + ” psów”);

}

}

slide12
Plan
  • Gwarantowana inicjalizacja przez konstruktor
  • Przeciążanie metod
  • Sprzątanie: finalizacja i odśmiecanie pamięci
  • Inicjalizacja składowych
  • Inicjalizacja tablic
sprz tanie finalizacja i od miecanie pami ci
Sprzątanie: finalizacja i odśmiecanie pamięci

Różnice między Java a C++

  • Java nie pozwala na tworzenie obiektów lokalnych
  • Java nie posiada destruktorów
  • W C++ obiekty zawsze są niszczone, podczas gdy w Javie obiekty nie zawsze ulegają odśmiecaniu

Podsumowując

W Javie:

  • Obiekty mogą nie zostać poddane odśmiecaniu
  • Odśmiecanie pamięci to nie destrukcja
  • Odśmiecanie dotyczy wyłącznie pamięci
sprz tanie finalizacja i od miecanie pami ci1
Sprzątanie: finalizacja i odśmiecanie pamięci
  • Do zwalniania pamięci w Javie stosuje się metody finalize() i odśmiecacz pamięci
  • Metodę finalize() definiuje się we własnej klasie i wykorzystuje się ją przeważnie w przypadkach, w których obiekt może alokować pamięć inaczej niż poprzez stworzenie obiektu
  • Metodę finalize() stosuje się także do weryfikacji warunku zakończenia obiektu
  • Finalizacja i odśmiecanie nie są zagwarantowane
sprz tanie finalizacja i od miecanie pami ci2
Sprzątanie: finalizacja i odśmiecanie pamięci

Różne sposoby pracy różnych odśmiecaczy

  • Zliczanie referencji
  • Odśmiecacze kopiujące
  • Adaptacyjny model odśmiecania

”Przyśpieszacze” JVM

  • Ładowacz klas (ang. loader)
  • Kompilator Just-In-Time (JIT)
  • Technologie Java HotSpot
slide16
Plan
  • Gwarantowana inicjalizacja przez konstruktor
  • Przeciążanie metod
  • Sprzątanie: finalizacja i odśmiecanie pamięci
  • Inicjalizacja składowych
  • Inicjalizacja tablic
inicjalizacja sk adowych
Inicjalizacja składowych
  • W Javie w porównaniu do C++ pozwala na przypisanie wartości w miejscu definicji zmiennej wewnątrz klasy
  • Można wywołać metodę żeby była wartością początkową pod warunkiem, że metoda taka może posiadać argumenty , które już zostały zainicjalizowanymi składowymi klasy

Tak można napisać

class A {

int i = f();

int j = g(i);

// …

}

Tak nie można napisać

class A {

int j = g(i);

int i = f();

// …

}

inicjalizacja sk adowych1
Inicjalizacja składowych
  • Do przeprowadzenia inicjalizacji można wykorzystać konstruktor
  • Kolejność inicjalizacji wewnątrz klasy jest wyznaczona przez kolejność definiowania zmiennych w danej klasie
  • Jeżeli zmienna typu podstawowego (boolean, char, byte, short, int, long, float, double, void) jest składową klasy to ma zapewnioną domyślną wartość początkową
  • Zmienne definiowane jako static mają taką samą inicjalizacje jak w przypadku zmiennych nie będących statycznymi. Inicjalizacja statyczna występuje tylko raz wtedy , gdy jest potrzebna
slide19
Plan
  • Gwarantowana inicjalizacja przez konstruktor
  • Przeciążanie metod
  • Sprzątanie: finalizacja i odśmiecanie pamięci
  • Inicjalizacja składowych
  • Inicjalizacja tablic
inicjalizacja tablic
Inicjalizacja tablic

W Javie tablice można zdefiniować w następujący sposób

int[] a1; albo int a1[]

  • Tablica jest ciągiem obiektów albo zmiennych typu podstawowego, wszystkich tego samego typu, zebranych pod wspólną nazwą
  • Przy definiowaniu tablicy nie można ustalić jej wielkości. Aby stworzyć obszar dla tablicy trzeba użyć wyrażenia inicjalizującego
  • Tablice posiadają własną składową lenght mówiącą ile jest elementów w tablicy

Tablice można zainicjalizować w następujący sposób

int[] a1 = {1, 2, 3}; albo int[] a1 = new int[20]

inicjalizacja tablic1
Inicjalizacja tablic

Tablica obiektów

Przy tablicach obiektów po wpisaniu komendy

Obiekty[] a = new Obiekty[rand.nextInt(20)]

W celu utworzenia tablicy, inicjalizacja nie jest kompletna, gdyż

otrzymamy tylko tablice referencji, dopóki same referencje nie zostaną

zainicjalizowane przez stworzenie nowych obiektów typu Obiekty

a[i] = new Obiekty(rand.nextInt(4))

inicjalizacja tablic2
Inicjalizacja tablic

Tworzenie tablic wielowymiarowych

int[][] a1 = {

{1, 2, 3, },

{4, 5, 6, },

};

int[][][] a2 = new int[2][2][4];

Tworzenie tablicy wielowymiarowej obiektów

Integer[][] a3 ={

{ new Integer(1), new Integer(2), },

{ new Integer(3), new Integer(4), },

{ new Integer(5), new Integer(6), },

};