String, StringBuffer, StringBuilder
- Obiekt typu String jest obiektem niezmiennym, zaś zmienna referencyjna wskazująca na String jest zmienna
- Jeżeli utworzysz nowy obiekt String'a bez przypisania do niego referencji, będzie on stracony dla naszego programu
- Jeżeli zmienisz referencje na nowy obiekt String'a, ten stary może zostać stracony
- Metody String'a używają indeksu bazującego na 0, z wyjątkiem 2 argumentu metody
substring() - Klasa String jest
finalwięc jej metody nie mogą być nadpisywane - Kiedy JVM znajdzie String'a, dodaje go do puli String'ów
- String posiada metodę
length(); tablice posiadają atrybut o nazwielength - API dla StringBuffer'a jest takie samo jak dla StringBuilder'a, z wyjątkiem że metody StringBuffer'a są synchronizowane, więc klasa jest bezpieczniejsza w użyciu z wątkami, ale za to wolniejsza
- Metody StringBuilder'a powinny być szybsze niż metody StringBuffer'a
- Niżej wymienione punkty tyczą się obydwu klas
- Obiekty tych klas są zmienne, czyli mogą się zmieniać bez tworzenia nowego obiektu
- Metody działają na obiekt na którym są wywoływane, i obiekt się zmienia bez konieczności przypisywania mu nowej wartości
- metoda
equals()nie jest nadpisywana, i nie porównuje wartości
StringBuffer sbff = new StringBuffer("dupa"); StringBuffer sbff1 = new StringBuffer("dupa"); System.out.println(sbff.equals(sbff1)); // false StringBuilder sb = new StringBuilder("dupa"); StringBuilder sb1 = new StringBuilder("dupa"); System.out.println(sb.equals(sb1)); // false System.out.println(sb.equals(sbff)); // false
- Należy pamiętać, że metody połączone w łańcuch działają od lewej do prawej
- Metody String'a jakie należy zapamiętać:
charAt(), concat(), equalsIgnoreCase(), length(), replace(), substring(), toLowerCase(), trim() - Metody StringBuffer'a i StringBuilder'a do zapamiętania :
append(), delete(), insert(), reverse(), toString()
File I/O
- klasy które należy zrozumieć w pakiecie
java.ioto:File, FileReader, BufferedReader, FileWriter, BufferedWriter, PrintWriter, Console - Tworząc nowy obiekt klasy
Filenie oznacza że tworzy się nowy plik na HD - Obiekty klasy
Filereprezentować mogą zarówno plik jaki folder - Klasa
Filepozwala na zarządzanie plikami lub folderami (dodawać, zmieniać nazwę, kasować) - Metody
craeteNewFile(), mkdir()dodają wpisy(plik, katalog) do twojego systemu FileWriter, FileReadersą klasami niskiego poziomu z pakietu klas I/O, można ich używać do czytania lub zapisywania do pliku, ale zazwyczaj powinny być one opakowywane- Klasy w pakiecie
java.iosą zaprojektowane tak aby mogły być łączone w łańcuchy lub opakowywane (jest to powszechnie używane przy stosowaniu wzorca dekoratora) - Zazwyczaj do opakowywania używa się klas
BufferedReaderdo opakowywaniaFileReaderlubBufferedWriterdo opakowywaniaFileWriteraby uzyskać wyższy poziom i mieć dostęp do wygodniejszych metod PrintWritermoże być używane do opakowywania innych Writer, ale od Javy 5 mogą one być budowane bezpośrednio zFile, String- Java 5
PeintWritermaja nowe metodyappend(), format(), printf() - Obiekt
Consolemoże czytać ciągi znaków zwane non-echoed i jest tworzony przy pomocy statycznej metodySystem.console()
Serialization
- Wszystkie klasy które musimy zrozumieć znajdują się w pakiecie
java.iowliczają się w to głównieObjectOutputStream, ObjectInputStreamiFileOutputStream, FileInputStreamponieważ będziemy ich używać do tworzenia niskiego poziomu strumieni zwłaszcza klasy ObjectXxxStream - Klasa musi implementować interfejs
Serializableaby obiekty klasy mogły być serializowane ObjectOutputStraem.writeObject()metoda serializuje obiekty, natomiastObjectInputStream.readObject()metoda używana do deserializacji obiektów- Jeżeli oznaczymy zmienną klasową jako
transient, zmienna ta nie będzie poddana serializacji nawet jeśli reszta tego obiektu będzie - Można uzupełnić automatyczny proces serializacji klasy poprzez implementacje metod
writeObject(), readObject(). Jeśli to zrobimy, osadzone metodydefaultWriteObject(), defaultReadObject(), odpowiednio będzie się odnosić do części serjalizacji która odbywa się w normalny sposób.
private void writeObject(ObjectOutputStream os){ throws IOException { try{ os.defaultWriteObject(); // code }catch(Exception e){ e.printStackTrace(); } } } private void readObject(ObjectInputStream is){ throws IOException, ClassNotFoundException { try{ is.defaultReadObject(); // code }catch(Exception e){ e.printStackTrace(); } } } - Jeżeli nad klasa implementuje interfejs
Serializable, to jej podklasy automatycznie też - Jeśli nad klasa nie implementuje
Serializable, i kiedy obiekt podklasy jest deserializowany, to konstruktor nad klasy będzie wywołany, wraz z jego konstruktorami - Zmienne statyczne nie są poddawane serializacji
Daty, Liczby, Waluta
- Klasy które musimy zrozumieć to
java.util.Date, java.util.Calendar, java.text.DateFormat, java.text.NumberFormat, java.util.Locate - Większość metod z klasy Date to metody już przestarzałe i nie zaleca się ich używania
- Data jest przechowywana w type
long, jest to liczba milisekund od 1-go stycznia, 1970 - Obiekty klasy Date są łącznikiem pomiędzy klasami
Calendar and Locate - Klasa
Calendarzapewnia użyteczny zestaw metod do manipulowania datą, dostarczając takich usług między innymi jak pobieranie ilości dni tygodnia, lub też dodania jakiejś liczby miesięcy lub lat - Obiekt Calendar tworzymy przy użyciu wzorca static factory method (getInstance())
- Metody z klasy
Calendar, które powinno się rozumieć toadd(), metoda ta pozwala dodać lub odejmować poszczególne elementy (min, dni, lata itp.) daty,roll(), który pracuje jakadd()ale nie zwiększa większych części daty np. dodać 10 miesięcy do października zmienia miesiąc na sierpień, ale nie zwiększa roku - DateFormat instancje tej klasy są tworzone poprzez użycie wzorca static factory methods (getInstance() i getDateInstance())
- Style formatowania klasy DateFormat mogą być stosowane wobec różnych Locales do utworzenia szerokiej gamy wyjść dla daty
- W klasie DateFormat mamy dostępnych kilka stylów formatowania danych
DateFormat.format()metoda ta jest używana do tworzenia String'a który zawiera odpowiednio sformatowaną dateLocaleklasa jest używana w połączeniu z klasamiDateFormat, NumberFormat- Oba obiekty klas
DateFormat, NumberFormatmogą być utworzone z określonym niezmiennymLocale - Na potzreby egzaminu powinieneś zrozumieć jak się tworzy Locales używając języków, lub kombinacji języka z krajem
Parsing, Tokenizing, and Formatting
- regex to skrót dla wyrażeń regularnych, które są wzorcem używany w wyszukiwaniu danych w dużych źródłach
- regex jest to pod język który istnieje w Javie i innych językach np. Perl
- regex pozwala nam utworzyć wzorzec jaki będziemy poszukiwać używając w tym celu literałów lub meta-znaków. Meta-znaki pozwalają nam szukać nieco bardziej abstrakcyjnych danych jak np. liczby czy spacje.
- Przestudiować należy takie znaki jak
\d, \s, \w, .i meta-znaki - regex zapewnia kwantyfikatory które pozwalają nam sprecyzować nasze poszukiwania jak np. "szukaj więcej niż jedną liczbę w wierszu"
- Przestudiuj działanie
?, *, +są to tak zwane "greedy quantifiers" (chciwe kwantyfikatory). - Pamiętać należy że meta-znaki nie współgrają za dobrze chyba że pamiętasz aby od nich uciec prawidłowo np.
String s = "\\d"; - Klasy
Pattern, Matcherposiadają dobrze rozbudowane wyrażenia regularne - Powinno się rozumieć z klasy
Patternmetodęcompile()i z klasyMatchermetodymatches(), pattern(), find(), start(), grup() - Nie musimy do egzaminu martwić się metodami z klasy
Macherktóre odpowiadają za wymiane - Możemy używać java.util.Scanner do prostych wyrażeń regularnych, ale to jest przeznaczone przede wszystkim dla tokenizing
- Tokenizing jest to proces do rozdzielania danych przez odpowiedni znak np. spację, na mniejsze porcje danych
- W procesie tokenizing, dane które są przez nas pożądane nazywamy token, a ciąg znaków który będzie służył do rozdzielania nazywa się delimiters
- Tokenizing może być wykonywany przez klasę
Scannerlub też zString.split() - Delimeter jest pojedynczy znak jak np. kropka "." albo złożone wyrażenie regularne
- Klasa
Scannerpozwala nam rozdzielanie ciągu znaków w pętli, co pozwala nam zatrzymać się kiedykolwiek chcemy - klasa
Scannerpozwala nam na rozdzielanie ciągów znaków, strumieni lub plików - Metoda
String.split()rozdziela wszystkie dane na raz, więc duża porcja danych może być to dość dłuższy proces - W Javie 5 są dwie metody używane do formatowania danych dla wyjścia, są to
printf(), format()znajdują się one w klasiePrintStream - Metody
format() i printf()mają identyczną funkcjonalność - Formatowanie danych za pomocą
printf()(lub format()) odbywa się za pomocą łańcuchów formatujących, które są związane z typami prymitywnymi lub z argumentami - Metoda
format()pozwala ci na mieszanie literałów z twoją formą ciągów znaków - Formaty ciągów znaków które powinieneś znać:
- Flagi: -,+, 0, ",", (
- Konwersja: b, c, d, f, s
- Jeżeli twoja konwersja nie pasuje do twojego typu argumentu, będzie zgłoszony wyjątek

Brak komentarzy:
Prześlij komentarz