Java gyorstalpaló. Duma, ha kell valamiért

Hasonló dokumentumok
Szoftvertechnológia alapjai Java előadások

Java bevezet o Kab odi L aszl o Kab odi L aszl o Java bevezet o

Az osztályok csomagokba vannak rendezve, minden csomag tetszőleges. Könyvtárhierarhiát fed: Pl.: java/util/scanner.java

OBJEKTUM ORIENTÁLT PROGRAMOZÁS JAVA NYELVEN. vizsgatételek

Osztályok. 4. gyakorlat

Helyes-e az alábbi kódrészlet? int i = 1; i = i * 3 + 1; int j; j = i + 1; Nem. Igen. Hányféleképpen lehet Javaban megjegyzést írni?

JAVA PROGRAMOZÁS 2.ELŐADÁS

Programozási nyelvek II. JAVA EA+GY 1. gyakolat

Kivételkezelés, beágyazott osztályok. Nyolcadik gyakorlat

és az instanceof operátor

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán

Programozási nyelvek JAVA EA+GY 1. gyakolat

OOP: Java 8.Gy: Abstract osztályok, interfészek

Magas szintű programozási nyelvek 2 Előadás jegyzet

Java programozási nyelv 4. rész Osztályok II.

C# nyelv alapjai. Krizsán Zoltán 1. Objektumorientált programozás C# alapokon tananyag. Általános Informatikai Tanszék Miskolci Egyetem

Széchenyi István Egyetem. Programozás III. Varjasi Norbert

Programozás I. Első ZH segédlet

Programozási nyelvek Java

Programozás II. 3. gyakorlat Objektum Orientáltság C++-ban

Mi a különbség az extends és az implements között. Mikor melyiket kell használni? Comperable-t megvalósító oasztályokban össze lehet hasonlitani

