Java paskaita Nr. 4 – Konstruktorius
|Šioje paskaitoje susipažinome su Java konstruktoriais. Techninis apibrėžimas yra Konstruktorius – tai metodas, kuris sukuria klasės objektus ir nustato klasės objekto kintamųjų pradines reikšmes.
Konstruktorius
Iš esmės reikalingas priskirti standartines reikšmes, paleisti ir vykdyti reikiamus objektus.
Nenaudojant kompiliatoriaus viską galima rašyti ir pasileisti naudojant: https://www.jdoodle.com/online-java-compiler
class Taskas { protected int x, y; // klasės kintamieji // konstruktoriai public Taskas () { x = 0; y = 0;} public Taskas (int pX, int pY) { x = pX; y = pY;} // metodai public void Pereiti (int n_X, int n_Y) { x = n_X; y =n_Y;} public int koksX( ) { return x;} public int koksY( ) { return y;} public static void main(String args[ ]) { // objektų kūrimas public Taskas t1 =new Taskas(); // sukuriami objektai t1 ir t2 public Taskas t2 = new Taskas(5.0, -7,0); // veiksmai su objektais System.out.println(“t1.x= " + t1.x ); System.out.println(“t1.y= " + t1.y); System.out.println(“t2.x= " + t2.x ); System.out.println(“t2.y= " + t2.y); int a =t1.koksX( ); System.out.println(“a= " + a); t2.Pereiti (10,10); System.out.println(“t2.x= " + t2.x ); System.out.println(“t2.y= " + t2.y); } }
Užduotis
[expand title=”Suskleisti” expanded=”true”]
Aprašykite klasę Apskritimas. Klasės apraše turi būti:
KINTAMIEJI:
- sveikojo tipo x ir y koordinatės p
- lokštumoje;realusis r – apskritimo spindulys.
KONSTRUKTORIAI:
- Konstruktorius be parametrų, kuri klasės kintamiesiems nustato pradines reikšmes x=0; y=0; r=0.
- Konstruktorius su parametrais, kurį kviečiant galima nustatyti klasės kintamųjų reikšmes.
METODAI:
- Metodas su parametrais, kuris leidžia pakeisti visų kintamųjų reikšmes.
- Metodas, kuris skaičiuoja ir grąžina apskritimo plotą.
- Metodas, kuris skaičiuoja ir grąžina apskritimo perimetrą.
- Metodas, kuris atspausdina visų kintamųjų reikšmes.
- Metode main sukurti tris klasės Apskritimas tipo objektus a1, a2 ir a3. Objektas a1 kuriamas iškviečiant konstruktorių be parametrų. Po to iškviesti metodą ir pakeisti reikšmes į 1,1,1. Suskaičiuoti plotą ir perimetrą. Rezultatus parodyti kompiuterio ekrane.
- Objektas a2 kuriamas iškviečiant konstruktorių be parametrų, kuris nustato reikšmes 0,0,0. Po to iškviesti metodą ir pakeisti reikšmes į 2,2,2. Suskaičiuoti plotą ir perimetrą. Rezultatus parodyti kompiuterio ekrane.
- Objektas a3 kuriamas iškviečiant konstruktorių su parametrais, kuris nustato reikšmes 3,3,3. Suskaičiuoti plotą ir perimetrą. Rezultatus parodyti kompiuterio ekrane.
Pavyzdys
public class Taskas { int x, y; // klasės kintamieji // konstruktoriai public Taskas () { x = 0; y = 0;} public Taskas (int pX, int pY) { x = pX; y = pY;} // metodai public void Pereiti (int n_X, int n_Y) { x = n_X; y =n_Y;} public int koksX( ) { return x;}
[/expand]
KINTAMIEJI
Visą užduoti paeiliui nagrinėsime žingsnis po žingsnio ir pradėsime rašyti programą nuo nulio.
- sveikojo tipo x ir y koordinatės plokštumoje
- realusis r – apskritimo spindulys.
Sukuriame public klasę Apskritimas ir ją aprašome. Suvedame kintamuosiuos.
public class Apskritimas { int x, y; //sveikasis double r; //realusis }
KONSTRUKTORIAI
- Konstruktorius be parametrų, kuri klasės kintamiesiems nustato pradines reikšmes x=0; y=0; r=0.
- Konstruktorius su parametrais, kurį kviečiant galima nustatyti klasės kintamųjų reikšmes.
public class Apskritimas { int x, y; double r; //konstruktoriai public Apskritimas () {x=0; y=0; r=0}; //be parametrų public Apskritimas (int xA, int yA, double rA) {x = xA; y = yA; r = rA;} //su parametrais }
METODAI
1 metodas
Metodas su parametrais, kuris leidžia pakeisti visų kintamųjų reikšmes.
Šis metodas iš pažiūros niekuo nesiskiria nuo konstruktoriaus. Nes iš esmės jį naudojant jis perima konstruktoriaus su argumentais vaidmenį. Jis yra patogus naudoti programoje norint atlikti papildomus veiksmus ir pakeisti pradines reikšmes, jeigu pradinės turi keisti programoje.
Šį metodą išbandysime, tačiau jeigu mūsų reikšmės nesikeičia visos programos naudojimo metu šio metodo galime ir nenaudoti ir paduoti pradines reikšmes tiesiai per konstruktorių. Plačiau, apie tai kitame etape.
public class Apskritimas { int x, y; double r; //konstruktoriai public Apskritimas () {x=0; y=0; r=0;} public Apskritimas (int xA, int yA, double rA) {x = xA; y = yA; r = rA;} } //metodas - pakeisti reiškmes public void Pakeisti (int n_X, int n_Y, double n_r) { x = n_X; y =n_Y; r = n_r;}
Pagrindinis metodas
Kad būtų galima paleisti kodą. Būtinas pagrindinis metodas.
public static void main(String[] args) { }
Pridėjus šią eilutę, jau yra visos pagrindinės dalys ir konsolė nebemėtys klaidų. Ir pabandymui pridėjome System.out.print, kuri atspausdins skliausteliuose esanti tekstą.
public class Apskritimas { int x, y; double r; public static void main(String[] args) { System.out.print("x=" + " y=" + " r=" ); } //konstruktoriai public Apskritimas () {x=0; y=0; r=0;} public Apskritimas (int xA, int yA, double rA) {x = xA; y = yA; r = rA;} //metodas - pakeisti reiškmes public void Pakeisti (int n_X, int n_Y, double n_r) { x = n_X; y =n_Y; r = n_r;} }
Rezultatas:
x= y= r=
2 metodas
Metodas, kuris skaičiuoja ir grąžina apskritimo plotą.
Čia sukuriame metodą su argumentu, kuris naudojantis apskritimo ploto formulę gražins sumos reikšmę. Šis metodas nenaudoja argumentų.
//metodas 2 - skaičiuoti apskritimo plotą s = pi * r * r public double koksPl () { double suma = 0; suma = 3.14 * (r * r); return suma; }
3 metodas
Metodas, kuris skaičiuoja ir grąžina apskritimo perimetrą.
Principas toks pats kaip ir antro metodo, tik skaičiuojame perimetrą.
//metodas 3 - skaičiuoti apskritimo perimetrą p = 2 * pi * r public double koksPer () { double perimetras = 2 * 3.14 * r; return perimetras; }
Metodų vykdymas
Pagrindiniame metode pridedame dvi eilutes, kuri viena priskiria klasei Apskritimas O1 ir naudodami jį galime vykdyti savo sukurtus metodus.
public static void main(String[] args) { Apskritimas O1 = new Apskritimas(); //konstruktoriaus priskyrimas 01 O1.Pakeisti(2, 4, 6); //metodo vykdymas }
Pilnas parašytas kodas su mūsų sukurtais metodais. Ir jų paleidimu. Metode Pakeisti pridėti eilutė, kuri atspausdins mūsų paduotas 2, 4, 6 reikšmes į konsolę.
public class Apskritimas { int x, y; double r; public static void main(String[] args) { Apskritimas O1 = new Apskritimas(); //konstruktoriaus paleidimo mechanizmas O1.Pakeisti(2, 4, 6); } //konstruktoriai public Apskritimas () {x=0; y=0; r=0;} public Apskritimas (int xA, int yA, double rA) {x = xA; y = yA; r = rA;} //metodas - pakeisti reiškmes public void Pakeisti (int n_X, int n_Y, double n_r) { x = n_X; y =n_Y; r = n_r; System.out.print("x=" + x + " y=" + y + " r=" + r); } //metodas 2 - skaičiuoti apskritimo plotą s = pi * r * r public double koksPl () { double suma = 0; suma = 3.14 * (r * r); return suma; } //metodas 3 - skaičiuoti apskritimo perimetrą p = 2 * pi * r public double koksPer () { double perimetras = 2 * 3.14 * r; return perimetras; } }
Rezultatas:
x=2 y=4 r=6.0
4 metodas
Metodas, kuris atspausdina visų kintamųjų reikšmes.
Sukuriame metodą, kuris spausdins reikšmes. Jį tai pat vykdysime naudoti O1. Rašysime: O1.Spausdinti();
//metodas 4 - skirtas spausdinti public void Spausdinti () { System.out.print("x=" + x + " y=" + y + " r=" + r); System.out.println(""); }
5 dalis
Metode main sukurti tris klasės Apskritimas tipo objektus a1, a2 ir a3. Objektas a1 kuriamas iškviečiant konstruktorių be parametrų. Po to iškviesti metodą ir pakeisti reikšmes į 1,1,1. Suskaičiuoti plotą ir perimetrą. Rezultatus parodyti kompiuterio ekrane.
Jau turime visus metodus ir dabar juos panaudosime.
Visas programos kodas lieka toks pats, koreguojame tik pagrindinį metodą. Tik pridedame dar vieną eilutę System.out.println joje paleidžiame mūsų susikurtus ploto ir perimetro skaičiavimo metodus.
public static void main(String[] args) { Apskritimas O1 = new Apskritimas(); //konstruktoriaus paleidimo mechanizmas O1.Pakeisti(2, 4, 6); O1.Spausdinti(); System.out.println("a1 Plotas " + O1.koksPl() + "; a1 Perimetras " + O1.koksPer() + ";"); }
Rezultatas:
x=2 y=4 r=6.0 a1 Plotas 113.04; a1 Perimetras 37.68;
Konstruktorių naudojimas
Lygiai tą patį rezultatą galime pasiekti ir nenaudodami Pakeisti() metodo. Metodą iškomentuojame // ir jo nenaudojame. O reikšmes įrašome tiesiai čia: Apskritimas O1 = new Apskritimas(2, 4, 6);
Tokiu atveju programa naudos mūsų susikurtą konstruktorių:
public Apskritimas (int xA, int yA, double rA) {x = xA; y = yA; r = rA;}
Pakeistas kodas
public static void main(String[] args) { Apskritimas O1 = new Apskritimas(2, 4, 6); O1.Spausdinti(); System.out.println("a1 Plotas " + O1.koksPl() + "; a1 Perimetras " + O1.koksPer() + ";"); }
5 metodas
Kadangi struktūrą kitų užduočių yra tokia pati ir būtų paprasčiau užduotis susikursime metodą, kuris atspausdins visas reikšmes iš karto.
public void SpausdintiAll () { System.out.print("x=" + x + " y=" + y + " r=" + r ); System.out.println(""); System.out.println("Plotas " + koksPl() + "; Perimetras " + koksPer() + ";"); System.out.println(""); }
Pagrindinio argumento pakeitimai:
public static void main(String[] args) { Apskritimas O1 = new Apskritimas(2, 4, 6); O1.Spausdinti(); System.out.println("a1 Plotas " + O1.koksPl() + "; a1 Perimetras " + O1.koksPer() + ";"); System.out.println(""); Apskritimas O2 = new Apskritimas(2, 2, 2); O2.SpausdintiAll(); Apskritimas O3 = new Apskritimas(3, 3, 3); O3.SpausdintiAll(); }
Rezultatas:
x=2 y=4 r=6.0 a1 Plotas 113.04; a1 Perimetras 37.68; x=2 y=2 r=2.0 Plotas 12.56; Perimetras 12.56; x=3 y=3 r=3.0 Plotas 28.26; Perimetras 18.84;
Galutinis programos kodas
public class Apskritimas { int x,y; double r; public static void main(String[] args) { Apskritimas O1 = new Apskritimas(1, 1, 1); // System.out.println("a1 Plotas " + O1.koksPl() + "; a1 Perimetras " + O1.koksPer() + ";"); // O1.Pakeisti(4, 3, 5); // System.out.println("a1 Plotas " + O1.koksPl() + "; a1 Perimetras " + O1.koksPer() + ";"); O1.SpausdintiAll(); Apskritimas O2 = new Apskritimas(2, 2, 2); // System.out.println("a2 Plotas " + O2.koksPl() + "; a2 Perimetras " + O2.koksPer() + ";"); // O2.Pakeisti(2, 2, 2); // System.out.println("a2 Plotas " + O2.koksPl() + "; a2 Perimetras " + O2.koksPer() + ";"); O2.SpausdintiAll(); Apskritimas O3 = new Apskritimas(3, 3, 3); // System.out.println("a3 Plotas " + O3.koksPl() + "; a3 Perimetras " + O3.koksPer() + ";"); // O3.Pakeisti(9, 8, 7); // System.out.println("a3 Plotas " + O3.koksPl() + "; a3 Perimetras " + O3.koksPer() + ";"); O3.SpausdintiAll(); } //konstruktoriai public Apskritimas () {x=0; y=0; r=0;} public Apskritimas (int xA, int yA, double rA) {x = xA; y = yA; r = rA;} //metodai //public void Pakeisti (int n_X, int n_Y, double n_r) { x = n_X; y =n_Y; r = n_r;} public double koksPl () { double suma = 0; suma = 3.14 * (r * r); return suma; } public double koksPer () { double perimetras = 2 * 3.14 * r; return perimetras; } public void Spausdinti () { System.out.print("x=" + x + " y=" + y + " r=" + r); System.out.println(""); } public void SpausdintiAll () { System.out.print("x=" + x + " y=" + y + " r=" + r ); System.out.println(""); System.out.println("Plotas " + koksPl() + "; Perimetras " + koksPer() + ";"); System.out.println(""); } }