Programa, klasės, objektai |
Pagrindinis pavyzdys |
Klasių iškvietimas |
Klasės aprašymas |
Metodų aprašymas |
Klasės konstruktoriai |
Klasių paketas | Užduotis |
import java.awt.*; //1 import java.awt.event.*; import java.applet.*; import java.util.StringTokenizer; //4 class Braizymas extends Canvas{ //5 Color spalva; //6 int x0,y0; //7 Braizymas(){ //8 spalva=Color.black; x0=0; y0=0;} //10 Braizymas(Color sp){ //11 spalva=sp; x0=0; y0=0;} Braizymas(Color sp, int x, int y){ spalva=sp; x0=x; y0=y;} //16 public void apskritimas(int i,int j){ //17 Graphics g=getGraphics(); g.setColor(spalva); g.translate(x0,y0); g.drawOval(i,j,50,50); }} //21 class Aritmetika{ //22 int n; //23 Aritmetika(){n=10;} //24 Aritmetika(int m){n=m;} //25 public int sandauga(int i, int j){ //26 return ((i*j)%n);} //27 public int suma(int i, int j){ //28 return ((i+j)%n);}} //29 public class Kelios_klases //30 extends Applet implements ActionListener{ //32 Button mbr, msk1, msk2; //33 TextField t; //34 Aritmetika a10, a5; //35 Braizymas br; //36 public void init() { //37 setLayout(new BorderLayout()); mbr= new Button("brezti"); mbr.addActionListener(this); add("North",mbr); msk1= new Button("skaiciuoti mod 10"); msk1.addActionListener(this); add("East",msk1); msk2= new Button("skaiciuoti mod 5"); msk2.addActionListener(this); add("West",msk2); t= new TextField(); add("South",t); //49 a10= new Aritmetika(); //50 a5= new Aritmetika(5); //51 br= new Braizymas(); //52 add("Center", br);} public void //53 actionPerformed(ActionEvent u){ int a, b; if (u.getSource()==mbr){ try{StringTokenizer str= new StringTokenizer(t.getText()); br.apskritimas(Integer.parseInt(str.nextToken()), Integer.parseInt(str.nextToken())); } catch (Exception e){ t.setText("Ivedimo klaidos!!!"); }} if (u.getSource()==msk1){ try{StringTokenizer str= new StringTokenizer(t.getText()); a=Integer.parseInt(str.nextToken()); b=Integer.parseInt(str.nextToken()); t.setText("Skaičių "+a+ " ir "+b+" suma moduliu "+10+" lygi "+ a10.suma(a,b)+" o sandauga "+ //70 a10.sandauga(a,b));} catch (Exception e){ t.setText("Ivedimo klaidos!!!"); }} if (u.getSource()==msk2){ try{StringTokenizer str= new StringTokenizer(t.getText()); a=Integer.parseInt(str.nextToken()); b=Integer.parseInt(str.nextToken()); t.setText("Skaičių "+a+ " ir "+b+" suma moduliu "+5+" lygi "+ a5.suma(a,b)+" o sandauga "+a5.sandauga(a,b));} catch (Exception e){ t.setText("Ivedimo klaidos!!!"); }} }}
[modifikatoriai] class klasės_vardas [extends superklasė] [implements metodų_rinkinio_vardas]Laužtiniuose skliaustuose nurodytų parametrų gali nebūti. Jeigu modifikatorių nėra (kaip mūsų pavyzdyje), tai ši klasė bus prieinama tik to paties failo klasėms. Jeigu reikia, kad klasė būtų prieinama kitoms to paties paketo klasėms, o taip pat ir klasėms nesančioms šiame pakete, reikia nurodyti modifikatorių public. Tačiau tame pačiame faile gali būti tik viena klasė su šiuo modifikatoriumi ir pats failas turi vadintis tuo pačiu vardu kaip ir ši klasė. Vadinasi, jeigu reiktų, kad klase Braizymas galėtų naudotis ne tik šio failo klasės, turėtume išsaugoti šią klasė atskirame faile ir nurodyti modifikatorių public.
[naudojimo specifikatorius] [static] [abstract] [final] [native] [synchronized] duomenų_tipas metodo_vardas ([parametrai], [parametrai]...) [throws išimčių_sąrašas]Naudojimo specifikatoriai nurodo, iš kur galima išsikviesti metodą. Specifikatoriai ir apribojimai, kuriuos jie nustato nurodyti lentelėje.
Specifikatorius | Iš klasės | Iš dukterinės klasės | Iš paketo |
public | galimas | galimas | galimas |
private | galimas | negalimas | negalimas |
protected | galimas | galimas | galimas |
nėra | galimas | negalimas | galimas |
public Color metodas(){ Color spalva; ...operacijos, sukuriančios kintamąjį spalva... return spalva; }Jeigu metodas neperduoda jokių duomenų, tai vietoje duomenų tipo rašome void .
public Color metodas(int param){ Color spalva; ...operacijos, sukuriančios kintamąjį spalva... return spalva; }
... Button mygt=new Button(); Button mygt1=new Button("Kitas mygtukas"); ...iškviečia klasės Button konstruktorius, kad jie sukurtų du mygtukų klasės objektus. Jau ir šis pavyzdys rodo, kad klasė gali turėti ne vieną konstruktorių. Iš tiesų - natūralu, kad tos pačios klasės objektus galime kurti įvairiai: kartais nurodome visus parametrus, kartais paliekame standartines dalies parametrų reikšmes ir pan. Klasėje Braizymas numatyti net trys konstruktoriai, o klasėje Aritmetika - du. 50-51 eilutėse sukuriami du klasės Aritmetika objektai, pasinaudojant dviem skirtingais konstruktoriais. Tačiau jeigu klasės aprašyme nenurodome, kokie turi būti klasės konstruktoriai, tai kompiliuojant Java naudojasi ,,numatytuoju" konstruktoriumi ir vis tiek sukuria objektus. Pavyzdžiui, trečiosios klasės Kelios_klasės kode konstruktorius neaprašytas, tačiau joje yra metodas init(), kurio pakanka objektui sukurti.
public class Mano_klasė extends Draugo_klasė{ Mano_klasė(){ super(); } .... }Klasėje aprašytas keistas konstruktorius - jis sudarytas iš vieno žodelio super(). Šis žodelis reiškia, kad iškviečiamas superklasės (t.y. klasės Draugo_klasė) konstruktorius.
package mano_irankiai; import java.awt.*; public class Braizymas extends Canvas{ Color spalva; int x0,y0; public Braizymas(){ spalva=Color.black; x0=0; y0=0;} public Braizymas(Color sp){ spalva=sp; x0=0; y0=0;} public Braizymas(Color sp, int x, int y){ spalva=sp; x0=x; y0=y;} public void apskritimas(int i,int j) Graphics g=getGraphics(); g.setColor(spalva); g.translate(x0,y0); g.drawOval(i,j,50,50); }}Klasė Aritmetika
package mano_irankiai; public class Aritmetika{ int n; public Aritmetika(){n=10;} public Aritmetika(int m){n=m;} public int sandauga(int i, int j){ return ((i*j)%n);} public int suma(int i, int j){ return ((i+j)%n);}}Klasė Kelios_klases
import java.awt.*; import java.awt.event.*; import java.applet.*; import java.util.StringTokenizer; import mano_irankiai.*; public class Kelios_klases extends Applet implements ActionListener{ Button mbr, msk1, msk2; TextField t; Aritmetika a10, a5; Braizymas br; public void init() { setLayout(new BorderLayout()); mbr= new Button("brezti"); mbr.addActionListener(this); add("North",mbr); msk1= new Button("skaiciuoti mod 10"); msk1.addActionListener(this); add("East",msk1); msk2= new Button("skaiciuoti mod 5"); msk2.addActionListener(this); add("West",msk2); t= new TextField(); add("South",t); a10= new Aritmetika(); a5= new Aritmetika(5); br= new Braizymas(); add("Center", br);} public void actionPerformed(ActionEvent u){ int a, b; if (u.getSource()==mbr){ try{StringTokenizer str= new StringTokenizer(t.getText()); br.apskritimas(Integer.parseInt(str.nextToken()), Integer.parseInt(str.nextToken())); } catch (Exception e){ t.setText("Ivedimo klaidos!!!"); }} if (u.getSource()==msk1){ try{StringTokenizer str= new StringTokenizer(t.getText()); a=Integer.parseInt(str.nextToken()); b=Integer.parseInt(str.nextToken()); t.setText("Skaičių "+a+ " ir "+b+" suma moduliu "+10+" lygi "+ a10.suma(a,b)+" o sandauga "+ a10.sandauga(a,b));} catch (Exception e){ t.setText("Ivedimo klaidos!!!"); }} if (u.getSource()==msk2){ try{StringTokenizer str= new StringTokenizer(t.getText()); a=Integer.parseInt(str.nextToken()); b=Integer.parseInt(str.nextToken()); t.setText("Skaičių "+a+ " ir "+b+" suma moduliu "+5+" lygi "+ a5.suma(a,b)+" o sandauga "+a5.sandauga(a,b));} catch (Exception e){ t.setText("Ivedimo klaidos!!!"); }} }}Patarimas. Kompiliuokite failus Braizymas.java ir Aritmetika.java įvedę tokias komandas:
javac -d . Braizymas.java ir javac -d . Aritmetika.javaTurėtų atsirasti aplankas mano_irankiai, kuriame bus dvi sukompiliuotos klasės.