Referencja

Spis treści

Rozróżnienie tego, czym jest obiekt, a czym jest referencja jest kluczem do zrozumienia w jaki sposób funkcjonuje programowanie obiektowe. Nie tylko w Javie, ale w dowolnym języku programowania.

Klasy

Programowanie obiektowe opiera się na definiowaniu klas i obiektów. Klasa jest szablonem na podstawie którego może powstawać wiele podobnych egzemplarzy (instancji). Klasa może zawierać cechy w postaci pól i zachowanie w postaci metod. Przykładowa klasa reprezentująca produkt może wyglądać w taki sposób:

Product.java

class Product {
    private String name;
    private double price;

    public Product(String name, double price) {
        this.name = name;
        this.price = price;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }
    
    public double getBruttoPrice() {
        return price * 1.23;
    }
}

Obiekty

Klasa Product jest szablonem, na podstawie którego możemy teraz tworzyć obiekty. Obiekty tworzymy przez wywołanie konstruktora przy pomocy instrukcji new.

Shop.java

class Shop {
    public static void main(String[] args) {
        Product product1 = new Product("mleko", 3.2);
        Product product2 = new Product("czekolada", 2.4);
    }
}

W powyższym programie utworzyliśmy dwa obiekty i przypisaliśmy je do dwóch różnych zmiennych product1 i product2.

Kurs Java

Referencje

Referencją nazywamy zmienną, która wskazuje na obiekt. W powyższym przykładzie powiemy więc, że product1 i product2 są dwoma referencjami wskazującymi na dwa różne obiekty w pamięci. Możesz to sobie wyobrazić schematycznie w taki sposób:

java referencje

W praktyce String także jest klasą i "mleko" oraz "czekolada" są obiektami, więc pola name w obiektach, na które wskazują referencje product1 i product2 także są referencjami.

java referencje string

Z punktu widzenia pamięci, referencje są po prostu wartością liczbową, która określa lokalizację danego obiektu w pamięci. Referencje, które utworzone są jako zmienne lokalne w ramach metod przechowywane są w ramkach pamięci, które przechowywane są w obszarze pamięci o nazwie stos. Obiekty natomiast przechowywane są na stercie.

Dyskusja i komentarze

Masz pytania do tego wpisu? Może chcesz się podzielić spostrzeżeniami? Zapraszamy dyskusji na naszej grupie na Facebooku.