Miesięczne archiwum: Marzec 2012

4Developers

Jeszcze nie opadł kurz po 33rd Degree a już dużymi krokami zbliża się kolejna ciekawa konferencja – 4Developers. Tym razem odwiedzimy Poznań, gdzie dane nam będzie posłuchać prelekcji podzielonych na 4 sekcje tematyczne. Oprócz Javy, która interesuje nas najbardziej, będziemy mogli poszerzyć naszą wiedzę z zakresu zarządzania projektami IT, wydajności/skalowalności oraz… PHP (z czego raczej nie skorzystamy).

Agenda zapowiada się interesująco. Scieżki poświęcone Javie i skalowalności zawierają wykłady, na których pojawię się obowiązkowo. Może wreszcie uda mi się posłuchać o tak zachwalanym Clojure, o którym opowie Jacek Laskowski. Jestem też niezwykle ciekaw prezentacji Tomasza Szymańskiego poświęconej autorskiemu frameworkowi webowemu (Asamal), na której pokazane zostanie jak stworzyć swoje własne rozwiązanie w tydzień. Brzmi intrygująco.

Oczywiście na 4Developers nie pojawią się tylko i wyłącznie nasi rodacy. Wim Godden zdradzi nam jak poprawnie wykorzystywać cache w celu uniknięcia najczęstszych błędów i polepszenia ogólnej wydajności. Sam Brannen z kolei pokaże jak przeprowadzić test integracyjny naszej aplikacji tak, aby jego warunki jak najbardziej odpowiadały docelowemu środowisku produkcyjnemu.

Pełna agenda dostępna jest na stronie konferencji.

Jak zwykle, javablog.eu będzie relacjonował przebieg tego wydarzenia. Możecie się także spodziewać wyczerpującej relacji po zakończeniu imprezy. Do zobaczenia 18 kwietnia w Poznaniu!

Jelastic – obiecujący hosting Java

Jeżeli kiedykolwiek poszukiwaliście dobrego hostingu umożliwiającego utrzymywanie aplikacji webowych napisanych w Javie (lub innym języku na bazie JVM) to wiecie, że znalezienie odpowiedniego rozwiązania jest niezwykle trudne. Ostatnio jednak natrafiłem na Jelastic. Jest to bardzo ciekawy projekt, obecnie utrzymywany w fazie beta testów, pozwalający na skonfigurowanie wysoce wydajnego i skalowalnego środowiska w kilka minut.  Czytaj dalej

33rd Degree – dzień drugi i trzeci

Kilka godzin temu 33rd Degree dobiegło końca. Poniżej znajdziecie relację z dwóch ostatnich dni konferencji, na której działo się bardzo dużo. Na końcu wpisu znajdziecie też kilka słów na temat rzeczy nie związanych bezpośrednio z merytoryczną częścią imprezy. Oprócz tego, zamieszczamy nową porcję zdjęć z wykładów, na których mieliśmy przyjemność być. Chciałbym także z tego miejsca podziękować wszystkim ludziom, z którymi miałem okazję porozmawiać przez ostatnie trzy dni.  Czytaj dalej

Już jutro startuje 33rd Degree

Od jutra, przez następne 3 dni, Kraków będzie po brzegi wypełniony pasjonatami Javy z racji odbywającej się konferencji 33rd Degree – Conference for Java Masters. Będziemy relacjonować Wam przebieg konferencji na naszym blogu, profilu Facebookowym (PL) oraz Twitterze (EN).
Będą zdjęcia, nasze opinie, przemyślenia, wywiady (o ile ktoś będzie chciał z nami rozmawiać…) – słowem, postaramy się opisać najciekawsze wydarzenia z 33rd Degree. Do zobaczenia/przeczytania jutro!

Zdaj OCPJP – pytanie 50

Jaki będzie efekt działania poniższego fragmentu kodu?

package eu.javablog.parameters;

public class ParametersTest {

	public void testParam(int param) {
		System.out.println("int");
	}
	
	public void testParam(Integer param) {
		System.out.println("Integer");
	}
	
	public void testParam(int... param) {
		System.out.println("int...");
	}
	
	public void testParam(Number param) {
		System.out.println("Number");
	}
	
	public static void main(String[] args) {
		short primitive = 1;
		Short wrapper = 1;
		ParametersTest test = new ParametersTest();
		test.testParam(primitive);
		test.testParam(wrapper);
	}
}

 

  1. Wyświetlone zostanie int oraz Number.
  2. Wyświetlone zostanie int oraz int.
  3. Wyświetlone zostanie Number oraz Number.
  4. Wyświetlone zostanie int oraz int….
  5. Program nie skompiluje się.
  6. Rzucony zostanie wyjątek w trakcie działania programu.

 

Pokaż odpowiedź »

