Techniki Zaawansowane
8 godz. 35 min · Java · Full-stack i Programowanie
Rafał SolarskiW poczatkowych lekcjach przyjrzymy sie pokladowi, na jakim bedziemy uruchamiali nasze programy. Wykorzystamy VisualVM do podgladania parametrów JVM. Zobaczymy równiez jakie zasoby sa tam dostepne oraz dowiesz sie jak monitorowac to, czy dobrze z nich korzystamy. Opowiemy Ci tez miedzy innymi o tym, jak zrobic heap i thread dump, oraz jak wlaczyc logi GC.
Kolejne lekcje kursu zostaly poswiecone wyrazeniom regularnym. Wyrazenia regularne mozemy wykorzystac nie tylko do walidacji danych wprowadzania przez uzytkownika, ale równiez do dzielenia tekstu oraz wyluskiwania wystapien wzorców w duzym tekscie. W tym rozdziale dowiemy sie miedzy innymi tego, jak mozemy wykorzystac ten potencjal z poziomu Javy.
Dzieki typom generycznym jestesmy w stanie osiagnac bezpieczenstwo typów w trakcie kompilacji przy zachowaniu elastycznosci pisanego kodu. W nastepnym rozdziale kursu przyjrzymy sie temu, jak mozemy je wykorzystac, oraz w jaki sposób czasami nalezy z tego bezpieczenstwa zrezygnowac.
Interfejsy funkcyjne to sposób na przeniesienie odrobiny swiata programowania funkcyjnego do Javy. Gdy polaczymy je z wyrazeniami lambda oraz API strumieni pozwola nam pisac te sama logike w duzo bardziej przejrzysty sposób.
Kolekcje, czyli listy, mapy, zbiory i kolejki to jedne z najczesciej wykorzystywanych klas w codziennej pracy. To jak dobrze poznamy ich mozliwosci ma ogromny wplyw na to, w jaki sposób bedziemy podchodzili do rozwiazywania wyzwan na naszej drodze.
System plików to zasób bez którego ciezko sobie poradzic. Pozwalaja nam na dostarczanie konfiguracji, danych wejsciowych i wyjsciowych, a przez to równiez integrowanie ze soba calych systemów.W tym rozdziale nauczymy sie korzystac z tych dobrodziejstw w bezpieczny sposób wykorzystujac m.in. IO Streams.
Trzymanie daty w String to niekoniecznie najwygodniejszy sposób. Juz od pewnego czasu Java dysponuje bardzo wygodnym Date&Time API - zobaczymy, co mozemy w nim znalezc.
Wielowatkowosc nie jest prosta... i dlugo tak jeszcze pozostanie. Nawet jesli korzystamy z frameworków, które próbuja ja przed nami ukryc, to ciagle musimy byc swiadomi problemów jakie sie z nia wiaza. W tym rozdziale poznamy glówne problemy na jakie mozna natrafic programujac wielowatkowo w Javie. Poznamy równiez klasy, które zdecydowanie pomoga nam zapanowac nad ta zlozonoscia.
JDBC to najbardziej podstawowy sposób laczenia sie z baza SQL z poziomu Javy. W wielu systemach/aplikacjach stosuje sie rozwiazania ORM takie jak JPA/Hibernate. Mimo wszystko warto wiedziec jak to pod spodem dziala oraz umiec poradzic sobie w aplikacjach, gdzie wybrano bardziej "lekkie" podejscie niz Hibernate.
Na koniec kursu wykorzystamy zdobyta wiedze, aby stworzyc prosta aplikacje pozwalajaca na przechowywanie danych o wydatkach. Po stworzeniu coreu aplikacji, mozesz spróbowac uzupelnic go za pomoca GUI.
Ten kurs stworzony zostal przede wszystkim z mysla o osobach, które juz poznaly podstawy jezyka, takie jak zmienne, mechanizmy kontroli wykonania, klasy, typy generyczne.Jezeli chcesz poczuc sie swobodnie nie tylko jesli chodzi o mechanizmy jezyka, ale równiez pod wzgledem znajomosci standardowej biblioteki Javy - to kurs w sam raz dla Ciebie. Materialy beda przydatne dla studentów, którzy znaja juz podstawowa skladnie Javy; programistów Javy chcacych poszerzyc lub uporzadkowac swoja wiedze; programistów innych jezyków, którzy chca poznac inny stack technologiczny.
Cześć w tej lekcji opowiem ci o tak zwanych raw types w typach
generycznych i typy generyczne w javie pozwalają pisać nasz kod
w elastyczny i bezpieczny sposób z czego wynika to bezpieczeństwo no to
bezpieczeństwo wynika z tego że już na etapie kompilacji wiemy
że jeżeli spróbujemy wrzucić jakiegoś integera do listy
który powinien zawierać typy double to jest coś nie tak i kompilator
nam to powie możemy z tego bezpieczeństwa jednak zrezygnować możemy
stworzyć listę która nie posiada typu generycznego no to czyli
jest to java util list ale nie ma wyspecyfikowanego
typu jest to taki dziwoląg możemy to traktować jako listę
która zawiera objecty jednak jest kilka takich dodatkowych
niuansów związanych z taką listą zaznaczam że jeżeli nie musisz
nie używaj raw typów są mniej bezpieczne i mogą
sprawić że będziesz miał kilka problemów w runtime tutaj stworzyłem
listę a dokładnie array list w której po prostu tutaj nie wyspecyfikowałem
jaki to jest typ tak jak sobie zajrzymy do deklaracji klasy
arraylist to widzimy że powinna ona przyjmować typ generyczny e
który jest typem elementów które
mają być wewnątrz przechowywane jednak ja pominąłem ten
typ i w ten sposób utworzyłem coś to się nazywa właśnie raw type zobaczymy
jakie są właściwości takiego wrappera do takiej
listy możemy dodawać obiekty wtedy te
obiekty powinny być typu object a tak czyli jeżeli dodajemy
powiedzmy string który jest pod spodem również jest objectem
tak to nie ma problemu możemy też wyciągać obiekty czyli
na przykład wywoływać metody które przyjmują coś ale
zwracają obiekty właśnie tego typu e czyli w tym momencie tego typu
który nie jest wyspecyfikowany czyli właśnie tego row type'u
i wtedy taki zwracany obiekt jest też klasy object
tutaj możemy to sobie sprawdzić jest to po prostu object oczywiście
w runtime to będzie string tak ale sygnatura metody
get tutaj sprawia przy założeniu że nie
wyspecyfikowaliśmy dokładnego typu generycznego zakłada że to jest object
i teraz po co w ogóle są te raw type no tak
jak mówiłem do zachowywania kompatybilności wstecznej ale również pozwalają
one w pewien sposób hakować typy generyczne dlaczego
właśnie teraz ci to zaprezentuje otworzyłem teraz zmienną
typu list of string i przypisałem do niej tą
poprzednio utworzoną listę która ma route'a tak i
teraz za to jest legalne to się kompiluje mimo
że wcale tutaj nie wiemy co to jest za typ tej listy
to ciągle możemy ją przypisać do listy stringów
tak i teraz możemy tego normalnie używać tutaj
mamy zwykłą listę stringów jednak wiąże się z
tym pewne niebezpieczeństwo dlaczego dlatego że możemy zadeklarować
dowolny typ na przykład integer i to nam się ciągle kompiluje
mimo że w środku dobrze wiemy że jest string jak
sobie wyciągniemy tego stringa
to on ciągle będzie ciągle nam będzie działało tak tutaj
możemy to odpalić jednak
kiedy spróbujemy przypisać to do zmiennej i tutaj
nawet nam podpowiada że to powinien być integer tak i to ciągle się
kompiluje to w momencie uruchomienia tego dostaniemy class cast exception tutaj
tak próbujemy do integera z tej listy wyciągnąć coś
co powinno być integerem sygnatura tej metody get sugeruje
że to jest integer no ale w momencie przepisania niestety
dostajemy class cast exception no i tu jest właśnie to niebezpieczeństwo
związane z używaniem tych typów tak z tym pomijaniem typu generycznego ja
wam zdecydowanie odradzam używania tego tego typu oczywiście
jeżeli jesteście z tego zmuszeni na przykład używacie jakiegoś starego api
starej biblioteki no to tam czasem nie
ma tych typów tak dostajecie do ręki list i nie wiecie
co to jest za list tak ktoś wam mówi czy mamy z jakiegoś kontekstu wiecie
że tam są w środku stringi na to wtedy po prostu sobie przypisujecie
do jakiejś zmiennej która jest list of string
tak no i z tym jesteście już zmuszeni pracować tak okej
tutaj jeszcze taka informacja jeżeli przypisujecie sobie te
te raw type'y i do już ocheckowanych
typów generycznych idea wam podpowiada że
to jest nie sprawdzone przypisanie typy mogą się nie zgadzać
a też czasami dostanie się na etapie kompilacji
powiadomienie o tym już w zależności jakie tam obsługujecie czy
jeżeli są powiadomienia zazwyczaj one są ignorowane ale
możecie też żeby i w idei żeby nie otrzymywać jakichś warningów
właśnie na etapie kompilacji możecie tutaj sobie dodać adnotację suppress warnings i
tutaj dodać sobie unchecked i teraz tutaj się nie podświetla
tak no to jeżeli macie jakieś takie fragmenty w swoim code base w którym wiecie
że robicie takie takie trochę haki albo jesteście się do tego zmuszeni no
to możecie sobie też tutaj i właśnie opisać taką taką adnotacją
i wtedy to nie będzie generował o jakichś powiadomień na etapie kompilacji
ale tak jak mówiłem zdecydowanie jeżeli nie musicie to nie używajcie
okej to tyle jeżeli chodzi o raw types dzięki wielkie i
do zobaczenia