Coś taki tricky ten kod...
1. Wywolujesz tablicę obiektów project zapisaną pod zmienną p. WAŻNE. Ta tablica składa się typu project ale nie jest na niej wywołowany i ma być nie więcej niż 20. Mówiąc inaczej powiedziałem JVM ta tablica przyjmuje typ project i będzie ich maksymalnie 20 (czyli "zarezerwuj przestrzeń pod nie)
2.Potem pętelka while robisz dopóki x nie jest większe od 9, potem x rośnie.
3.przepisujesz do p[x] , a x to numer wywołowania a w naszym przypadku x to indeks tabeli. Przez to że tabela jest typem prostym (jak dobrze pamiętam, bo strzelam), mogę bezpośrednio pod indeks przesłać obiekt utworzony przez konstruktor.
4.Potem wywołuje na tym p[x] pole licznik i rośnie o 1.
5.ilośc zwiększam o 1.
ale... potem do ilości dodaje wynik metody p[x].mozeNowa (zawiera taką metodę w konstuktorze) i przekazuje jej x
6. Teraz nie pamiętam co zrobi kompilator , zauważ możeNowa ma wywołowanie samej siebie konstruktora i a drugie co warto zauważyć konstruktor za każdym razem jest uruchamiany, i teraz GC albo będzie czyścił kolejne obiekty mi się wydaje, że będzie usuwał.
7.x<3 zgadza się wchodzimy pętli , nic ciekawego w niej się nie dzieje (tzn jeżeli moje przepuszczenia się zgadzają) zwraca 1 a dla false 0.
8.Czyli dla ilosc nowa wartosc 1+1 czyli 2.
9. Zauważ kolejną rzecz ilość jest wywołowana w mainie więc cały czas się zwiększa.(więc może być to 12)
10.Zauważ kolejną rzecz przy każdym przejściu pętli , wskazujesz na kolejne indeksy tabeli i dla każdego nowego obiektu project wywołujesz licznik , a licznik na początku równy jest 0. A po drguie jest publiczny więc spokojnie możemy w niego ingerować.
Mam nadzieję, że pomogłem. Jeżeli to twój kod to nie pisz tak... Naprawdę.