Zmienne

Programowanie polega na operacjach wykonywanych na różnych strukturach danych przy użyciu algorytmów, czyli zestawów instrukcji definiujących, jakie operacje mają być wykonane na danych. Aby przeprowadzać te operacje, dane muszą być przechowywane w pamięci komputera w sposób umożliwiający ich łatwy odczyt i zapis. Właśnie do tego służą zmienne.


Zmienne umożliwiają rezerwację określonego obszaru w pamięci RAM (Zarządzanie tym miejscem (adresowanie) odbywa się automatycznie przez kompilator lub środowisko wykonawcze), w którym można przechowywać dane. Dzięki zmiennym programista ma dostęp do tych danych. Zmienne stanowią podstawowy sposób organizowania danych w kodzie.


W języku Java proces tworzenia zmiennej składa się z dwóch etapów:
  1. Deklaracja – określenie typu danych i nadanie zmiennej nazwy. private int number
  2. Inicjalizacja – przypisanie wartości do zmiennej. number = 2

Struktura deklaracji zmiennej

  1. akcesor – Określa poziom dostępu do zmiennej (opcjonalny):
    public – zmienna jest dostępna dla wszystkich.
    private – zmienna jest dostępna tylko w obrębie danej klasy.
    protected – zmienna jest dostępna w klasie i jej podklasach.
    brak akcesora – dostęp jest ograniczony do pakietu (domyślny).

  2. typ zmiennej – Określa typ danych, jakie zmienna może przechowywać.
    Typy proste (prymitywne): int double boolean char
    Typy złożone (referencyjne) (obiektowe): String List Map

  3. identyfikator zmiennej – Nazwa identyfikująca, która umożliwia odwoływanie się do niej w kodzie.


Zmienna finalna

Wartość zmiennej final można przypisać tylko raz. Zmienna tak oznaczona staje się stałą lub niezmiennym wskaźnikiem w przypadku obiektów. Dla obiektów zmienna final oznacza, że wskaźnik na obiekt nie może zostać zmieniony, ale zawartość obiektu może być modyfikowana.

final int x = 10;
x = 20; // Błąd: nie można zmienić wartości zmiennej finalnej

Zmienna final musi być zainicjalizowana w momencie deklaracji lub w konstruktorze (w przypadku pól klasy).

class Person {
    final String name;
    Person(String name) {
        this.name = name; // Inicjalizacja w konstruktorze
    }
}

Zakres (Scope and Scope Chain)

inprogress..


Typy danych

Typ danych to specyfikacja określająca, jakiego rodzaju wartość może być przechowywana w zmiennej (literał, argument funkcji, wynik funkcji lub dowolna inna wartość). Typ danych definiuje:

  • Rozmiar pamięci, jaką dana zmienna zajmie.
  • Operacje, jakie można wykonywać na tej zmiennej.
  • Zakres wartości, jakie można przechowywać w tej zmiennej.

W zapisie niektórych liczb (np. long lub float) dodaje się literkę na końcu cyfry, tzw. sufiks, który informuje kompilator, jakiego typu jest dana liczba. Sufiks może być zarówno z małej, jak i z dużej litery, choć w przypadku typu long zaleca się stosowanie dużej litery L, aby uniknąć pomyłki z cyfrą 1. W przypadku typu double (zmiennoprzecinkowego podwójnej precyzji) sufiks jest opcjonalny, ponieważ liczby zmiennoprzecinkowe bez sufiksu są domyślnie traktowane jako double.


Liczby stałoprzecinkowe:

  • Name
    byte
    Type
    prymityw
    Description

    Alokuje 1 bajt(8 bitów) w pamięci, a co za tym idzie można przy jego pomocy zapisać liczby z zakresu od -128 do 127 (2^8=256).

  • Name
    short
    Type
    prymityw
    Description

    Slokuje 2 bajty(16 bitów) w pamięci, a co za tym idzie można przy jego pomocy zapisać liczby z zakresu od -32768 do 32767.

  • Name
    int
    Type
    prymityw
    Description

    Alokuje 4 bajty (32 bity) w pamięci. Zakres od -2 147 483 648 do 2 147 483 647 (2^32 wartości).

  • Name
    long
    Type
    prymityw
    Description

    Alokuje 8 bajtów (64 bity) w pamięci. Zakres od -9 223 372 036 854 775 808 do 9 223 372 036 854 775 807 (2^64 wartości).


Liczby zmiennoprzecinkowe:

  • Name
    float
    Type
    prymityw
    Description

    Alokuje 4 bajty (32 bity) w pamięci i pozwala zapisać liczby zmiennoprzecinkowe z dokładnością do około 6-7 miejsc po przecinku.

  • Name
    double
    Type
    prymityw
    Description

    Alokuje 8 bajtów (64 bity) w pamięci i pozwala zapisać liczby zmiennoprzecinkowe z dokładnością do około 15-16 miejsc po przecinku.


Wartośc logiczna:

  • Name
    boolean
    Type
    prymityw
    Description

Pojedynczy znak:

  • Name
    char
    Type
    prymityw
    Description

Klasa, która reprezentuje ciąg znaków (tekst):

  • Name
    String
    Type
    referencyjne
    Description

To opakowująca klasa (wrapper class) dla typu int:

  • Name
    Integer
    Type
    referencyjne
    Description

Typy danych

// Liczby całkowite
byte a = 125;
System.out.println("Typ a: byte, wartość: " + a);

short b = -22556;
System.out.println("Typ b: short, wartość: " + b);

int c = 1230000;
System.out.println("Typ c: " + ((Object)c).getClass().getSimpleName());

long d = 254555455672L;
System.out.println("Typ d: " + ((Object)d).getClass().getSimpleName());

// Typy zmiennoprzecinkowe
float a = 12.0005f;
System.out.println("Typ a: float, wartość: " + a);

double b = 12.000000005d;
System.out.println("Typ b: double, wartość: " + b);

// Typ logiczny
boolean a = false;
boolean b = true;
System.out.println("Typ a: boolean, wartość: " + a);
System.out.println("Typ b: boolean, wartość: " + b);

// Typ znakowy
char a = 'y';
char b = '\t';
System.out.println("Typ c: char, wartość: " + c);
System.out.println("Typ d: char, wartość: \\t (tabulator)");

//Podsumowanie
byte a = 10
short b = 2000
int c = 100000
long d = 100000L
float e = 3.14f
double f = 3.14159;
char g = 'A';
boolean h = true;