public - może być używana w kodzie poza klasą, jedna klasa ModyfikatorKlasy może być kombinacją wyrażeń:

Podobne dokumenty
Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków

Java podstawy jęyka. Wykład 2. Klasy abstrakcyjne, Interfejsy, Klasy wewnętrzne, Anonimowe klasy wewnętrzne.

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static),

Dokumentacja do API Javy.

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016

Programowanie obiektowe

Wykład 7: Pakiety i Interfejsy

Interfejsy. Programowanie obiektowe. Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej

Programowanie obiektowe

Wykład 8: Obsługa Wyjątków

Marcin Luckner Politechnika Warszawska Wydział Matematyki i Nauk Informacyjnych

Dziedziczenie. dr Jarosław Skaruz

Języki i metody programowania Java INF302W Wykład 3 (część 1)

Kurs WWW. Paweł Rajba.

Zad.30. Czy można utworzyć klasę, która implementuje oba interfejsy?

Klasy. dr Anna Łazińska, WMiI UŁ Podstawy języka Java 1 / 13

Język C++ Programowanie obiektowe

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Throwable. Wyjatek_1(int x_) { x = x_; } int podaj_x()

WYJĄTKI. Jest ona jednak czasochłonna i prowadzi do duŝego zapotrzebowania na zasoby systemu.

Interfejsy i klasy wewnętrzne

Enkapsulacja, dziedziczenie, polimorfizm

Programowanie obiektowe

Java niezbędnik programisty spotkanie nr 3. Modyfikatory, jednostki kompilacji, tworzenie/inicjalizacja, odśmiecanie/ finalizacja...

Kurs programowania. Wykład 3. Wojciech Macyna. 22 marca 2019

Wyjątki. Streszczenie Celem wykładu jest omówienie tematyki wyjątków w Javie. Czas wykładu 45 minut.

Polimorfizm. dr Jarosław Skaruz

Programowanie obiektowe

Materiały do zajęć VII

Multimedia JAVA. Historia

Aplikacje Internetowe. Najprostsza aplikacja. Komponenty Javy. Podstawy języka Java

Języki i metody programowania Java. Wykład 2 (część 2)

Java: kilka brakujących szczegółów i uniwersalna nadklasa Object

KLASY, INTERFEJSY, ITP

Definicje klas i obiektów. Tomasz Borzyszkowski

Definiowanie własnych klas

Programowanie obiektowe - 1.

Programowanie w Internecie. Java

Wykład 6: Dziedziczenie

1 Atrybuty i metody klasowe

Wyjątki Monika Wrzosek (IM UG) Programowanie obiektowe 180 / 196

Dawid Gierszewski Adam Hanasko

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Pakiety i interfejsy. Tomasz Borzyszkowski

Wykład 4: Klasy i Metody

Programowanie obiektowe

Klasy cd. Struktury Interfejsy Wyjątki

Klasy abstrakcyjne, interfejsy i polimorfizm

Wykład 2: Podstawy Języka

Programowanie w Javie - wykład 3

Wykład 2 Wybrane konstrukcje obiektowych języków programowania (1)

Język JAVA podstawy. Wykład 4, część 1. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Wywoływanie metod zdalnych

PHP 5 język obiektowy

Dziedziczenie. Tomasz Borzyszkowski

Technologie i usługi internetowe cz. 2

Platformy Programistyczne Wykład z Javy dla zaawansowanych

Informatyka I. Dziedziczenie. Nadpisanie metod. Klasy abstrakcyjne. Wskaźnik this. Metody i pola statyczne. dr inż. Andrzej Czerepicki

Aplikacje w środowisku Java

