2013-07-02 12 views
13

Uczę się języka Java, a jedno z ćwiczeń kontrolnych w mojej książce wymaga różnicy między "obiektem" a "zmienną obiektu"."Obiekt" kontra "Zmienna obiektu" w Javie?

Wiem, czym jest obiekt (konkretna instancja klasy), ale nie mogę znaleźć terminu "zmienna obiektu" w dowolnym miejscu książki (brak sekcji odpowiedzi) lub w Internecie.

Czy ktoś zna znaczenie tego terminu?

+27

Kup nową książkę. Najlepiej taki, który nie tworzy terminów. –

+2

Gdybym musiał zgadywać, zmienną obiektową jest odwołanie do obiektu, czyli wskaźnik miejsca w pamięci, w którym znajduje się obiekt. – sunrize920

+0

Zmienna obiektowa to kontener przechowujący odwołanie do określonej instancji klasy. Inaczej znani po prostu jako "zmienni" lub "członkowie" –

Odpowiedz

9

Jest to synonim „zmiennej instancji”:

class A { 
    static int m; // <-- class variable 
    int n;   // <-- instance variable 
    ... 
} 

Oczywiście termin ten nie jest tak powszechnie stosowane, i byłoby lepiej, aby uniknąć ewentualnych niejasności po prostu trzyma się „zmiennej instancji”.

+0

Trudno powiedzieć, która z tych dwóch odpowiedzi jest prawidłowa. W każdym razie +1 dla nowego punktu widzenia. – Pshemo

+1

Myślę, że to jest właściwe wyjaśnienie warunków. Zmienna obiektowa jest zmienną, która jest przechowywana jako własna kopia w obiekcie. – jham

+0

Aby wyjaśnić (przepraszam nie mogłem edytować mojego poprzedniego komentarza): Każde wystąpienie klasy A w powyższym przykładzie @arshajii będzie właścicielem _an_ _own_ kopii zmiennej obiektu 'n'. Gdzie wartość 'm' istnieje tylko raz dla wszystkich instancji klasy. – jham

13

Ugryzę.

Obiekt jest samą instancją, podczas gdy zmienna obiektu jest odniesieniem do obiektu.

Oto zmyślony przykład:

Object o = new Object(); 
Object ref1 = o; 

W jego przypadku nie jest pojedynczą instancję obiektu, ale jest określany przez dwie zmienne obiektu: O i ref1.

Gdy obiekt nie jest już przywoływany przez zmienną obiektu, obiekt jest zbierany śmieci.

+0

Czy jesteś pewien, że to właśnie odnosi się do tego terminu? Zawsze myślałem, że to synonim zmiennej instancji. – arshajii

+0

Przechodzenie przez tę stronę http://documentation.basis.com/BASISHelp/WebHelp/gridctrl/object_variables.htm Twoja odpowiedź wygląda poprawnie .. +1 –

+0

@VishalK Żargon używany tam jest specyficzny dla BASIS. tj. w języku BASIS termin "zmienna obiektowa" ma określone, dobrze zdefiniowane znaczenie, które nie ma uniwersalnego zastosowania w innych językach i ogólnie w OOP. – arshajii

1

tl; dr; fmoe

natknąłem się na to samo pytanie w ciągu wykonywania przeglądu stwierdzono Cay Horstmann, Big Java, Wczesne Objects (John Wiley & Sons, 2013), 73.

Cay definiuje zmienną obiektową jako zmienną (której typem jest klasa), która przechowuje odniesienie do lokalizacji pamięci obiektu.

Rectangle box = new Rectangle(); 
  • box jest zmienna obiektu, która przechowuje odwołanie do lokalizacji pamięci nowo instancja Rectangle obiektu.

Może istnieć wiele zmiennych obiektu, które przechowują to samo odniesienie do lokalizacji pamięci obiektu.

Rectangle box = new Rectangle(5,10,20,30); 
    Rectangle box2 = box; 

Wywołanie mutator/metoda mutagennego (modyfikuje obiekt na którym metoda jest wywoływana) po obu obiektów zmiennych mutuje (modyfikuje) obiektu od zmienne obiektu lokalizacji pamięci tego samego obiektu za

box2.translate(15, 25); 
    System.out.println(box.getY()); // 35.0 
    System.out.println(box2.getY()); // 35.0 

To trochę zagmatwane, jeśli porównasz definicję Cay'a z informacjami z The Java Tutorials i wieloma innymi źródłami, ale uważam, że jest to odpowiedź na twoje pytanie po umieszczeniu w kontekście książek Cay'a.

Preferuję tę perspektywę => Miejsce w pamięci obiektu jest przechowywane w referencji do obiektu (zmienna obiektu na Cay).Kiedy wywołuję metodę na obiekcie, określam odwołanie do obiektu, a następnie operatora kropki (.), A następnie nazwę metody.

objectReference.method(); 

Jeśli interfejs publiczny klasy umożliwia dostęp do jednego lub więcej jest to instancja pola obiektu (aka zmienne instancji, zmienne obiektów, zmiennych składowych klasy, właściwości lub cechy ... w zależności od języka programowania i dokumentacji) to mogę do niego dostęp poprzez podanie odniesienia do obiektu, po kropce (operatora.), a następnie nazwę pola

objectReference.fieldName; 

Dlaczego wolisz to? Nie jestem fanem używania zmiennej jako rzeczownika zbyt wiele razy; przeciążona semantyka bagatela mój prosty umysł.

0

@Faaris Cervon: Zmienne obiektowe to zmienne, które nie tworzą żadnego obiektu, ale odnoszą się do jakiegoś obiektu .. exmp: Data d1 = nowa data();

d1 to obiekt.

data d2; d2 nie jest obiektem i nie odnosi się do żadnego obiektu, ale może pomieścić dowolny obiekt typu date. d2 = d1; // ważny

stąd d2 jest zmienną obiektową. Należy pamiętać, że zmienne obiektowe nie zawierają obiektów, ale dotyczą niektórych obiektów.

0

Znalazłem coś, co ci pomoże. Istnieje kilka słów, takich jak obiekt, zmienna obiektu i odniesienie do obiektu.

Zmienna obiektowa i odniesienie do obiektu są podobne w taki sposób, że zmienna obiektowa zapisuje odniesienie do obiektu, w którym jako odniesienie do obiektu opisuje położenie obiektu. (Może być mylony tu tak po prostu uważają je za takie same)

rozważyć przykład ::

Class Car {
....
....
}

AudiQ7; // S1
Car AudiQ8 = new Car(); // S2

Tutaj w S1 stworzyliśmy tylko obiekt. Znaczy, że nie odnosi się do pamięci.

W S2 stworzyliśmy zmienną obiektową/odniesienie oznacza, że ​​odnosi się do lokalizacji pamięci.

Powiązane problemy