Jeśli tworzymy nową klasę, musimy ją zainicjować (zapoczątkować, wprowadzić) . W tym celu wpisujemy:
public class Main {
public static void main(String[] args) {
Car porsche = new Car ();
}
}
powyżej stworzyliśmy nowy typ danych o nazwie porsche (rodzaj samochodu). Innymi słowy stworzyliśmy obiekt porsche, bazując na szablonie (klasie) Car. Możemy dodać kolejny obiekt na podstawie klasy Car :
public class Main {
public static void main(String[] args) {
Car porsche = new Car ();
Car holden = new Car();
}
}
Wpisując następnie „porsche.” pojawia nam się okno z metodami dostępnymi dla tego obiektu. Wyświetlane są one automatycznie z tzw. klasy podstawowej (bazowej) Javy zawsze wtedy, gdy tworzymy nowy obiekt. Możemy dodać nowe elementy. Jednak nie widać wśród nich komponentów (zmiennych), które wcześniej utworzyliśmy ( drzwi, koła, model itd).

Żeby mieć do nich dostęp należy wejść w klasę Car i zmienić modyfikator dostępu z „private” na „public”, by mogły być pola z klasy Car widoczne w innych klasach ( w tym przypadku w klasie Main):
package com.wordpress.programujeodzera;
public class Car {
public int doors;
public int wheels;
public String models;
public String engine;
public String colour;
}
wówczas, jeśli przejdziemy ponownie do klasy Main i ponownie wpisujemy „porsche.” to pojawia nam się lista metod („m) i pól („f”), które wcześniej utworzyliśmy w klasie Car.
Następnie dla obiektu porsche określamy pole model jako typ Carrera
package com.wordpress.programujeodzera;
public class Main {
public static void main(String[] args) {
Car porsche = new Car ();
Car holden = new Car();
porsche.model = "Carrera";
}
}
Teraz spróbujmy utworzyć metodę w klasie Car, która będzie dotyczyć wszystkich obiektów wewnątrz tej klasy. Chcemy sprawić, by metoda miała możliwość modernizacji (aktualizacji) modelu. Zmieniamy wszystkie pola w klasie Car na private i tworzymy metodę, wpisując:
public void setModel (void – ponieważ metoda ta nie zwraca danych)
kiedy zaczynamy wpisywać „set….” Intellij automatycznie podpowiada nam nasze zmienne do zmodernizowania, które wcześniej utworzyliśmy w klasie Car:

następnie wprowadzamy parametr:
String- ponieważ chcemy, aby inna klasa wysłała ciąg znaków (słowo), jaki chcę utworzyć i żeby była uaktualniona tutaj w klasie Car. Pojawia się tutaj inny problem, ponieważ mamy dwa różne typy zmiennych. Jest pole zdefiniowane w klasie Car i nazwane model oraz mamy też parametr „model” w naszej metodzie. Musimy być precyzyjni, który typ chcemy zmodernizować. W tym celu posłuży nam nowe keyword: „this„, kiedy odnosimy się do pola w tej klasie Car:
package com.wordpress.programujeodzera;
public class Car {
private int doors;
private int wheels;
private String model;
private String engine;
private String colour;
public void setModel(String model){
this.model = model;
}
}
Jeśli wrócimy teraz do klasy Main, zauważymy błąd, ponieważ zmieniliśmy wcześniej modyfikator public na private:

jeśli chcielibyśmy zaktualizować „model”, wpisujemy:
package com.wordpress.programujeodzera;
public class Main {
public static void main(String[] args) {
Car porsche = new Car ();
Car holden = new Car();
porsche.setModel("Carrera");
}
}
powyższy kod przywołuje metodę setModel (tzw. setter) dla naszego obiektu i aktualizuje go przypisując mu model Carrera. Jeśli uruchomimy powyższy kod, w oknie konsoli nic się nie pojawi.
Sprawdźmy co się stanie, gdy będziemy mieli zdefiniowaną zmienną Car porsche, ale nie zainicjujemy jej. Intelijj podkreśla na czerwono w kodzie porsche. – i informuje nas, że ta zmienna nie została zainicjowana:
dlatego należy pamiętać, żeby zainicjować zmienną przy użyciu keyword „new”. Jeśli np. wpiszemy keyword „null”, jak poniżej:
package com.wordpress.programujeodzera;
public class Main {
public static void main(String[] args) {
Car porsche = new Car ();
Car holden = new Car();
porsche = null;
porsche.setModel("Carrera");
}
}
wówczas w oknie konsoli wyświetli się nam:

