Damian Szczepanik
O autorze:
Artykuły
Express killers, cz. I
Z przyjemnością witam w nowym cyklu Express killers. Dział będzie prezentował ciekawe (nie koniecznie zalecane!) przypadki użycia języka Java. Jestem zwolennikiem korzystania z IDE i wszystkich jego możliwości, które oferuje, dlatego problemy tutaj poruszane nie będą pytaniem, dlaczego poniższy kod się nie kompiluje?
public class Object { Object o = new Object() { public String toString() {
Express killers, cz. II
W drugim odcinku przyjrzyjmy się dwóm przykładom, które kryją pułapki związane z upraszczaniem kodu, skracaniem zapisu oraz chęcią pochopnego przyspieszenia procesu implementacji (i późniejszemu nadrabianiu podczas testowania).
Upraszczanie kodu niesie zwykle jeden cel: jest krótszy w zapisie. Proces ten ma jednak tę wadę, że kod wynikowy jest trudniejszy w analizie – szczególnie przez osoby trzecie. Nasuwa się zatem pytanie,
Express killers, cz. III
W kolejnym odcinku zastanówmy się, jak maszyna wirtualna radzi sobie z drukowaniem referencji, która wskazuje na nic, czyli na null
. Oto krótki kawałek kodu, który drukuje nazwę klasy obiektu pobranego z kolekcji:
; ; { ; { List; list.; { ; } } { ; } }Co zostanie
Express killers, cz. IV
Przykład pierwszy
Na początek krótkie przypomnienie: jaki będzie wynik uruchomienia poniższego kawałka kodu?public class Loader { { System.out.println("a"); } X x; static { System.out.println("b"); } Loader() { System.out.println("c"); } { System.out.println("d"); } static class X { static { System.out.println("e"); } } public static void main(String[] args) { System.out.println("f"); new Loader(); } }
Przykład drugi
NapotkawszyExpress killers, cz. V
Przykład pierwszy
W dzisiejszym cyklu zaczniemy od krótkiego kodu dla spostrzegawczych. Pytanie brzmi: zakładając, że poniższa klasa się kompiluje, a jej uruchomienie nie spowoduje rzucenie wyjątkiem, jakiej klasy jest referencjaobj
?public class ClassType { // definicja typu obj public static void main(String[] args) { Object pattern = ClassType.class; for (int i = 0; i < obj.length();