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
final
wię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.io
to:File, FileReader, BufferedReader, FileWriter, BufferedWriter, PrintWriter, Console
- Tworząc nowy obiekt klasy
File
nie oznacza że tworzy się nowy plik na HD - Obiekty klasy
File
reprezentować mogą zarówno plik jaki folder - Klasa
File
pozwala na zarządzanie plikami lub folderami (dodawać, zmieniać nazwę, kasować) - Metody
craeteNewFile(), mkdir()
dodają wpisy(plik, katalog) do twojego systemu FileWriter, FileReader
są 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.io
są 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
BufferedReader
do opakowywaniaFileReader
lubBufferedWriter
do opakowywaniaFileWriter
aby uzyskać wyższy poziom i mieć dostęp do wygodniejszych metod PrintWriter
może być używane do opakowywania innych Writer, ale od Javy 5 mogą one być budowane bezpośrednio zFile, String
- Java 5
PeintWriter
maja nowe metodyappend(), format(), printf()
- Obiekt
Console
moż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.io
wliczają się w to głównieObjectOutputStream, ObjectInputStream
iFileOutputStream, FileInputStream
ponieważ będziemy ich używać do tworzenia niskiego poziomu strumieni zwłaszcza klasy ObjectXxxStream - Klasa musi implementować interfejs
Serializable
aby 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
Calendar
zapewnia 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ą dateLocale
klasa jest używana w połączeniu z klasamiDateFormat, NumberFormat
- Oba obiekty klas
DateFormat, NumberFormat
mogą 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, Matcher
posiadają dobrze rozbudowane wyrażenia regularne - Powinno się rozumieć z klasy
Pattern
metodęcompile()
i z klasyMatcher
metodymatches(), pattern(), find(), start(), grup()
- Nie musimy do egzaminu martwić się metodami z klasy
Macher
któ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ę
Scanner
lub też zString.split()
- Delimeter jest pojedynczy znak jak np. kropka "." albo złożone wyrażenie regularne
- Klasa
Scanner
pozwala nam rozdzielanie ciągu znaków w pętli, co pozwala nam zatrzymać się kiedykolwiek chcemy - klasa
Scanner
pozwala 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