Osztályok. construct () destruct() $b=new Book(); $b=null; unset ($b); book.php: <?php class Book { private $isbn; public $title;

Java II. I A Java programozási nyelv alapelemei

Objektum Orientált Programozás. 11. Kivételkezelés 44/1B IT MAN

Programozás I. 3. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Programozási nyelvek Java

OOP #14 (referencia-elv)

Abstract osztályok és interface-ek. 7-dik gyakorlat

Java IX. telkezelés a Java-ban

Programozási nyelvek II. JAVA EA+GY 1. gyakolat

Java IX. telkezelés a Java-ban

C# Nyelvi Elemei. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) C# Nyelvi Elemei / 18

Java II. I A Java programozási nyelv alapelemei

Java és web programozás

Java VI. Miskolci Egyetem Általános Informatikai Tanszék. Utolsó módosítás: Ficsor Lajos. Java VI.: Öröklődés JAVA6 / 1

Informatika terméktervezőknek

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

Java programozási nyelv 5. rész Osztályok III.

Programozás II. 2. gyakorlat Áttérés C-ről C++-ra

Bánsághi Anna

Segédanyag: Java alkalmazások gyakorlat

Programozás I. 1. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Web-technológia PHP-vel

Kivételek kezelése (exception handling) Hibakezelés old style. Kivételkezelés

Programozási nyelv Java

Vé V g é r g e r h e a h j a tá t s á i s s z s ál á ak a Runnable, Thread

Objektumorientált programozás C# nyelven

Programozás BMEKOKAA146. Dr. Bécsi Tamás 1. Előadás

7. K: JAVA alapok Konzultáció

C# osztályok. Krizsán Zoltán

Segédanyag: Java alkalmazások gyakorlat

Pelda öröklődésre: import java.io.*; import java.text.*; import java.util.*; import extra.*;

Programozás III A JAVA TECHNOLÓGIA LÉNYEGE. Többlépcsős fordítás JAVA PLATFORM. Platformfüggetlenség

JAVA PROGRAMOZÁS 3.ELŐADÁS

C# versus Java. Óbudai Egyetem, Java Standard Edition Mérnök Informatikus szak, BSc Labor 3. Bedők Dávid v0.4

Számítástechnika I. BMEKOKAA152 BMEKOKAA119 Infokommunikáció I. BMEKOKAA606. Dr. Bécsi Tamás

A Java nyelv. Bevezetés, alapok Elek Tibor

Kivételkezelés, naplózás. Exception handling, logging

A Java és a C++ összehasonlítása

Pénzügyi algoritmusok

Java III. I I. Osztálydefiníció (Bevezetés)

Java programozási nyelv

Java III. I I. Osztálydefiníció (Bevezetés)

Szoftvertechnológia alapjai Java előadások

Segédanyag: Java alkalmazások gyakorlat


Interfészek. PPT 2007/2008 tavasz.

Programozási nyelvek Java

OOP: Java 11.Gy: Enumok, beágyazott osztályok. 13/1 B ITv: MAN

Objektumorientált programozás C# nyelven

Programozási technológia I.

Kivételek. A program végrehajtása során ritkán bekövetkező események Nem a fő végrehajtási ág ; logikailag alacsonyabbrendű feladat jelzése

Bevezetés a Java programozási nyelvbe

Java-ról Kotlinra. Ekler Péter AutSoft BME AUT. AutSoft

1. Mi a fejállományok szerepe C és C++ nyelvben és hogyan használjuk őket? 2. Milyen alapvető változókat használhatunk a C és C++ nyelvben?

Java. JIT (Just in Time) fordítók alkalmazása, optimalizálás AOT (Ahead of Time) fordítók alkalmazásának lehetősége

Osztálytervezés és implementációs ajánlások

Osztálytervezés és implementációs ajánlások

Programozási nyelvek Java

C#, OOP. Osztályok tervezése C#-ban

A Java programozási nyelv

Programozás I. 5. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

A C# programozási nyelv alapjai

Már megismert fogalmak áttekintése

List<String> l1 = new ArrayList<String>(); List<Object> l2 = l1; // error

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás:

S ha kettészelik is: balfelöl belőle Valamivel mindig - Valamivel mindiq több marad. (Nyugat )

JUnit. JUnit használata. IDE támogatás. Parancssori használat. Teszt készítése. Teszt készítése

Globális operátor overloading

Statikus adattagok. Statikus adattag inicializálása. Speciális adattagok és tagfüggvények. Általános Informatikai Tanszék

OOP és UML Áttekintés

Java programozási nyelv

3. Gyakorlat Ismerkedés a Java nyelvvel

Programozás II. labor

Bevezetés a Java programozási nyelvbe

1. Template (sablon) 1.1. Függvénysablon Függvénysablon példányosítás Osztálysablon

Programozási nyelvek Java

Dr. Pál László, Sapientia EMTE, Csíkszereda WEB PROGRAMOZÁS 2.ELŐADÁS. Objektumorientált programozás

Kivételek, kivételkezelés a C++ nyelvben

C++ programozási nyelv Konstruktorok-destruktorok

Átírás:

Java gyorstalpaló Ekler Péter - peter.ekler@aut.bme.hu Hudák Péter - hudakpe@gmail.com Dér Kristóf - kristof.der@schdesign.hu Gerencsér Péter peter.gerencser@aut.bme.hu 1 Duma, ha kell valamiért

Tartalom Java alapok Osztályok, objektumok Interfészek, abstract osztályok Láthatóság Primitív típusok, operátorok Kivétel kezelés Konkurencia kezelés 2 Android alapú szoftverfejlesztés

Java Platform JVM (Java Virtual Machine) Hardver és operációs rendszer függetlenséget biztosít Java API Alap funkciók Kollekciók, I/O, hálózatkezelés, XML kezelés, konkurencia, stb.

Java fordítás *.java (source) javac *.class (bytecode) JVM OS / Hardware JDK (Java Development Kit), JRE (Java Runtime Environment) Legfontosabb parancssori parancsok: java, javac, javadoc, jar

JVM Architektúra *.class Classloader Runtime adat terület Metódus terület Heap Java stacks PC regiszterek Native stack Interpreter Végrehajtó motor JIT Compiler Natív metódus interfész Natív könyvtárak CPU

Java nyelv Objektum orientált Többszálúság támogatása C++-hoz hasonló Automatikus memória kezelés Nincs direkt hozzáférés a pointerekhez

Primitív típusok Type Size Default (Field) byte 8 bit 0 short 16 bit 0 int 32 bit 0 long 64 bit 0L float 32 bit 0.0f double 64 bit 0.0fd char 16 bit (Unicode) '\u0000' boolean Not specified false

Operátorok Értékadás: = és annak kombinációi Aritmetikai operátorok: + - % / * ++ -- Relációs operátorok: < > <= >= ==!= Logikai operátorok:! && Bit operátorok: & ^ instanceof

Operátor precedencia Operátor Precedencia postfix expr++ expr-- unary ++expr --expr +expr -expr ~! multiplicative * / % additive + - shift << >> >>> relational < > <= >= instanceof equality ==!= bitwise AND & bitwise exclusive OR ^ bitwise inclusive OR logical AND && logical OR ternary? : assignment = += -= *= /= %= &= ^= = <<= >>= >>>=

Vezérlő struktúrák Return If-else if (isconditionatrue()) return 1; else if (conditionb && conditionc) { return 2; else { return 3; Inline if int result = conditiona && conditionb? 2 : 3;

Vezérlő struktúrák Switch: Java SE 6-ban csak int-re int condition = 1; switch (condition) { case 1: dosomething(); break case 2: case 3: dosomeotherthing(); case 4: doyetanotherthing(); break; default: dodefaultthing();

Ciklusok For for (int i = 0; i < 100; i++) { System.out.println(i); For each: tömbökön és kollekciókon való iteráció for (String label : labellist) { System.out.println(label);

Ciklusok While while (condition) { dosomething(); Do-while do { dosomething(); while (condition);

Vezérlő struktúrák Return Break Continue

Alap OOP elvek Osztály: objektum terv, típus Objektum: állapot és viselkedés Encapsulation: egységbe zárás, hozzáférés a tagokhoz Öröklés: osztály hierarchia, általánosítás, specializálódás Interfész: megegyezés a külső világ felé

Hello World class HelloWorldApplication { public static void main(string[] args) { System.out.println("Hello World!");

Csomagok Névtér jellegű funkcionalitás Java-ban Csoportosítás és hozzáférés Teljes név használata: com.example.exampleclass Konvenció: Csomagnevek kisbetűsek Osztálynevek nagybetűsek

Osztályok Osztály deklaráció és csomag elnevezés./hu/bme/aut/amorg/demoproject/ DemoClass.java: package hu.bme.aut.amorg.demoproject; public class DemoClass{

Osztályok Láthatóság: public: minden más osztályból elérhető package private: csak a csomagon belüli osztályokból érhető el

Mezők Osztály tagváltozók állapot tárolásához Mező leírók: Opcionális láthatósági paraméter Típus Név Opcionális kezdő érték Az osztály elején szokás a mező deklarációt elhelyezni

Mezők Mező deklarációs példa package hu.bme.aut.amorg.demoproject.field; import hu.bme.aut.amorg.demoproject.class.*; public class FieldDeclarationExample { public ClassDeclarationExample publicfield; private long privatefield = 2L; byte packageprivatefield = 3;

Mezők Láthatóság beállítása: Nincs: package private, a mező az osztály csomagján belül érhető el Private: a mező csak az osztályában érhető el (öröklő nem éri el) Protected: a mező csak a package-ből és a leszármazott osztályokból érhető el Public: a mező bárhonnan elérhető

Metódusok Metódus deklaráció: Opcionális láthatóság Visszatérési típus Függvény név Paraméter lista zárójelben Opcionális throws deklaráció Metódus törzs

Metódusok Metódus szignatúra: név és paraméter lista Egy osztályban minden metódusnak egyedi szignatúrával kell rendelkeznie Nincsenek metódus pointerek

Metódusok Metódus deklaráció példa: public class MyClass{ private long height = 2L; public int getbackvalue(int returnvalue) { return returnvalue; void modifyheight() { height = 4L;

Metódus láthatóság Nincs: a package osztályain belül érhető el a metódus Private: a metódus csak az osztályából érhető el (öröklő nem éri el) Protected: a metódus csomag osztályaiból és a leszármazott osztályokból érhető el Public: bárhonnan elérhető

Clean Code elvek - metódus Legyenek rövidek a metódusok (5-10 sor) Egy metódus egy feladatot lásson el Az absztrakció sorrendjében rendezzük a metódusokat Kerüljük a háromnál több paramétert Ne legyenek mellékhatásai a visszatérési értékeknek Ne adjunk át és ne térjünk vissza null-lal Ne legyen ismétlés

Clean Code elvek - osztály Az osztályok kicsik legyenek, egy dologért legyenek felelősek Kivétel: Util osztályok (log, convert, formázás) Tervezzünk a változó igényekhez igazodva Minimalizáljuk az osztály mezők és függvények láthatóságát Getter/Setter használata public elérhetőség helyett mezők számára

Öröklés A Java csak egyszeres öröklést támogat, de bármennyi interfészt implementálhatunk Minden osztály az Object-ből származik le Az alosztály örökli az ős osztály minden publikus és protected mezőjét és metódusát (illetve package-n belül a package-private-okat is) Leszármazott osztályban a super hívás használható az ős elérésére A final kulcsszó használható osztály és metódus esetén, hogy a felüldefiniálást megtiltsuk

Öröklés példa public class Animal { //Object az őse private int age = 3; public int getage() { return age; public class Dog extends Animal { @Override public int getage() { return age*7;... Animal a = new Animal(); a.getage(); // 3 Dog d = new Dog(); d.getage(); // 21 30 Android alapú szoftverfejlesztés

Cast-olás Általánosítás támogatása Implicit upcasting (Liskov helyettesítés): Object upcastedobject = new SpecializedObject(); upcasteobject.tostring(); Explicit downcasting: SpecializedObject specializedobject = (SpecializedObject)upcastedObject;

Interfészek Példa: public interface ExampleInterface { void interfacemethod(); public interface ExtendedExampleInterface extends ExampleInterface { void extendedinterfacemethod();

Interfészek Implementációs példa: public class InterfaceImplementation implements ExtendedExampleInterface { @Override void interfacemethod() { @Override void extendedinterfacemethod() {

Interfészek Az interface kulcsszóval deklarálható Csak konstansokat és metódus szignatúrát tartalmazhat Nem lehet példányosítani Osztályok implementálhatják Egy osztály több interfészt is implementálhat, de minden metódust felül kell definiálni Több interfészt is kiterjeszthet Alapértelmezetten minden metódus public és abstract, illetve minden mező konstans (public static final)

Abstract osztályok Abstract kulcsszóval deklarálható Nem lehet példányosítani de lehet leszármaztatni belőle Bármit tartalmazhat amit egy osztály Tartalmazhat abstract metódusokat

Objektumok Minden objektum Az objektum egy osztály példánya Az objektumok referencia szerint kerülnek átadásra a metódus hívásokban Ha nincs több referencia az objektumra, a memória fel lesz szabadítva a Garbage Collector által

Konstuktor Metódus az objektum inicializálására Deklaráció: Opcionális láthatóság Osztály neve, mint metódus név Paraméterek Opcionális throws deklaráció Metódus törzs Ha nincs konstruktor, akkor a compiler az osztályhoz rendel egy paraméter nélküli default konstruktort

Konstuktor Egy osztálynak több is lehet A konstruktor hívhat más konstruktorokat is a this()-el, de csak a legelején Hívható az ősosztály konstruktora a super() hívással, de csak a legelején A this kulcsszó az aktuális példányra referál

Objektum életciklus 1. Memória foglalás az objektum számára 2. Mezők default értékeinek beállítása 3. Ősosztály konstruktor hívás (implicit v. explicit) 4. Példány változók és inicializáló blokkok az inicializálás sorrendjében 5. Konstruktor body

Statikus mezők és metódusok Osztály szintű változók és metódusok static kulcsszó A statikus metódusok csak statikus változókat és más statikus metódusokat érhetnek el A statikus metódusok nem polimorfak (statikus kötés) Leszármazott osztályok nem módosíthatják a statikus viselkedést Statikus kód akkor fut, amikor először nyúlunk az osztályhoz

A final kulcsszó Osztályoknál: öröklés tiltása Metódusoknál: felüldefiniálás tiltása Mezőknél és változóknál: csak egyszer állítható be Statikus változóknál: konstans lesz Metódus paramétereknél: paraméterek újra beállítását akadályozza meg

Inner class Osztály definíció osztályon belül public, private, protected és package private minősítők használhatók Használat: Logikai csoportosítás Egységbe zárás (adat struktúra, lokális implementáció) Olvashatóság Példányosítás: OuterClass.StaticNestedClass nestedobject = new OuterClass.StaticNestedClass();

Inner class továbbiak Lokális inner class: Metóduson belüli definíció Nem tagja a külső osztálynak Csak a külső osztály tagjaihoz és a final jelzőjű lokális változókhoz fér hozzá public class Foo { private class Bar { //...

Inner class továbbiak Anonymous inner class: Név nélküli lokális inner class A konstruktor nem, de az inicializáló blokk megadható java.awt.eventqueue.invokelater(new Runnable() { @Override public void run() { createandshowui(); ); 44 Android alapú szoftverfejlesztés

Tömbök Tömbök is objektumok Van egy publikus length mezőjük Fix tartalommal, vagy mérettel kell inicializálni Alapból fel van töltve az adott típus alapértékével Egyszerű típusoknál 0 (nem kell kinullázni!) [] operátorral és indexszel érjük el az elemeket Ellenőrzik az indexet, dobhatnak IndexOutOfBoundsException-t Tartalmazhatnak primitív típust, de nem tartalmazhatnak generikust java.util.arrays ad néhány segédmetódust

Tömbök Példák: int[] measuredvalues = new int[10]; int referencevalues[] = {1,2,3,4,5,6,7,8,9,10;

Változó számú argumentumlista Különbözik a szintaxis a tömb típusú argumentumtól De a változó számú paraméterlistát tömbként kapjuk meg Bizonyos esetben olvashatóbb kódot eredményez Csak utolsó paraméterként használható Példa: public int sum(int values) { int result = 0; for (int value : values) { result += value; return result; sum(2,3,4); sum();

Kivételkezelés Segítenek kezelni a hibákat és a váratlan eseményeket Dobni egy kivételt annyit jelent, mint példányosítani egy Exception-t és átadni a JVM-nek a throw kulcsszóval A JVM átadja a legközelebbi kivételkezelőnek - catch

Kivételkezelés Kivétel típusok: Runtime exceptions általában programozói hibák (pl. NullPointerException) Errors alkalmazáson kívüli hibák (pl. OutOfMemoryError) Checked exceptions minden más

Kivételkezelés 50 Android alapú szoftverfejlesztés

Kivételkezelés Metódusdeklaráció tartalmazhatja a throws kulcsszót. Utána kell felsorolni a kiváltható Exception-ök listáját. Az ellenőrzött kivételeket kötelező elkapni vagy deklarálni a metódus elején, hogy dobhat olyat.

Kivételkezelés Példa: public class ExceptionExample { private FileInputStream openfile() throws FileNotFoundException, IOException { public void processfile() { try { openfile(); catch (FileNotFoundException fe) { System.out.println( File not found! ); catch (Exception e) { System.out.println( Error occured! ); e.printstacktrace();

Kivételkezelés A catch blokk után egy finally blokkot is fel lehet venni: Mindig lefut (majdnem mindig, JVM-ből kilépés és szál lelövése kivétel) Erőforrás felszabadításra használható A kivételeket lehet láncolni (továbbdobni) Exception-ből örökléssel saját kivétel osztály hozható létre

Kivételkezelés Előnyök: Hibakezelő kód elkülönül Call stack terjesztés Az exception tartalmazza a dobáskori call stack-et Hiba típusok szeparálása Nehezebb figyelmen kívül hagyni

Kivételek és Clean Code A hibakezelés csak egy dolog Használj kivételeket a hibakódok visszatérése helyett Használj nem ellenőrzött kivételt a programozási hibákra Használj ellenőrzött kivételt a hibákra, amikre fel lehet készülni Használj saját kivételeket, hogy összefogd és továbbítsd a hibákat magasabb szintekre Lehetőség szerint használj beépített kivételeket Absztrakciós szintnek megfelelő kivételt használj

Kivételek és Clean Code Ne vidd túlzásba a kivételeket! Ne hagyd figyelmen kívül a kivételeket! Ne kapj el Throwable-t, ha nem vagy teljesen biztos a dolgodban

Szálak Blokkolódó műveletek esetén gyakran használatos! class MyJob extends Thread { public void run() { // feladat végrehajtása akár ciklusban // meghívás kívülről new MyJob(/*esetleges paraméterek*/).start(); 57 Android alapú szoftverfejlesztés

Szál állapotok 58 Android alapú szoftverfejlesztés

Szálak létrehozása Kétféle létrehozás public class ThreadTest extends Thread { public class ThreadTest { @Override public void run() { // do something public static void main(string[] args) { ThreadTest test = new ThreadTest (); test.start(); public static class MRun implements Runnable { @Override public void run() { // do something public static void main(string[] args) { Thread test= new Thread (new MRun()); test.start(); 59 Android alapú szoftverfejlesztés

Szál példa public class Main { public static lock = new Object(); // public static void main(string arg[]) { Thread1 thread1 = new Thread1(); Thread2 thread2 = new Thread2(); thread1.start(); thread2.start(); int i = 0; i++; try { thread1.join(1); thread1.interrupt(); thread2.join(); catch (InterruptedException ex) { // public void run() { int i = 0; i++; synchronized (Main.lock) { try { Thread.sleep(100); catch (InterruptedException ex) { Main.lock.wait(); // // public void run() { int i = 0; i++; synchronized (Main.lock) { Main.lock.notify(); // 60 Android alapú szoftverfejlesztés

SOLID elvek Single responsibility principle: Egy objektum egy dologért felel Open/closed principle: Az entitások nyitottak a kiterjesztésre de zártak a módosításra Liskov substitution principle: Az objektumok helyettesíthetők altípusokkal Interface segregation principle: Többszörös és speciális kliens interfészek Dependency inversion principle: A környezet igazodik a magas szintű modul interfészhez

Elnevezési konvenciók Osztályok, abstract osztályok, interfészek: Minden szó első betűje nagybetű Mezők: Minden szó nagybetűvel kezdődik, kivéve az első ami kisbetűs Metódusok: Minden szó nagybetűvel kezdődik, kivéve az első ami kisbetűs Az első szó ige Konstans: Nagybetűs, szavak határán aláhúzás jel

Clean Code elvek - elnevezés Vegyük komolyan! Kiejthető, jól kereshető és jól leíró neveket használjuk Kerüljük a félre tájékoztató neveket Soha sem csak magunknak írjuk a kódot Nem kell feltétlenül félni a hosszú nevekből Az osztálynevek főnevek legyenek (kerüljük az általános neveket mint Manager, Processor, Data, Info, stb.) Metódus név igével kezdődjön

Clean Code elvek - komment A kommentet főként JavaDoc generálására használjuk A felesleges komment csak zavaró A bonyolult algoritmusok érthetőségét lehet kommenttel segíteni Egy jól olvasható kódban nincs szükség kommentre

Javasolt források Oracle java tutorial: http://docs.oracle.com/javase/tutorial/ Oracle Java SE 6 documentation: http://docs.oracle.com/javase/6/docs/index.html Bruce Eckel - Thinking in Java 4 th Edition: Good for learning Java, intermediate level chapters for almost all Java topics Joshua Bloch - Effective Java 2 nd Edition: Good for using Java, contains advices and best practices for specific topics Robert C. Martin - Clean Code: Recommended for everyone, Java is only used as an example language

Kérdések 66 Android alapú szoftverfejlesztés