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:
- Deklaracja – określenie typu danych i nadanie zmiennej nazwy.
private int number
- Inicjalizacja – przypisanie wartości do zmiennej.
number = 2
Struktura deklaracji zmiennej
-
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). -
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
-
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;