NullPointerException – znaczy, że zdefiniowaliśmy typ : porsche, ale nie został on zainicjowany. Innymi słowy, nie stworzyliśmy obiektu z szablonu, który dotyczy klasy. Dlatego należy pamiętać, żeby słowo „new” zostało użyte.
Sprawmy teraz, żeby w konsoli coś się wyświetliło po uruchomieniu kodu.
Wracamy do naszej klasy Car. Utworzymy tzw. getter, będący metodą umożliwiającą pobranie jakichś wartości:
wpisując kod return this.m… wyświetlają nam się podpowiedzi Intellij:
oznacznik „f” oznacza field czyli pole, m- method czyli metodę, kłódka otwarta oznacza, że dana zmienna bądź metoda jest z modyfikatorem dostępu public (dostępna dla innych klas), a jeśli jest zamknięta – wtedy jest z modyfikatorem dostępu private.
package com.wordpress.programujeodzera;
public class Car {
private int doors;
private int wheels;
private String model;
private String engine;
private String colour;
public void setModel(String model){
this.model = model;
}
public String getModel (){
return this.model;
}
wytłuszczonym drukiem powyżej mamy metodę, która odwołuje się do innego miejsca, żeby został zwrócony model samochodu. Następnie otwieramy klasę Main i dopisujemy:
package com.wordpress.programujeodzera;
public class Main {
public static void main(String[] args) {
Car porsche = new Car ();
Car holden = new Car();
porsche.setModel("Carrera");
System.out.println("Model is " + porsche.getModel());
}
}
w oknie konsoli wyświetli się Model is Carrera:

jeśli wpiszemy kod:
System.out.println("Model is " + porsche.getModel());
przed ustawieniem modelu Carrera:
public class Main {
public static void main(String[] args) {
Car porsche = new Car ();
Car holden = new Car();
System.out.println("Model is " + porsche.getModel());
porsche.setModel("Carrera");
System.out.println("Model is " + porsche.getModel());
}
}
wówczas w oknie konsoli:

w oknie konsoli pojawiło się również „Model is null”. „Null” jest wewnętrzną wartością domyślną dla klas i dla ciągu znaków (String). Jeśli teraz wrócimy do naszej klasy Car zauważymy, że String jest tak naprawdę klasą. Tak więc mamy klasę String wewnątrz klasy Car. Tak samo model, silnik i kolor są klasami samymi w sobie ponieważ są typu String i są umieszczone w klasie o nazwie Car.
Dzięki użyciu settera setModel w klasie Car możemy ustawić prawidłowość – ang. validation.
Zapoczątkujmy test, który pozwoli nam zaakceptować tylko wartości będące porsche carrera i holden commodore dla tej metody:
package com.wordpress.programujeodzera;
public class Car {
private int doors;
private int wheels;
private String model;
private String engine;
private String colour;
public void setModel(String model){
String validModel = model.toLowerCase();
if(validModel.equals("carrera")||validModel.equals("commodore")){
this.model = model;}
else{this.model = "Unknown";}
}
public String getModel (){
return this.model;
}
}
jeśli teraz otworzymy klasę Main i uruchomimy kod, pojawi się w konsoli:

jeśli zaś w klasie Main wpiszemy w miejscu setModel inny model samochodu porsche, np. 911:
package com.wordpress.programujeodzera;
public class Main {
public static void main(String[] args) {
Car porsche = new Car ();
Car holden = new Car();
porsche.setModel("911");
System.out.println("Model is " + porsche.getModel());
}
}
w oknie konsoli pojawi się zdanie mówiące, że model ten jest nieznany (unknown):

dzieje się tak, ponieważ w naszej klasie Car określiliśmy prawidłowość (walidację) – ustawiliśmy w metodzie setModel, że prawidłowy model (validModel) samochód ma być albo marki porsche carrera albo holden commodore.