Szoftvertechnológia sáv
Java programozási nyelv
Dirk Louis-Peter Müller: Java (Belépés az internet világába) Panem kiadó, Budapest, 2002. Webvilág sorozat
Készítette: Gregorics Tibor
Vázlatos áttekintés a Java nyelvi elemekr l
1. Elemi és felhasználói típusok, deklarációk 2. Vezérlési szerkezetek, elemi programok 3. Program szerkezet, láthatósági szabályok 4. Adatbevitel/kiírás 5. Könyvtári elemek
1. Nincsenek önálló függvények, csak az osztályok metódusai 2. Nincsenek pointerek. (rejtett dinamikus tárkezelés) 3. Nincs struktúra és union típuskonstrukció 4. Nincs típusdefiníció 5. Korlátozott többszörös örökl dés 6. Nincs operátor túldefiniálás. 7. Nincsenek sablonok ?
egész számok byte, short, int, long
TÍPUSOK • • • • • •
elemi típusok deklaráció, konstans, konverzió osztályok, objektumok metódusok, paraméterátadás osztályok származtatása el re definiált osztályok
83, -257, -60320, 12L, 077, 0xFF1F + - * / % == != < <= > >= ++ --
valós számok float, double 12.4f, 10e-2f, 47.11, 1e5 + - * / % == != < <= > >= ++ --
logikai értékek boolean false, true
&&
||
!
==
!=
karakterek char ’c’ ’Ü’ ’3’ ’\’’ ’\\’ ’\n’ ’\u1234’ == !=
1
; =
;
Automatikus típuskonverzió Tipus1 v1; Tipus2 v2; v2 = v1;
char ch; int i = 3444; double a = 47.11; boolean l = i>=20 || i==0;
Kényszerített típuskonverzió Tipus1 v1; Tipus2 v2; v2 = (Tipus2)v1; double z = 3/4; double z = 3.0/4.0; double z = (double)3/4;
final = ;
class Osztaly{
// típus
// adattagok Tipus1 a1; Tipus2 a2; ... // metódusok Osztaly(…){…} Tipus Metodus (…){…} ...
Osztaly obj = new Osztaly(12); // konstruktor // this
private protected public nem min sített
}
class Osztaly { int a; Osztaly(int i){a = i;} Tipus Metodus(T1 v1, … ,Tn vn){...} ... }
class Osztaly {} Osztaly obj = new Osztaly();
Az objektum-változó tulajdonképpen egy pointer, amely az objektumot tartalmazó tárterületre mutat. int n = 12; Osztaly obj = new Osztaly(12);
class Osztaly { ... Tipus Metodus(T1 v1, … ,Tn vn){
formális paraméterek
return … } } class Osztaly { { ... } }
Konstruktor el tt hívódik meg
Osztaly obj = new Osztaly(…); Tipus v = obj.Metodus(k1, … ,kn);
protected void finalize(){…}
Számban és típusban illeszked aktuális paraméterek
2
elemi típusú adat objektum
– –
1. Különböz osztályokban használhatunk azonos nev adattagot illetve azonos szignatúrájú metódust.
érték szerint hivatkozás szerint
2. Névütközéseket min sített hivatkozással oldjuk fel objektum.adattag illetve objektum.metódus() osztály.adattag illetve osztály.metódus
s
class Osztaly { ... static Tipus1 adattag; static Tipus2 Metodus(…){ ... return ... } static { adattag = ... } }
Leszármazott class Os{ ... } class Leszarmazott extends Os{ ...
Osztaly.adattag Osztaly.Metodus(…)
}
A nem private min sítés elemek a származtatott osztályba örökl dnek.
1. Egy osztály minden metódusa „virtuális”(ezért ezt nem is jelöljük külön), dinamikusan köt dik az t aktiváló objektumhoz.
2. Származtatott osztály nem statikus metódusaiban az sosztály nem statikus metódusai super.metodus(…) min sítéssel hívhatók meg.
1. Származtatott osztály konstruktorának els utasítása lehet egy super(…) konstruktor-hívás, amely az sosztály megfelel konstruktorát hívja meg; ennek hiányában egy implicit super() hívás generálódik.
2. Származtatott osztály destruktora felszabadítja a származtatott osztály (nem statikus) adattagjait, majd meghívja az sosztály destruktorát.
3
Végleges osztály az, amelyb l nem származtatható más osztály. végleges metódus a származtatásnál felül nem írható metódus. (virtualitás letiltása)
Absztrakt osztály az, amelynek nem állítjuk el az objektumait, csak sosztályként alkalmazzuk az örökl désben.
El nye a gyorsaság és a biztonság.
final class Osztaly {…}
abstract class Osztaly {…}
class Osztaly{ … final void Metodus(…); }
class Osztaly{ … abstract void Metodus(…); }
s
Az absztrakt osztály speciális formája, amelyre többszörös örökl déskor van szükség.
Minden metódusát kötelez újradefiniálni.
interface Os{ ... }
interface Osztaly {
class Leszarmazott implements Os{ ... // az interface minden metódusát definiálni kell }
// konstans adattagok // metódus deklarációk }
s1 class Os1{ ... } interface Os2{ ... } interface Os3{ ... }
Leszármazott
s2
s3
Leszármazott
• Lokális változó: egy blokkban definiált elemi változó illetve objektum változó (this, super) • Osztály adattag • Osztály statikus adattag
class Leszarmazott extends Os1 implements Os2, Os3{ ... }
4
• Lokális változó abban a blokkban látható, ahol definiáltuk. • Osztály (objektumhoz rendelt) adattag abban az osztályban látható, ahol definiáltuk, és ha nem privát, akkor ott is, ahol az osztály objektumai láthatók. • Osztály statikus adattag, ha nem privát, mindenhol látható (ahol az osztály látható), különben csak a saját osztályában.
Minden osztály se az Object osztály.
Byte, Short, Integer, Long, Float, Double, Character, Boolean, Void Integer wi = new Integer(4); String s = wi.toString(); int ii = Integer.parseInt(”100”);
tipus[] vektor
= new tipus[hossz];
tipus[][] matrix = new tipus[sor][oszl] tipus[] matrix = new tipus[sor]; tipus[] matrix[0] = new tipus[oszl]; tipus[] matrix[1] = new tipus[oszl]; ... // A tömbök az Array osztály objektumai int sor = matrix.length; int oszl = matrix[0].length; // A tömbök mint paraméterek int[] Metodus(double[][] t);
String (”Ez egy sztring”, ””, ”\”” ) + int length() boolean equals() int compareTo() int indexOf(String) int indexOf(char) String substring(int kezdet, int veg) char charAt(int pozicio) String valueOf(int szam) String valueOf(double szam) int szam = Integer.valueOf(str).intValue(); double szam= Double.valueOf(str).doubleValue(); int szam = Integer.parseInt(str); double szam= Double.parseDouble(str);
VEZÉRLÉSI SZERKEZETEK
class CHelloVilag{ public static void main(String args[]){ System.out.println(”Hello Világ!”); } }
• • • •
értékadás,üres program szekvencia, utasítás-blokk elágazás, ciklus kivételkezelés
5
;
= ;
d = d-c; d = n; c = m; double a = -24.7; { int i = 3; boolean l = true; }
{ ... }
feltétel ág_1
ág_2
if(feltétel) { ág_1 } else { ág_2 }
if(feltétel) else
feltétel_1
feltétel ág_1
SKIP
if(feltétel) { ág_1 }
ut_1; ut_2;
feltétel_2
…
feltétel_n
if(feltétel_1){ ág_1 ág_2 … ág_n ág_1 }else if(feltétel_2){ ág_2 } ¬feltétel_1 ∧ feltétel_2 ... else if(feltétel_n){ ág_n }else{ ág_n+1 }
A break hatására az elágazás végére, annak hiányában a következ ágra (esetre) kerül a vezérlés.
switch (kifejezés) { case konstans1 : utasítássorozat1 ; break; case konstans2 : utasítássorozat2 ; break; case konstans3 : case konstans4 : utasítássorozat3_4; break; default : utasítássorozat5 ; } összevont esetek
6
program_1 feltétel mag program_2 feltétel
while(feltétel){ mag }
mag
for(program_1;feltétel;program_2){ mag } for(int i=0;i
class Kivetel extends Throwable{ try{ ... } ... Kivetel }catch(…){ obj = new Kivetel(); ... try{ }catch(…){ ... } throw obj; }catch(Kivetel e){ ... }
PROGRAMSZERKEZET
class Kivetel extends Throwable{...} void metodus() throws Kivetel{ ... throw new Kivetel(); }
try{ Metodus(); }catch(Kivetel e){ ... }
class FoOsztaly{ public static void main(String args[]){ ... } } class Osztaly1{ ... }
• modulok (osztályok, csomagok) • forrásállományok • láthatóság
class Osztaly2{ ... }
objektumok létrehozása és használata (az objektumok metódusainak hívása) statikus adattagok használata statikus metódusok hívása
...
7
Workspace −
Fo.java
classes Fo.class
Mindenki mindenkit lát,
class FoOsztaly{ ... }
azaz minden elem (adattag, metódus) mindenhol használható, kivéve, ha privát (private), mert az csak a saját osztályában látható.
class Osztaly1{ ... } ...
Workspace −
classes
Fo.java
A csomag az a legküls blokk, amelyben osztályokat helyezhetünk el. (Több állományra vágható szét.).
Fo.class Resz2.class
class FoOsztaly{ ... }
Resz3.class
Mindenki mindenkit lát,
Resz2.java
class Osztaly1{ ... } ...
Resz3.java
class Osztaly2{ ... class Osztaly3{ ... } ... } ... Package Default
azaz minden elem (adattag, metódus) mindenhol használható, kivéve, ha privát (private), mert az csak a saját osztályában látható. Ugyanaz a szabály, mint egyetlen forrásállomány esetén
Workspace − Fo.java
classes −
import Csoport.Osztaly2 * class FoOsztaly{ ... } Osztaly2.java class Osztaly1{ ... } ... Package Default
csoport Osztaly2.class Osztaly3.class
−
Fo.class
package Osztaly3.javaCsoport; package Csoport; public class Osztaly2{ ...public class Osztaly3{ } ... ...} Package... Csoport
1. Egy csomagon belül mindenki mindenkit lát, azaz minden elem (adattag, metódus) mindenhol használható a csomagban, kivéve, ha privát (private), mert az csak a saját osztályában látható. 2. Egy állományban akkor látható egy másik csomag egy osztálya, ha az osztály publikus (osztálynév = fájlnév) és az osztályt importáljuk 3. Egy állományban akkor látható egy másik csomag osztályának egy tagja, ha a tag és az osztálya publikus és az osztályt importáljuk
8
0. Lokális változók abban a blokkban láthatók, ahol deklarálták ket. 1. Publikus (public) tag a saját csomagján kívül ott látható, ahol a tagot tartalmazó osztályt importáljuk. 2. Védett (protected) tag a saját csomagján belül, valamint a saját osztályából származtatott osztályokban látható. 3. Min sítés nélküli tag a saját csomagján belül látható. 4. Privát (private) tag csak a saját osztályában látható. 5. Bels (osztályban definiált) osztály és annak elemei − még ha publikusak is − csak abban az osztályban láthatók, amelyben a bels osztályt definiáltuk.
Különböz csomagokban lev azonos osztályok csomagnévvel min síthet ek.
INPUT/OUTPUT java.lang (String, Array, Wrapper osztályok, System.out) • Billenty zeten és képerny n keresztül − adatfolyamokkal (stream) − grafikus felhasználói felülettel (GUI) • Háttértároló állományokon keresztül • Interneten keresztül (weboldalak)
System.out – PrintStream típusú statikus konstans
import java.io.*;
System.out.print(”ez egy minta”+23); System.out.println(”ez is minta”+(float)23);
FileWriter PrintWriterstream out = = new (”adatok.txt”); new FileWriter PrintWriter( PrintWriter out = new PrintWriter(stream); new FileWriter(”adatok.txt”));
import java.io.*;
out.print(”ez egy minta”+23); out.println (”ez is minta”+(float)23); out.close();
PrintWriter out = new PrintWriter(System.out); out.print(”ez egy minta”+23); out.println (”ez is minta”+(float)23); out.close();
9
System.in – InputStream típusú statikus konstans import java.io.*; import java.util.*; BufferedReader inp = new BufferedReader( new InputStreamReader(System.in)); String sor = inp.readLine(); StringTokenizer tagok = new StringTokenizer(sor,"\t\n");
import java.io.*; import java.util.*; FileReader be = new FileReader("adatok.txt"); BufferedReader inp = new BufferedReader(be); String sor = inp.readLine(); StringTokenizer tagok = new StringTokenizer(sor,"\t\n"); int szam = Integer.parseInt(tagok.nextToken());
string s = tagok.nextToken(); int szam = Integer.parseInt(s);
try{ ... }catch(FileNotFoundException e){ System.out.println("A fájl nem elérhet !");
void Metodus() { try{ ... // fájl input-output }catch(IOException e){ ... } }
}catch(IOException e){ System.out.println("Hibás adatformátum!"); }catch(NoSuchElementException e){ System.out.println("Túl kevés adat!"); }
void Metodus() throws IOException { ... // fájl input-output }
InputStream
• Adatátvitel iránya (be vagy ki) alapján • Alaptípus (byte vagy char) alapján • Feladat (forrás/nyel vagy sz r ) alapján
OutputStream
BufferedInputStream
BufferedOutputStream
FileInputStream
FileOutputStream
PrintStream
10
Reader
Writer
Könyvtárak BufferedReader
BufferedWriter
InputStreamReader
OutputStreamWriter
FileReader
FileWriter PrintWriter
java.lang (Array, String, System.out, Wrapper osztályok, System.currentTimeMillis()) java.io (Writer, Reader, File ) java.util (StringTokenizer, Random, Date, Collections, LinkedList, Arrays, Arrays.sort(), Stack, HashSet, HashMap, HashTable) java.text (DateFormat) java.awt javax.swing
11