1. Co można powiedzieć o poniższym kodzie? public interface I { void m1() {}; static public void m2() {}; void abstract m3();

Podstawy Języka Java

Java. Wykład. Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?

PARADYGMATY PROGRAMOWANIA Wykład 4

Java SE Laboratorium nr 4. Temat: Obsługa wyjątków i zdarzeń

Kurs programowania. Wykład 13. Wojciech Macyna. 14 czerwiec 2017

Programowanie obiektowe Wykład 6. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/14

Zaawansowane programowanie w języku C++ Klasy w C++

Java Język programowania

Programowanie obiektowe

Programowanie obiektowe

Programowanie urządzeń mobilnych. dr inż. Andrzej Grosser na podstawie wykładu dr inż. Juliusza Mikody

.NET Klasy, obiekty. ciąg dalszy

Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego. Iwona Kochaoska

Klasy abstrakcyjne i interfejsy

Programowanie obiektowe

Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Obsługa błędów za pomocą wyjątków. Paweł Motofa (140746)

Programowanie obiektowe

Programowanie obiektowe

Obiektowe programowanie rozproszone Java RMI. Krzysztof Banaś Systemy rozproszone 1

Klasa jest nowym typem danych zdefiniowanym przez użytkownika. Najprostsza klasa jest po prostu strukturą, np

Języki i techniki programowania Ćwiczenia 2

Podstawy programowania III

Wywoływanie metod zdalnych

Remote Method Invocation 17 listopada 2010

Programowanie w Javie wykład 7 Klasy c.d. (przeciążanie metod, polimorfizm) Metody i klasy abstrakcyjne Bloki inicjalizacyjne

Informacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost;

Wykład 5: Więcej o Klasach i Metodach

Podstawy programowania obiektowego

Pola i metody statyczne. Klasy zawierające pola i metody statyczne

Remote Method Invocation 17 listopada Dariusz Wawrzyniak (IIPP) 1

Rozdział 4 KLASY, OBIEKTY, METODY

Podejście obiektowe do budowy systemów rozproszonych

Aplikacje w środowisku Java

Definiowanie własnych klas

Transkrypt:

Klasy Metody [ModyfikatorMetody] TypZwrotny Nazwa (Typ arg1, ) { // implementacja metody ModyfikatorMetody może być kombinacją wyrażeń: modyfikator widzialności public dostępna dla metod spoza klasy protected dostępna w klasach z pakietu i wszystkich podklasach <puste> dostępna w klasach z pakietu, w którym występuje private dostępna tylko dla metod z tej samej klasy final metoda nie może zostać przesłonięta w podklasie static wspólna dla wszystkich wystąpień obiektu synchronized blokuje dostęp do obiektu na czas wykonywania native zaimplementowana w innym języku abstract metoda bez implementacji 3 Klasy [ModyfikatorKlasy] class NazwaKlasy [extends Nadklasa] [implements ListaInterfejsów] { // Lista metod i pól ModyfikatorKlasy może być kombinacją wyrażeń: abstract klasa zawiera metody abstrakcyjne final nie może posiadać podklas public może być używana w kodzie poza klasą, jedna klasa publiczna w pliku (nazwa pliku = nazwa klasy) private dostępna tylko w obrębie pliku <puste> dostęp w ramach pakietu, w którym występuje Pola [ModyfikatorPola] Typ Nazwa [ = wartość]; ModyfikatorPola może być kombinacją wyrażeń: modyfikator widzialności public dostępna dla metod spoza klasy protected dostępna w klasach z pakietu i wszystkich podklasach <puste> dostępna w klasach z pakietu, w którym występuje private dostępna tylko dla metod z tej samej klasy static wspólne dla wszystkich wystąpień obiektu final stała, musi być zainicjalizowana 2 4 1

Składowe klasy Nazwa klasy final static wspdenominacji=10000; String nazwisko; float placa=0; Stała Atrybuty klasy Pracownik(String nazwisko){ this.nazwisko=nazwisko; Konstruktor float podwyzka(float kwota){ return placa+=kwota; Metoda Zwrócenie wyniku Typ zwrotny Argument wejściowy Tworzenie obiektów, aktywowanie metod Obiekty tworzone są dynamicznie, za pomocą operatora new Obiekty są dostępne przez referencje Obiekty są niszczone przez garbage collection, gdy nie ma do nich referencji Odwołanie do składowych obiektu odbywa się przez operator kropki (w przypadku składowych statycznych zamiast nazwy obiektu można podać nazwę klasy) { Pracownik jezierski = new Pracownik("Jezierski"); Pracownik koszlajda= new Pracownik("Koszlajda"); jezierski.podwyzka(1000); jezierski=null; //obiekt zostanie zniszczony //obiekt koszlajda zostanie zniszczony 7 Konstruktor Konstruktor metoda służącą do inicjowania obiektów klasy Jego nazwa musi pokrywać się z nazwą klasy Konstruktor nie może posiadać typu zwrotnego Konstruktory (i inne metody) mogą być przeciążane Przy braku definicji konstruktora, kompilator dostarcza domyślny, pusty konstruktor bezargumentowy Niszczenie obiektu Nie ma w Javie destruktora Obiekt jest niszczony przez mechanizm garbage collection Przed zniszczeniem obiektu wywoływana jest metoda finalize() Przekazywanie parametrów do metod Zmienne typów prostych przekazywane są przez wartość Obiekty są przekazywane przez referencję można je zmieniać poprzez przekazaną referencję referencja jest przekazywana przez wartość class X{ static void brakefektow(pracownik p){ p = new Pracownik("Koszlajda"); Pracownik jezierski = new Pracownik("Jezierski"); X.brakEfektow(jezierski); System.out.println(jezierski.nazwisko); // >"Jezierski" 6 8 5

Hermetyzacja private String nazwisko; private float placa=0; public Pracownik(String nazwisko){ this.nazwisko=nazwisko; public float podwyzka(float kwota){ return placa+=kwota; Pracownik p = new Pracownik("Kowalski"); p.nazwisko="nowak"; nazwisko has private access in Pracownik Stałe private final Osoba matka; private final Osoba ojciec; public static final int PI=3.14; public Pracownik(Osoba matka, Osoba ojciec){ this.matka=matka; this.ojciec=ojciec; 11 Składowe statyczne Współdzielone przez wszystkie obiekty danej klasy Statyczne metody aktywowane na rzecz klasy private static int liczbapracownikow; public Pracownik(String nazwisko){ this.nazwisko=nazwisko; liczbapracownikow++; public static int ilupracownikow(){ return liczbapracownikow; static{ //blok wykonywany jednorazowo przy adowaniu klasy liczbapracownikow=0; Pracownik p1=new Pracownik("Kowalski"); System.out.println(Pracownik.iluPracownikow()); //p1.ilupracownikow() Przeciążanie metod public Pracownik(String nazwisko){ this.nazwisko=nazwisko; public Pracownik(String nazwisko, float placa){ this(nazwisko); this.placa=placa; public Pracownik(String nazwisko, int wiek){ this(nazwisko); this.wiek=wiek; public float podwyzka(float kwota){return placa+=kwota; public void podwyzka(float kwota){placa+=kwota; podwyzka(float) is already defined in Pracownik Pracownik p1=new Pracownik("Kowalski"); Pracownik p2=new Pracownik("Kowalski", 25L); Pracownik p3=new Pracownik("Kowalski", 1000F); 10 12 9

Grupowanie klas w pakiety 13 Informacja o przynależności do pakietu w pierwszej linii jednostki kompilacji (przy braku pakiet domyślny) package myerp.kadry; class Pracownik { Lokalizacja pliku.class w drzewie katalogów musi odpowiadać zadeklarowanej nazwie pakietu java lang util Date Vector merp ksiegowosc kadry Pracownik W praktyce, pakiety klas są kompresowane do plików ZIP lub JAR Dziedziczenie 15 protected String nazwisko; protected float placa=0; Nazwa nowej klasy (potomnej) Nazwa nadklasy (macierzystej, bazowej) public class Dydaktyk extends Pracownik { protected int pensum=210; public Dydaktyk (String nazwisko){ super(nazwisko); public float stawkagodzinowa(){ return placa/pensum; Importowanie klas Odwołanie do klasy w pakiecie wymaga podania ścieżki: myerp.kadry.pracownik jezierski; Dzięki zastosowaniu polecenia import, możliwe jest odwoływanie się przez samą nazwę klasy (nie wymagane dla java.lang): import myerp.kadry.pracownik; import myerp.kadry.*; W celu załadowania wskazywanej klasy, JVM przeszukuje wszystkie lokalizacje zapisane w zmiennej środowiskowej CLASSPATH; jeżeli CLASSPATH odwołuje się do pliku ZIP/JAR, wtedy plik ten jest automatycznie rozpakowywany w pamięci operacyjnej CLASSPATH=.:/java/lib/classes12.zip:/home/jj/myJAR.jar Hermetyzacja suplement private klasa pakiet klasa potomna w pakiecie klasa potomna poza pakietem świat protected domyślny public 14 16

Nadpisanie i odsłanianie public class Dydaktyk extends Pracownik { protected int pensum=210; public Dydaktyk (String nazwisko){ super(nazwisko); Nadpisanie (przysłonięcie) definicji metody public float podwyzka(float stawkagodzinowa) { return super.podwyzka (pensum*stawkagodzinowa); Odsłonięcie przysłoniętej metody Składowe abstrakcyjne Deklaracja własności, szkieletów Klasy z składowymi abstrakcyjnymi nie mogą posiadać wystąpień Wymagają implementacji w klasach potomnych public abstract class Instrument { public String nazwa(){ return "instrument"; public abstract void strojenie(); public abstract void graj(nutka nutka); public class Fortepian extends Instrument{ public String nazwa(){ return "fortepian"; public void strojenie(){ ; public void graj(nutka nutka){ // la la 17 19 Referencje this i super W metodach klasy można używać referencji this i super this jest referencją do bieżącego obiektu super udostępnia przesłonięte składowe nadklasy Z konstruktora klasy można wywołać inny konstruktor tej klasy (this()) lub konstruktor nadklasy (super()), w pierwszej instrukcji ciała konstruktora Interfejsy Interfejs jest w pełni abstrakcyjną klasą Wszystkie jego metody muszą być abstrakcyjne (domyślnie public abstract) Nie może posiadać zmiennych wystąpień (wszystkie pola są domyślnie public static final) Interfejsy kompensują brak dziedziczenia wielobazowego [public] interface NazwaInterfejsu [extends ListaInterfejsów] { // Lista metod i pól statycznych 18 20

Tablice Tablice są obiektami tworzone dynamicznie (new) zmienne tablicowe są referencjami Rozmiar tablic specyfikowany przy tworzeniu Indeksowanie tablicy od zera Elementy są automatycznie inicjalizowane (dla liczb: zerami, dla obiektów: referencjami pustymi null) Odwołanie się poprzez niewłaściwy indeks generuje wyjątek Rozmiar tablicy dostępny jako pole o nazwie length Tablice wielowymiarowe jako tablice tablic Klasy opakowujące (ang. wrapper) Dla każdego typu prostego w Javie istnieje odpowiadająca mu klasa "wrapper" (Integer, Float, ) Klasy "wrapper" zastępują zmienne proste w miejscach gdzie spodziewane są obiekty Zawierają metody zwracające proste wartości (intvalue(), floatvalue(), ) Zawierają przydatne metody konwersji typów np. Integer.parseInt(String) String > int Integer.toString(int) int > String 21 23 Korzystanie z tablic int [] tab = new int[10]; for (int i=0; i < tab.length; i++) tab[i] = i; int [][] chessboard; chessboard = new int[8][8]; int [] primes = {1,2,3,5,5+2; String [] verbs = {"go", "sleep"; Hierarchia dziedziczenia Każda klasa może posiadać jedną nadklasę Korzeniem hierarchii dziedziczenia jest klasa Object Gdy dla danej klasy nie zostanie podana jej nadklasa, domyślnie przyjmowana jest klasa Object Konwersja typów (jawna lub niejawna) możliwa jest w ramach gałęzi dziedziczenia Cat filemon = new Cat(); Animal a = filemon; // filemon = a; // error filemon = (Cat) a; // Animal Cat 22 24

Zastępowanie referencji do obiektów Obiekt podklasy może być użyty tam, gdzie spodziewany jest obiekt nadklasy Prawdziwy typ obiektu może być określony przy użyciu operatora instanceof Powyższe stwierdzenia odnoszą się również do interfejsów implementowanych przez klasę obiektu public void rename (Animal a) { if (a instanceof Cat) { ((Cat) a).catmethod(); Animal Cat Klasy zagnieżdżone Klasy można definiować jako składowe innych klas statyczne klasy zagnieżdżone mają dostęp jedynie do składowych statycznych klasy otaczającej służą głównie do wprowadzenia dodatkowego poziomu grupowania klas w biblioteki (oprócz pakietów) klasy wewnętrzne ich obiekty występują wewnątrz obiektów klasy otaczającej i mają swobodę dostępu do ich składowych class EnclosingClass{... static class AStaticNestedClass { class InnerClass { Klasy zagnieżdżone można definiować również w metodach lub blokach kodu Statyczna klasa zagnieżdżona Klasa wewnętrzna 25 27 Polimorfizm Polega na dynamicznym (późnym) wiązaniu metod W przypadku wywołania metody obiektu podklasy poprzez referencję typu nadklasy, wywoływana jest metoda z jego klasy (na podstawie jego faktycznego typu) Animal [] zoo = { new Cat(), new Fish(), ; for (int i=0; i < zoo.length; i++) zoo[i].feed(); Animal Cat Fish Anonimowe klasy wewnętrzne Przydatne do definiowania klas jednorazowego użytku np. do implementacji obiektów nasłuchujących zdarzeń generowanych przez GUI class ButtonListener implements ActionListener { public void actionperformed(actionevent e) { private ButtonListener bl = new ButtonListener(); //lub ActionListener bl = new ActionListener() { public void actionperformed(actionevent e) { 26 28

Wyjątki Stanowią wydajny i przejrzysty mechanizm obsługi błędów Przykłady (podklasy klasy Throwable) błędy (podklasy Error) np.: OutOfMemoryError,InternalError wyjątki kontrolowane (podklasy Exception), np.: MalformedURLException, IOException wyjątki czasu wykonania (podklasy RuntimeException), np.: ArrayIndexOutOfBoundsException, ArithmeticException Wszystkie wyjątki kontrolowane (poza wyjątkami czasu wykonania) muszą być obsłużone lub wymienione w klauzuli throws w deklaracji metody public void wstawdotabeli() throws SQLException { Obsługa zdarzeń wyjątkowych przykład public class SayHello { public static void main(string[] args) { int x=10, y=0; int wynik; System.out.println("x/y="); try { wynik = x/y; System.out.println(wynik); catch (ArithmeticException e) {System.out.println("Blad arytmetyczny!"); System.out.println(e); Rodzaj błędu Komunikat błędu 29 31 Przechwytywanie i obsługa wyjątków try { // instrukcje, w których może pojawić się wyjątek catch (ExceptionClass1 e) { catch (ExceptionClass2 e) { finally { // wykonuje się zawsze (!), sekcja opcjonalna Wywoływanie wyjątków Wyjątek można wywołać jawnie throw new IOException(); Metody, które mogą zgłaszać wyjątki, muszą zawierać informację o tym w deklaracji public void method1() throws IOException { // 30 32

Przykład definicji wyjątku użytkownika public class TestException extends Exception { public TestException() { ; public TestException (Object o, String method, Exception e) { this(e.getclass() + " in <" + o.getclass() + "> ( " + method + ") :: " + e.getmessage()); e.printstacktrace(); public TestException(String msg) { super(msg); 33