Klasy i obiekty
/* Klasy.java */
// Odwołanie do zmiennych statycznych i metod statycznych
// określonych poza klasą, w której następuje odwołanie.
// Zmienne statyczne i metody statyczne są związane z klasą.
// Zmienne i metody statyczne nazywa się niekiedy zmiennymi
// i metodami klasy. Dostęp do zmiennych statycznych i metod
// statycznych określonych w danej klasie uzyskujemy przez
// nazwę danej klasy. Jeśli zmienna lub metoda statyczna,
// do której chcemy uzyskać dostęp znajduje się w tej samej
// klasie co odwołanie do niej, to nazwę klasy można pominąć.
// Metody statyczne określone w danej klasie mają bezpośredni
// dostęp tylko do zmiennych statycznych i metod statycznych
// danej klasy.
// Zmienne statyczne określa się bezpośrednio w ciele klasy,
// natomiast zmienne lokalne określa się w ciałach metod i
// konstruktorów. Zmienne statyczne i obiektowe automatycznie
// przyjmują wartości domyślne, a zmienne lokalne muszą być
// inicjowane.
class Inna
{
static int a; // <=> static int a = 0;
static void metodaStatyczna()
{
System.out.println("Metoda statyczna klasy Inna.");
System.out.println("a = " + a); // dostęp bezpośredni
}
}
public class Klasy
{
public static void main(String[] args)
{
Inna.metodaStatyczna();
Inna.a = 1; // dostęp przez nazwę klasy
Inna.metodaStatyczna();
}
}
Metoda statyczna klasy Inna.
a = 0
Metoda statyczna klasy Inna.
a = 1
Press any key to continue...
/* KlasyPrzyklad.java */
// Odwołanie do zmiennej statycznej klasy Math
// i wywołanie metody statycznej z klasy Math.
// Klasa Math należy do pakietu java.lang
public class KlasyPrzyklad
{
public static void main(String[] args)
{
System.out.println("PI = " + Math.PI);
System.out.println("2^3 = " + (int)Math.pow(2,3));
}
}
PI = 3.141592653589793
2^3 = 8
Press any key to continue...
/* Obiekty.java */
// Klasa określa szablon, na podstawie którego można tworzyć nowe obiekty danej
// klasy. Obiekty danej klasy tworzy się przy pomocy wyrażenia rozpoczynającego
// się od słowa kluczowego new, po którym następuje nazwa konstruktora wraz
// z parametrami przekazywanymi do niego. Konstruktor obiektów danej klasy
// ma zawsze taką samą nazwę jak dana klasa. Można zatem powiedzieć, że klasa
// obiektu czyli inaczej typ obiektu określony jest przez nazwę konstruktora.
// Wyrażenie, które tworzy nowy obiekt danej klasy zwraca referencję do tego
// obiektu. Referencję do obiektu danej klasy można przypisać do zmiennej,
// która ma typ danej klasy albo typ dowolnej klasy nadrzędnej, po której
// dziedziczy dana klasa. W momencie tworzenia nowego obiektu danej klasy,
// zmienne obiektowe i metody obiektowe określone w danej klasie są kopiowane
// do tworzonego obiektu. Zmienna referencyjna pozwala odwołać się do zmiennych
// obiektowych i wywołać metody obiektowe na rzecz obiektu, do którego
// przechowuje referencję. Zachowanie obiektów określone jest przez metody
// obiektowe, a własności obiektów określone są przez zmienne obiektowe.
// Oprócz tego, klasa określa zmienne i metody statyczne, które są związane
// z samą klasą. Zachowanie klasy określone jest przez metody statyczne,
// a własności klasy określone są przez zmienne statyczne. Metody obiektowe
// wywołuje się na rzecz obiektów przez referencje do obiektów, natomiast
// metody statyczne danej klasy można wywołać przez nazwę danej klasy albo
// przez referencję, która ma typ danej klasy.
// Metody obiektowe określone w danej klasie mają bezpośredni dostęp
// do zmiennych statycznych i obiektowych oraz metod statycznych oraz
// innych metod obiektowych danej klasy. Metody statyczne określone
// w danej klasie mają bezpośredni dostęp tylko do zmiennych statycznych
// i metod statycznych danej klasy.
// Zmienne statyczne i obiektowe określa się bezpośrednio w ciele klasy,
// natomiast zmienne lokalne określa się w ciałach metod i konstruktorów.
class Szablon
{
int a; // zmienna obiektowa // <=> int a = 0;
static int b; // zmienna statyczna // <=> static int b = 0;
Szablon() // konstruktor
{
System.out.println("Utworzono obiekt klasy Szablon.");
}
void metodaObiektowa()
{
System.out.println("Metoda obiektowa klasy Szablon.");
System.out.println("a = " + a); // dostęp bezpośredni
System.out.println("b = " + b); //
}
static void metodaStatyczna()
{
System.out.println("Metoda statyczna klasy Szablon.");
// System.out.println("a = " + a);
System.out.println("b = " + b); // dostęp bezpośredni
}
}
public class Obiekty
{
public static void main(String[] args)
{
Szablon.b = 1; // dostęp przez nazwę klasy
Szablon.metodaStatyczna(); //
Szablon s = new Szablon(); // tworzymy obiekt klasy Szablon
s.a = 2; // dostęp przez referencję
s.b = 3; //
//
s.metodaObiektowa(); //
s.metodaStatyczna(); //
}
}
Metoda statyczna klasy Szablon.
b = 1
Utworzono obiekt klasy Szablon.
Metoda obiektowa klasy Szablon.
a = 2
b = 3
Metoda statyczna klasy Szablon.
b = 3
Press any key to continue...