Download presentation
Presentation is loading. Please wait.
1
Įvadas į Java programavimo kalbą
2 paskaita
2
Masyvai Saugesni nei C ar C++ kalbose, nes tikrina indekso išėjimą už masyvo ribų; tikrina ar masyvui išskirta vieta. Pirmasis masyvo narys yra indeksu 0, o ne indeksu 1 (kaip, pvz., Pascal’yje). Masyvas yra objektas, o ne vien tik atminties blokas.
3
Masyvų inicializavimas
Masyvas yra vienodo tipo kintamųjų ar objektų seka. Jis aprašomas tokiu būdu: int[] masyvas = null; arba int masyvas[] = null;
4
Masyvo vietos išskyrimas
Galima išskirti masyvui vietą iš anksto nepriskiriant masyvo elementų, o tik nurodant masyvo dydį: double[] values = new double[10]; Kitas būdas – iš karto priskirti masyvo narius: double[] values = {2.5, -3.4, 11, 0.65};
5
Kelių dimensijų masyvai
Java kalboje masyvo dimensijų kiekis nėra apribotas. Todėl galima kurti dvimačius, trimačius ir, reikalui esant, n-mačius masyvus. Reiktų paminėti, kad masyvo dydį galima nurodyti ne iš karto. int[][] matrix = new int[20][30];
6
Masyvų pavyzdys Integer[][] ar; ar = new Integer[3][];
for(int i = 0; i < ar.length; i++) { ar[i] = new Integer[3]; for(int j = 0; j < ar[i].length; j++) { ar[i][j] = new Integer(i*j); }
7
Dinaminiai sąrašai Java kalboje yra daug klasių, skirtų darbui su sąrašais, aibėmis ir kitomis panašaus pobūdžio struktūromis. Mes aptarsime tik List tipo objektus. interface List class LinkedList class ArrayList
8
List vs Array Sąrašų skirtumai nuo masyvų:
sąrašams nereikia iš anksto išskirti vietos; jų narių kiekis gali nuolat kisti; sąrašai gali būti sudaryti tik iš objektų (t.y. negali būti sudaryti iš primityvių tipų, tokių kaip int, double, boolean ir kt.)
9
List tipo objektų sukūrimas
List eile = new LinkedList(); List saugykla = new ArrayList(); Galima rašyti ir kitu būdu, tačiau pirmasis būdas yra universalesnis: LinkedList eile = new LinkedList(); ArrayList saugykla = new ArrayList();
10
Pagrindiniai veiksmai (metodai)
add() – įterpti elementą; contains() – patikrinti, ar sąraše yra elementas; get() – paimti elementą iš sąrašo; indexOf() – gauti elemento indeksą sąraše; remove() – pašalinti elementą; size() – sąrašo dydis; toArray() – surašyti elementus į masyvą.
11
Pavyzdys List names = new LinkedList(); String name = null;
while ((name = Group.getNextName()) != null) { names.addLast(name); } if (names.contains(“Jonas”)) { System.out.println(“Suradom Joną!”);
12
Klasių paveldėjimas (1)
Tai klasės sugebėjimas paveldėti tėvinės klasės kintamuosius ir metodus (subklasė / vaikas paveldi iš superklasės / tėvo). Java neturi daigialypio paveldėjimo. Tą netiesiogiai galima išspręsti per interfeisus.
13
Klasių paveldėjimas (2)
Vaikas paveldi visus “matomus” (ne private) tėvo kintamuosius ir metodus. Tai vienos krypties paveldėjimas. final tipo klasės paveldėti negalima. Konstruktoriai nėra nei paveldimi, nei perdengiami.
14
Pavyzdys (1) class Plokste { protected double ilgis; // private negali būti! protected double plotis; Plokste() { this.ilgis = 0; this.plotis = 0; } Plokste(double a, double b) { this.ilgis = a; this.plotis = b; // ploto skaičiavimo metodas double plotas() { System.out.println(“Nežinomas algoritmas!”); return –1;
15
Pavyzdys (2) class Staciakampis extends Plokste { // konstruktorius
Staciakampis(double a, double b) { super(a, b); // kreipinys į konstr. Plokste } // metodų perdengimo pavyzdys double plotas() { return ilgis * plotis;
16
Pavyzdys (3) class Trikampis extends Plokste { // konstruktorius
Trikampis(double a, double b) { ilgis = a; plotis = b; } // metodų perdengimo pavyzdys double plotas() { return ilgis * plotis / 2;
17
Pavyzdys (4) class Testas { public static void main(String args[]) {
Plokste plo = new Plokste(2,3); Staciakampis sta = new Staciakampis(2,3); Trikampis tri = new Trikampis(2,3); Plokste plo2 = new Trikampis(2,3); // !!! System.out.println(plo.plotas()); System.out.println(sta.plotas()); System.out.println(tri.plotas()); System.out.println(plo2.plotas()); }
18
Atributas super Naudojamas parodyti, jog vaikas kreipasi į tėvą. Naudojama: kreipiniui į tėvo klasės konstruktorių (jis turi būti pirmuoju vaiko konstruktoriaus sakiniu): super(parametrai); kreipiniui į tėvo klasės kintamąjį / metodą (kai sutampa vardai): super.kintamasis / super.metodas.
19
Pavyzdys class A { int x; } class B extends A{ class C extends B {
// šioje klasėje galime pasiekti visų klasių kintamuosius x x = 5; // x iš C klasės this.x = 5; // x iš C klasės ((B) this).x = 5; // x iš B klasės super.x = 5; // x iš B klasės ((A) this).x = 5; // x iš A klasės super.super.x = 5; // klaida!
20
Metodų perdengimas (overriding)
Tai polimorfizmo atvejis, kai tėvo ir vaiko klasė turi vienodus metodus. Būtinos sąlygos – sutampa ne tik metodų vardai, bet ir jų antraštės bei grąžinamų reikšmių tipai. Metodo pasirinkimą nusako tipas objekto, kuriam šis metodas kviečiamas. Nepersidengia: konstruktoriai, final tipo metodai, statiniai metodai.
21
Situacijų (Exception) valdymas
Exception – tai įvykis, nutraukiantis įprastą programos darbą. Tai gali būti klaida programoje arba speciali programuotojo numatyta situacija. Situacijų “pagavimui” ir apdorojimui Java kalboje naudojama: try-catch blokai, sakinys throw, žodelis throws, finally blokas.
22
Pagrindinės situacijų klasės
Object Trowable Exception Error ClassNotFoundException NotSuchMethodException IOException EOFException FileNotFoundException ... RunTimeException ArithmeticException ClassCastException NullPointerException ... StackOverflowError OutOfMemoryError UnknownError ...
23
Situacijų klasės Exception klasės situacijas programuotojas gali pats “sugauti” ir apdoroti. RunTimeException klasės situacijos įvyksta programos vykdymo metu. Programuotojas jas gali apdoroti, bet neprivalo. Error klasės situacijų programuotojas valdyti negali, kadangi tai dažniausiai susiję su JVM klaidomis.
24
try-catch blokas Programos kodas, kuriame gali įvykti situacija, patalpinamas į bloką try, po kurio talpinami catch ir finally blokai. try { // veiksmai } catch (GaudomaSituacija ex) { // veiksmai jai įvykus }
25
Pavyzdys (1) /** Skaityti tekstinį failą po eilutę ir išvedinėti į ekraną. Failo vardas imamas iš komandinės eilutės.*/ import java.io.*; public class ExceptionDemo { public static void main(String args[]) throws IOException { // throws IOException reikalingas metodui close(), esančiame finally bloke // kitaip finally turi turėti try-catch bloką BufferedReader reader = null; try { if (args.lenght == 0) { throw (new Exception(“Įveskite failo vardą”); // programa įvykdys catch (Exception ex) ir baigs darbą } reader = new BufferedReader(new FileReader(args[0])); String line = null; // tęsinys kitoje skaidrėje
26
Pavyzdys (2) while ((line = reader.readLine()) != null) {
System.out.println(line); } } catch (FileNotFoundException ex) { System.out.println(“Duomenų failas ” + args[0] + “ nerastas.”); } catch (Exception ex) { System.err.println(ex.getMessage()); ex.printStackTrace(); } finally { if (reader != null) { reader.close(); } else { System.out.println(“Failas nebuvo atidarytas”);
27
Įvedimas / išvedimas Įvedimas / išvedimas (IO) Java kalboje organizuotas per strautus (stream). Standartiniai srautai operuoja su baitais. Dirbant su Unicode simboliais patogiau dirbti su simboliniais srautais (reader ir writer). Srautas Java kalboje atitinka klasę.
28
Išvedimo klasių hierarchija
OutputStream ByteArrayOutputStream FileOutputStream ObjectOutputStream PipedOutputStream FilterOutputStream BufferedOutputStream DataOutputStream PrintStream Writer BufferedWriter CharArrayWriter StringWriter PrintWriter FilterWriter PipedWriter OutputStreamWriter FileWriter P.S. System.out yra aprašytas: public static final PrintStream out
29
Įvedimo klasių hierarchija
InputStream ByteArrayInputStream FileIntputStream ObjectInputStream PipedInputStream FilterInputStream BufferedInputStream DataInputStream Reader BufferedReader LineNumberReader CharArrayReader StringReader FilterReader PipedReader InputStreamReader FileReader
30
Papildomos IO klasės File – klasė, leidžianti atsiriboti tolimesnėse IO klasėse nuo naudojamos platformos. Turi eilę metodų darbui su konkrečiu failu. RandomAccessFile – tiesioginio priėjimo prie failo klasė (gali skaityti ir rašyti iš to paties failo vienu metu). StreamTokenizer – simbolių srauto skaidymas į “žodžius”.
31
Papildomam skaitymui:
ArrayList ir LinkedList naudojimas: Nulinio ilgio masyvų naudojimas: Metodų perkrovimas: Java IO: Exceptions:
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.