Zwiększenie zmiennej wewnątrz metody

0

Mam taką klasę, która usuwa nieużywane obiekty:


public class Punkt {

int x; //Odpowiada za ID obiektu, dzięki przypisaniu i = x;
int l; //Stworzona przeze mnie, równie dobrze może jej nie być.

Punkt(int i){
	x = i;
l = i;
}
	protected void finalize(){
		Punkt og = new Punkt(l);
		og.l = og.l + 1;
		System.out.println("Usuwanie obiektu o ID: " + og.l);	
	}
	
	void generator(int i) {
		Punkt o = new Punkt(i);
	}
}

I drugą w której testuję efekt jej działania:

public class wysw {

	public static void main(String[] args) {
int count;

Punkt od = new Punkt(0);

		for (count = 1; count < 1000000; count++){  //Tworzy bardzo wiele obiektów (wiele wywołań metody generator, która ma za zadanie stworzyć nowy obiekt)
			od.generator(count);
		}
	


	}

}

Z drugą chyba wszystko w porządku, ale jak zrobić w pierwszej klasie, aby zamiast pokazywania ID usuwanego obiektu **zliczało **usuwane obiekty (Liczba usuniętych obiektów: 1, Liczba usuniętych obiektów: 2,... itd). Niestety mój sposób nie działa.

0

Nie wywołuję nigdzie metody finalize();, bo jest ona automatycznie wywoływana gdy jest zbyt duża ilość nieużywanych obiektów i istnieje konieczność odzyskania zajmowanych przez nie pamięci. Stworzyłem tam obiekt og, bo nie miałem pomysłu jak mógłbym zwiększać zmienną, która zliczałaby wywołania metody finalize();. Najpierw miałem tak:

public class Punkt {
 
int x; //Odpowiada za ID obiektu, dzięki przypisaniu i = x;
int l;
 
Punkt(int i){
    x = i;
}
    protected void finalize(){
        l++;
        System.out.println("Usuwanie obiektu o ID: " + l);    
    }
 
    void generator(int i) { 
        Punkt o = new Punkt(i);
    }
}

Ale wtedy zmienna l była zwiększana tylko raz i efektem było wyświetlenie tekstu (tyle razy ile było usuniętych obiektów) Usuwanie obiektu o ID: 1.

Kod ten działa, pochodzi z książki której uczę się Javy i jego pierwotnym zamysłem było zademonstrowanie metody finalize();. Ja chciałem tylko wprowadzić modyfikację, która zamiast wyświetlania ID usuniętego obiektu zliczałaby liczbę usuniętych obiektów.

0

Zmienna zliczająca powinna być static.

public class TestPunkt
{
    public static void main(String[] args)
    {
        for(int i=0;i<1000000;i++)
        {
            new Punkt(i);
        }
        System.out.println("Utworzone: " + Punkt.created + " usuniete: " + Punkt.removed);
    }
}
public class Punkt 
{
    int x;
    static int created = 0;
    static int removed = 0; 
    Punkt(int x)
    {
        this.x = x;
        created++;
    }
    @Override
    public void finalize()
    {
        removed++;
    }
}
0

Śmiga, dzięki za pomoc.

1 użytkowników online, w tym zalogowanych: 0, gości: 1