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.
Tutaj mam fragment kodu w którym zliczam linie
jakiegoś pliku nieważne co to jest za plik tutaj akurat to jest ten sam plik który piszemy
w tym momencie ale to co jest istotne to jest to jak do tej pory pokazywaliśmy
gdzie ten plik się znajduje tutaj mamy relatywną ścieżkę zapisaną w stringu jest
to ścieżka względna naszego working directory w intellij no
i teraz pytanie czy to jest najlepszy sposób żeby przedstawiać właśnie
ścieżkę do pliku oczywiście nie jest to najlepszy pomysł nie jest najlepszy sposób z
jakiego względu z tego względu że nie jest to powiedzmy string nie jest typem
który jest przeznaczony do tego żeby przechowywać ścieżki jest to po prostu na
tekst tak nie wiadomo co to jest za tekst a w momencie kiedy to jest coś tak jakby odnośnie
czego możemy przyjąć pewne założenia że będą to jakieś
wyrazy tak które są oddzielone jakimś powiedzmy separatorem tak jak tutaj tak no
to powiedzmy jakaś taka abstrakcja w dostępie do pliku byłaby lepsza druga rzecz
to jest to że poza tym że string jest takim kiepskim typem
to jeszcze to że na takim stringu jakby nie możemy wyciągnąć
kilka rzeczy nie możemy wywołać wilka operacji które by były typowe dla path
do pliku na przykład nie możemy sobie wyciągnąć co jest rootem jak się
nazywa plik i możemy iterować po tej ścieżce po kolei tym co się powiedzmy
po tych elementach nie więc powiedzmy nie jest najlepsza
abstrakcja tak string i oczywiście w javie istnieją lepsze pierwszą
abstrakcją którą moglibyśmy użyć w tym miejscu jest obiekt klasy file
file to jest klasa która jest od dawien dawna w javie i jej
po prostu i w konstruktorze możemy podać tego path'a i dalej już możemy oferować na
file tak on tu można go spokojnie przekazywać do jakichś metod tak i
nawet file reader jak widzicie ma konstruktor który przyjmuje właśnie obiekt
classified no i teraz tak ten file poza tym że jest
jakąś atrakcją na ścieżkę tak to jeszcze udostępnia dodatkowe jakieś takie metody no i tutaj
widzimy że można go usunąć można sprawdzić czy to jest directory wziąć jego nazwę
sprawdzić czy istnieje jest dużo tu jakichś metod między innymi wyciągania jakiejś meta wiedzy
tak okej teraz żeby nie przedłużać od razu
mówię że istnieje coś co już powiedzmy w pewien sposób zastępuje
file albo jest bardziej wskazanym do używania z jakiego względu z
tego względu że file jest trochę takim przeciążonym obiektem
takim przeciążonym typem z tego względu że raz jest abstrakcją
do tego gdzie się znajduje ten plik i również zawiera tak jakby operacje
jakie możemy wywoływać na tym pliku z tych właśnie względów powstała klasa path
jest to klasa która reprezentuje tylko i wyłącznie ścieżkę do jakiegoś
katalogu do jakiegoś pliku oraz pozwala nam robić operacje na ścieżkach
czyli pozwala je łączyć jakoś powiedzmy pozwala wyciągać root jakieś
takie elementy tak w dodatku tej ścieżki możemy wykorzystywać klasę
pomocniczą from files która zawiera tą część taką zachowań
już samego obiektu pliku która była w file prawda czyli
właśnie jakieś takie wyciąganie meta wiedzy dodawanie pliku usuwanie i
wiele innych operacji które poznamy na razie zobaczymy jak wygląda wykorzystanie
path i widzimy tutaj mieliśmy prostu new file teraz mamy path
z get i podajemy po prostu ścieżkę możemy też podać
tutaj ścieżkę jako tablice w której będą rozdzielone po kolei
każdy element z tego wtedy możemy abstrahować od tego jaki jest
ten separator między katalogami ale w ten sposób też jest okej no
i dalej przekazujemy już path i tutaj jest taka rzecz z tego
względu że file reader nie ma konstruktora który przyjmuje path to albo
możemy zrobić path to file czyli możemy się cofnąć do do pliku
albo możemy też wykorzystać wersję new bufferedreader
która tworzy dokładnie to samo pod spodem ale
już przyjmuje po prostu path tak tutaj na file wywołujemy taką metodę i ona tworzy
readera który też ma buforowanie wtedy już wiemy jak utworzyć obiekt
path teraz starajmy się zawsze kiedy operujemy na na jakiejś
ścieżce czy powiedzmy sklejamy tę ścieżkę czy dostajemy ją na przykład z zewnątrz
aplikacji musimy ją powiedzmy jakoś parse'ować ją trzymać dalej to
później już operujmy na path'ach tak jak najszybciej sobie tego stringa zamieńmy i
w tych metodach gdzie spodziewamy się dostać pliki będziemy powiedzmy operowali
właśnie na jakieś katalogach na jakichś pikach tam przekazujmy już path
jakieś takie operacje powiedzmy na tych katalogach będziemy wykonywali używając
już files lub strumień okej zobaczmy co na tym path możemy
robić poza tym że można go używać jako powiedz tej ścieżki to
tak jak mówiłem jest abstrakcja która ma też dużo metod które
są takie typowe do operacji na na po prostu na ścieżkach
tak możemy wyciągnąć sobie po prostu całą tą ścieżkę
do tego się wykorzystuje to string to jest cała ścieżka możemy
wyciągnąć sobie samego file name tak czyli samą końcówkę main kropka
java to wygląda taki dziwny sposób z tego względu że nie ma
metody która zwraca po prostu file name który jest stringiem on po prostu zwraca
path który jest odpowiednio przycięty tak sam kawałek
ponieważ path nie tylko jest powiedzmy każdy cały ten
cała ta ścieżka ale też poszczególne jej elementy też są path twórcy
tak wymyślili powiedzmy no i tak możemy właśnie wyciągnąć filename możemy
też korzystając z tego gdzie się obecnie znajdujemy możemy stwierdzić jaki
jest absolute path tutaj powiedzmy on wskazał tak
dokleił absolute path tak i już nie mamy powiedzmy względem
src tylko jest po prostu względem mojego roota u mnie tak
okej dalej możemy sprawdzić na przykład czy ten path się kończy na jakiś path
tutaj to nie jest tak jakby nie sprawdza czy się kończy na jakiegoś
stringa tylko czy kończy się właśnie na element będący path'em
tak i w tym wypadku main kropka java czyli do regex zastosujemy
coś innego możemy też sprawdzić na przykład jaki jest parent
jakiegoś jakiegoś katalogu czy jakiegoś pliku tak
do którego mamy path to jest bardzo fajna funkcjonalność no i tam możemy sprawdzić
że to jest po prostu katalog advanced tak możemy
również mając jakiś powiedzmy path możemy po nim się poruszać
tak jak w dodając do niego kolejne elementy do tego służy metoda resolve i tutaj podajemy
po prostu albo path albo jakiś string tu jest też wersja właśnie która
przyjmuje path a nie tylko stringa no i też jest taka metoda
ze względu na to że możemy tworząc sklejając nasz powiedzmy path
z wielu jakiś takich innych pathów na przykład przyjmując sklejając
go z jakichś powiedzmy argumentów które dostajemy w konsoli tak do programu na przykład jak
tutaj mieliśmy operator tak to jest poprzedni
katalog tak to możemy powiedzmy to znormalizować i on go już tutaj
rozwiąże że jest to po prostu taka ścieżka tak okej to wszystko
co chciałem ci pokazać tej lekcji dzięki wielkie i do zobaczenia