Tworzenie obiektu kopiowanie?

0

Witam mam takie pytanko:

Jeśli tworzymy obiekt to czy kopiowane są metody jak i pola do niego z klasy która uprzednio została załadowana przez ClassLoadera ?

Z góry dzieki za pomoc.

0

Klasa nie zawiera "pól" tylko ich definicje, więc nie ma ich skąd "kopiować". Utworzenie obiektu tworzy nowy obiekt z polami określonymi przez klasę. Metody to inna bajka, bo ich kod jest załadowany tylko raz a w twoim obiekcie jest tylko informacja gdzie te metody są w pamięci.

0

@gacus007: trochę inaczej to działa :) W trakcie ładowania klasy przez ClassLoader tworzony jest specjalny obiekt Class (w uproszczeniu, bo tak idzie cały graf), który będzie przechowywany w osobnym miejscu w pamięci (gdzie dokładnie to zależy od wersji języka). Następnie jak tworzysz obiekt, to maszyna wirtualna odwołuje się do obiektu typu Class i dołącza informacje o klasie do utworzonego obiektu. Następnie gdy wywołujesz metodę, albo odwołujesz się do pola, to informacja o tym polu/metodzie jest odczytywana z definicji klasy i aplikowana do obiektu na którym operujesz.
Obiekt jako taki, nie posiada żadnych informacji o metodach czy polach, a jedynie referencję, do obiektu Class, który reprezentuje typ i ma wszystkie te informacje.

0

@Koziołek Jesli np jakies pola sa Od razu zainicjowane w klasie i odwolujemy sie do nich w obiekcie, to pobierana jest ich definicja tzn typ, wartosc inicjalizacyjna I tworzane sa w obiekcie ?

0

Definicja, a wartość to dwie osobne dziedziny. Jeżeli masz coś takiego:

class Klasa{
	int i = 10;
	Object o = new Object();
}

To jak wywołasz konstruktor, to najpierw zostanie odczytana definicja Klasa, potem zarezerwowane miejsce na obiekt typu Klasa, bo wiemy ile miejsca potrzeba, bo mamy informację o zależnościach. Następnie zostaną zainicjowane pola, czyli utworzone obiekty/przypisane wartości prymitywne. I dopiero teraz masz w obiekcie Klasa podpięte wskaźnik do o i wartość i.
Do typów obiektowych zawsze masz wskaźnik (referencję), a do typów prymitywnych wartość.

0

@Koziołek: Dzieki wielkie, rozwiales moje watpliwosci.

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