String
Operator + jest przeciążony: dla argumentów numerycznych to dodawanie, jeśli chociaż jeden z argumentów jest Stringiem jest to konkatentacja.
Przez niezmienność Stringów operacje na nich wykonane zwracają nowy obiekt.
Stringi utworzone przez dodawanie stałych są, w czasie kompilacji, zamieniane na stałe.
Stringi które powstały z wykorzystaniem niefinalnej zmiennej powstają w czasie uruchomienia więc nie są umieszczane w puli. Można je tam umieścić przez wywołanie intern()
, metoda zwraca referencje do łańcucha o tej samej zawartości ale umieszczonego w puli.
"0123".substring(4)
da w wyniku pusty String ale "0123".charAt(4)
rzuci wyjątek, tak samo jak "0123".substring(5)
.
Operator ++
nie działa dla Stringa, mimo że "napis"+1
da w wyniku napis1.
toString()
z Object zwraca String klasaZeScieżką;@hashCodeObiektu, jeśli klasa jest poprzedzona [L – referencja wskazuje tablicę obiektów tego typu [Ljava.langString;@120bc123.
indexOf
przyjmuje Stringa lub znak jako int.
Metody które rzucają StringIndexOutOfBoundsExcepion delete
, deleteCharAt
, replace
, insert
, substring
Metody które rzucają bardziej ogólny IndexOutOfBoundsExcepion append
, insert
, setLength
, charAt
, codePointAt
, codePointBefore
, codePointCount
, offsetByCodePoints
, getChars
, setCharAt
, subSequence
. W praktyce wszystkie te metody rzucają szczegółowy wyjątek, ale to może się zmienić i dalej będą zgodne z dokumentacją.
StringBuilder
Obiekt o zmiennej zawartości, domyślna pojemność to 16 znaków.
equals
porównuje referencje a nie zawartość.
setLength
może obciąć łańcuch lub dopełnić go za pomocą null character ’\u0000′.
indexOf
przyjmuje Stringa.
append
przyjmuje wszystko poza short i byte.
Tablice
W momencie dodawania elementu do tablicy sprawdzany jest typ obiektu i może zostać rzucony ArrayStoreException. Jest to spowodowane kowariancyjnością tablic.
Tablica Stringów jest podtypem tablicy Obiektów.
Tablica dwuwymiarowa to tablica kolumn (które też są tablicami) dlatego nie muszą być prostokątne.
Tablice wielowymiarowe podczas deklaracji wymagają podania tylko pierwszego wymiaru.
Tablica może być zadeklarowana przez String [] tab = {„a”, „b”}
tylko w momencie inicjalizacji, w innych miejscach będzie to błąd kompilacji i trzeba to zrobić przez tab = new String[] {„a”, „b”}
.
Puste tablice dwuwymiarowe można zainicjalizować przez jedną parę nawiasów.
java.util.Arrays zawiera narzędzia do sortowania, przeszukiwania i wyswietlania tablic. Arrays.binarySech
zwraca pozycję elementu lub indeks miejsca w którym zostałby dodany -1.
Tablice nie przeciążają equals
za to domyślnie implementują Serializable i Cloneable.
ArrayList
add()
zawsze zwraca true.
ArrayList rozszerza AbstractList – szkieletową implementacje listy z dostępem do dowolnego elementu która umożliwia sekwencyjne dodawanie elementów, czyszczenie całej listy, łączenie list (addAll()
), Iterator, subList()
, equals()
, hashCode()
Odpowiednik dla dostępu szeregowego to AbstractSequentialList.
remove(Object object)
mówi czy usunięcie miało miejsce
remove(int index)
zwraca usuwany element lub rzuca IndexOutOfBoundsException.
set(int index, E newElement)
nadpisuje i zwraca zastąpiony element.
Typy opakowujące
Wszystkie typy są niezmienne. Wszystkie mają cache który przechowuje wartości od -128 do 127 (węższy zakres mają Character i Boolean, Integer ma konfigurowalny górny zakres). Cache jest wykorzystywany przez valueOf()
który jest wywoływany przy tworzeniu literałów i podczas autoboxingu.
Integer.parseInt(String string)
zwraca typ prosty (analogicznie dla innych typów opakowujących).
Autoboxing ma niższy priorytet w dopasowaniu parametrów niż bezpośrednie dopasowanie
listaIntegerow.remove(1)
usunie pierwszy element
listaIntegerow.remove(new Integer(1))
usunie obiekt o wartości 1.
java.time
LocalDate przechowuje datę, LocalTimeprzechowuje czas, LocalDateTime przechowuje oba.
Wszystkie te obiekty są niezmienne, konstruowane przez statyczne metody, implementują TemporalAccessor
którego zaleca się nie stosować.
LocalDate.of(int rok, int miesiąc, int dzień)
miesiące są numerowane od 1 i mogą być zastąpione przez enuma Month.
LocalDateTime.of(rok, miesiąc, dzień, godzina, minuta, sekunda)
lub LocalDateTime.of(data, czas)
.
Utworzenie daty przez podanie błędnych parametrów jest wykrywane dopiero w czasie uruchomienia (DateTimeException).
Wszystkie obiekty mają fluent API do dodawania lub odejmowania wartości (zwracają nowy obiekt).
LocalDate nie ma metod do modyfikowania czasu.
Period
Period.ofYears
, Period.ofMonths
, Period.ofWeeks
, Period.ofDays
tworzą obiekty okresu które można dodawać/odejmować od daty.
Okresy nie mają fluent API to tworzenia (tak samo jak Local*Time) of()
to statyczne metody zwracające nowy obiekt. Przy próbie użycia of()
jak fluent API tylko ostatnia instrukcja ma znaczenie.
Obiekt Period bierze pod uwagę zmiany strefy czasowej lub czasu na letni/zimowy. Analogiczny obiekt przechowujący bezwzględny okres to Duration.
DateTimeFormatter to obiekt opisujący formatowanie dla czasu. Formatowaniu można przekazać datę lub odwrotnie (dawne SimpleDateFormat).
Źródła:
„OCA: Oracle Certified Associate Java SE 8 Programmer I Study Guide: Exam 1Z0-808” Jeanne Boyarsky, Scott Selikoff
„JA+ V8 for Oracle Certified Associate – Java SE8 Programmer I” http://enthuware.com