Poprawna jest odpowiedź nr 1.
Aby poprawnie odpowiedzieć na to pytanie należy znać reguły, według których wybierane są metody o różnych sygnaturach. Są one dość proste i opierają się na kilku głównych punktach:

  1. jeżeli istnieją metody, które przyjmują parametry typów prostych, które są większe niż parametr wejściowy, to wybierana jest metoda o najmniejszym z nich (widening). Przykład:
    short p = 1;
    void test(int in) { ... }
    void test(long in) { ... }
    

    Wybrana zostanie metoda void test(int in) { … }.

  2. typy proste mogą być wykorzystane w metodach przyjmujących typy opakowujące (autoboxing). Przykład:
    short p = 1;
    void test(Short in) { ... }
    // test(p) is legal
    
  3. nie możemy liczyć na automatyczne dostosowywanie się typów opakowujących (widening). Przykład:
    Short p = 1;
    void test(Integer in) { ... }
    // test(p) is illegal, cannot convert from Short to Integer
    
  4. konwersja z typów prostych na typy opakowujące nie może być łączona z automatycznym dostosowywaniem się typów opakowujących (widening). Przykład:
    short p = 1;
    void test(Integer in) { ... }
    // test(p) is illegal, cannot convert from short to int and then box to Integer
    
  5. autoboxing, po którym następuje rozszerzanie typu jest w pełni dopuszczalny. Przykład:
    short p = 1;
    void test(Number in) { ... }
    // test(p) is legal
    
  6. zmienne listy argumentów mają najmniejszy priorytet i mogą być łączone z automatycznym wybieraniem docelowego typu oraz autoboxingiem.

Zdaj OCPJP – pytanie 49

Co będzie efektem kompilacji i uruchomienia poniższego kodu?

interface I
{
    void print();
}

abstract class A implements I
{

}

class B extends A
{
    void print()
    {
        System.out.println("CLASS B");
    }
}

public class Sample
{
    public static void main(String[] args)
    {
        B b = new B();
        b.print();
        System.out.println(b instanceof I);
    }
}

 

  1. Wydrukowane zostanie odpowiednio CLASS Btrue.
  2. Wystąpi błąd kompilacji w linii 6.
  3. W trakcie działania aplikacji rzucony zostanie wyjątek.
  4. Wydrukowane zostanie odpowiednio CLASS Bfalse.
  5. Wystąpi błąd kompilacji w linii 13.

 

Pokaż odpowiedź »

Poprawna jest odpowiedź nr 5.

Kompilacja nie powiedzie się, ponieważ nie można przesłonić metody wersją o bardziej restrykcyjnym poziomie dostępu. Metody interfejsu domyślnie są publiczne, więc przesłonić można je jedynie publiczną metodą. Błędu kompilacji nie spowoduje natomiast brak implementacji metody print w abstrakcyjnej klasie A. Dopóki klasa jest abstrakcyjna, nie musi ona implementować abstrakcyjnych metod pochodzących z interfejsów i abstrakcyjnych nadklas.

TechCamp #3 – wygraj Nokia Lumia

Najbliższe TechCampowe spotkanie poświęcone będzie w całości usługom mobilnym. Prelegenci opowiedzą o Windows Phone, rynku aplikacji mobilnych oraz HTML 5. Zapowiada się całkiem ciekawie – smartfony i tablety stają się nieodłącznym elementem naszego życia i era „post-pc”, tak szumnie zapowiadana przez jednego z kluczowych producentów urządzeń mobilnych, staje się faktem. Powoli sprzęt, który kiedyś uważany był za zupełnie zbędny i przereklamowany, zastępują laptopy i komputery stacjonarne. Systemy takie jak Windows Phone, Android czy iOS dają także ogromne możliwości niezależnym programistom, którzy przy odrobinie samozaparcia mogą stworzyć i udostępnić autorską aplikację milionom użytkowników. Warto więc odwiedzić 14 marca krakowski Lizard King i dowiedzieć się w którym kierunku podąża mobilny świat. Dodatkową motywacją może być fakt, że każdy z uczestników trzeciego odcinka Techcampu „Wszystko o Mobile” dostanie szansę na wygraną jednej z dwóch Nokii Lumia.

Zdaj OCPJP – pytanie 48

Jaki będzie efekt uruchomienia poniższego kodu?

package eu.javablog.clonetest;

import java.util.List;

public class Dolly {
	private int lenght = 1; 
	private int weight = 15;
	
	public static void main(String... args) throws CloneNotSupportedException {
		List<Dolly> originals = new ArrayList<Dolly>();
		originals.add(new Dolly());
		
		List<Dolly> clones = (List<Dolly>)originals.clone();
                
        // modifies first animal
		clones.get(0).weight = 0;
		
        System.out.println("clone: " + clones.get(0).lenght + " " + clones.get(0).weight);
        System.out.println("original: " + originals.get(0).lenght + " " + originals.get(0).weight);
	}	
}

 

  1. Kod nie skompiluje się.
  2. Rzucony zostanie wyjątek w linii 13.
  3. Wydrukowane zostaną te same wartości dla listy oryginalnej oraz sklonowanej.
  4. Wydrukowane różne wartości dla listy oryginalnej oraz sklonowanej.

 

Pokaż odpowiedź »

Prawidłowa jest odpowiedź nr 1.

Interfejs List nie posiada publicznej metody clone. Metoda clone jest co prawda zdefiniowana jako jedna z metod klasy Object, ale jest ona oznaczona jako protected i aby stała się widoczna wymaga przeciążenia w klasach pochodnych. Co ciekawe, klasa ArrayList posiada własną implementację metody clone, która kopiuje jedynie samą listę, zachowując oryginalne referencje do składowanych obiektów.