Hello World. Óbudai Egyetem, Java Standard Edition Mérnök Informatikus szak, BSc Labor 1. Bedők Dávid v0.3

Hasonló dokumentumok
Java I. A Java programozási nyelv

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

Java I. A Java programozási nyelv

Szoftvertechnológia alapjai Java előadások

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

Programozási nyelvek JAVA EA+GY 1. gyakolat

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

A Java programozási nyelv

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

Objektum orientáltság alapjai A Java nyelv Fordítás - futtatás

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

Programozási nyelv Java

Programozási technológia I.

I. Bevezetés. 1. ábra A Java "logója"

JAVA ALKALMAZÁSOK 1. ELŐADÁS 2/22/2017 1

Programozási technológia I 1. gyakorlat. A Java nyelvi alapjai, a NetBeans környezet

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

JAVA webes alkalmazások

Hello Java Enterprise Edition

Programozás III CSOMAGOK. Az összetartozó osztályok és interfészek egy csomagba (package) kerülnek.

A C# PROGRAMOZÁSI NYELV

Java II. I A Java programozási nyelv alapelemei

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

Szoftver labor III. Tematika. Gyakorlatok. Dr. Csébfalvi Balázs

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

Java programozási nyelv

Programozási nyelvek Java

Hello Java Enterprise Edition

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

RIA Rich Internet Application

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

Flex: csak rugalmasan!

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

Webszolgáltatások kommunikációs overhead-jének becslése

Web-fejlesztés NGM_IN002_1

A NYELV NEVE. Kezdetben: Oak. James Gosling. Java: Sun Mycrosystems védjegyev

Mobil Informatikai Rendszerek

A Java EE 5 plattform

Programozás I. Első ZH segédlet

Bevezetés a Java programozási nyelvbe

Bevezetés, platformok. Léczfalvy Ádám

Java 9 alkalmazás architektúra

Java programozási nyelv 6. rész Java a gyakorlatban

Szoftvertervezés és -fejlesztés I.

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

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

Osztott alkalmazások fejlesztési technológiái Áttekintés

Hello Gradle. TestNG, Eclipse, IntelliJ IDEA. Óbudai Egyetem, Java Enterprise Edition Műszaki Informatika szak Labor 2. Bedők Dávid v0.

A J2EE fejlesztési si platform (application. model) 1.4 platform. Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem

Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem

MVC Java EE Java EE Kliensek JavaBeanek Java EE komponensek Web-alkalmazások Fejlesztői környezet. Java Web technológiák

Simon Balázs Dr. Goldschmidt Balázs Dr. Kondorosi Károly. BME, Irányítástechnika és Informatika Tanszék

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

Segédanyag: Java alkalmazások gyakorlat

Java best practices A&K AKADÉMIA MARKOS ANDRÁS

Közösség, projektek, IDE

Bevezetés a Java programozási nyelvbe

Java II. I A Java programozási nyelv alapelemei

Mobil Informatikai Rendszerek

Pénzügyi algoritmusok

strings.xml res/values/strings.xml fájlban hozzuk létre a hiányzó string adatforrásainkat A jelenlegi helyett ez álljon: <resources> <string

C++ fejlesztés az ECLIPSE környezetben

GYAKORLATIAS JAVA MINTA

C# gyorstalpaló. Készítette: Major Péter

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

JAVA SE/ME tanfolyam tematika

4. rész: Java Enterprise Edition bevezetı. Bakay Árpád dr. NETvisor kft (30)

Programozás BMEKOKAA146. Dr. Bécsi Tamás 2. előadás

Hello Maven. JSE vs. JEE, JEE vs Spring. Óbudai Egyetem, Java Enterprise Edition Műszaki Informatika szak Labor 2. Bedők Dávid v0.

iphone és Android két jó barát...

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

Segédanyag: Java alkalmazások gyakorlat

1. Egyszerű (primitív) típusok. 2. Referencia típusok

Java és web programozás

A C# programozási nyelv alapjai

Mechatronika és mikroszámítógépek 2017/2018 I. félév. Bevezetés a C nyelvbe

Junior Java Képzés. Tematika

Bevezetés a programozásba Előadás: Objektumszintű és osztályszintű elemek, hibakezelés

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

Adatszerkezetek és algoritmusok

Oracle Containers for Java - j2ee alkalmazás szerver funkciók. Molnár Balázs Oracle Hungary

JAVA nyelvi alapok. Adatbányászati technikák (VISZM185) Dávid István

Önelemzés és a JavaBean komponensmodell

Overview. Service. Application Activity Activity 2 Activity 3. Fragment. Fragment. Fragment. Frag ment. Fragment. Broadcast Receiver

Osztott rendszerek, Java EE. Általános bevezető

Fejlesztés, működtetés, felügyelet Hatékony infrastruktúra IBM szoftverekkel

9. MPI

Programozási nyelvek (ADA)

Programozási nyelvek II.: JAVA, 4. gyakorlat

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

Fejlesztői szemmel at K

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

.NET Microsoft.Net Framework

Mintavételes szabályozás mikrovezérlő segítségével

Szoftveripar és üzleti modellek

A C programozási nyelv I. Bevezetés


A C programozási nyelv I. Bevezetés

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

Informatikai alkalmazások - levelező

Átírás:

Hello World Óbudai Egyetem, Java Standard Edition Mérnök Informatikus szak, BSc Labor 1 Bedők Dávid 2016.10.07. v0.3

Információ Hivatalos tárgyi weboldal: http://users.nik.uni-obuda.hu/java/ Prezentációk Minta zárthelyik Követelményrendszer Tárgyfelelős: Szénási Sándor (szenasi.sandor@nik.uni-obuda.hu) Labor weboldal: http://users.nik.uni-obuda.hu/bedok.david/jse.html Labor prezentációk (vmajor.minor + yyyy.mm.dd.) Programok, eszközök, library-k Forráskódok Oktató: Bedők Dávid (bedok.david@nik.uni-obuda.hu) Előkövetelmény: Programozás I/II (C#) alapos ismeret XML, XHTML ismeret Open-source szemlélel Java ecosystemre való nyitottság 2

Követelmény Laborlátogatások TVSZ szerint 2 zárthelyi dolgozat I. Objektum-orientált programozás Java nyelven II. Egyszerű webalkalmazás fejlesztése Java nyelven Pót zárthelyi dolgozat (várhatóan összevont) Gyakorlati jegy pótlása a vizsgaidőszak első 10 napjában 3

Tematika Elsősorban: Hivatalos oldalon megtalálható követelményrendszer szerint. Laborfoglalkozás hangsúlya: A Java nyelv alapvető megismerése, a C# nyelven tanult objektum-orientált ismeretek átültetése (Java SE 7). A Webfejlesztés alapjaival való megismerkedés és a framework nélküli Java webalkalmazás fejlesztés elsajátítása (Servlets, JSP, esetleg JSTL, TLD, stb.). Minimális fejlesztői környezet építési tapasztalat megszerzése (Eclipse IDE, Apache Tomcat). A tárgy fontos előkövetelménye a Szerveroldali Java Programozás címen futó Java Enterprise Edition laborgyakorlatnak, mely egy szakmai választható tárgy. 4

Java szó eredete 5

Java Standard Edition - Történet 1991. Oak, később Green SUN (Stanford University Network) Dr. James A. Gosling Mike Sheridan Patrick Naughton 1996.01.23 Java 1.0 [AWT] 1997.02.19. Java 1.1 [Inner class, JDBC, RMI, Reflection API] 1998.12.08. Java 1.2 Playground 2000.05.08. Java 1.3 Kestrel [Java Sound, JNDI API] 2002.02.06. Java 1.4 Merlin [regexp, exception chain, Image IO, Pref. API] 2004.09.30. Java 5 Tiger [autoboxing, generic types] 2006.12.11. Java 6 Mustang 2007. GPL, nyílt forráskódú szabad software lett 2009. Oracle felvásárlás 2011.07.28. Java 7 Dolphin 2014.03.18. Java 8 Spider [lambda expression] 2017.03.?? Java 9 (money, currency API, better nativ code integration,..) 2018.??.?? Java 10 (primitív típusok kivétele?) 6

Java vs. JavaScript "Not to be confused with JavaScript." (wikipedia) "Java and JavaScript are Still Two Different Animals" (htmlgoodies) Kis túlzással a JavaScript és a Java közös tulajdonságaik kimerülnek a nevükben található 4 ASCII karakterben... 7

Koncepció Write Once Run Anywhere ("írd meg egyszer, futtasd bárhol") WODA "írd meg egyszer, keress hibát mindenhol" Koncepció egyszerű, objektum-orientált és ismerős (szintaxis) robosztus és biztonságos concurrent computing (parallel execution, szálkezelés) platformfüggetlenség (hordozhatóság, architecture-neutral) hálózati programozás kiemelt támogatása biztonságos távoli futtatás (applet korszak) kiemelkedő teljesítmény Főbb tulajdonságok általános célú objektum-orienált interpretált (futás közben fordul) ~ C/C++ szintaxis 8

Változatok Java Card smartcard-ok számára Java Platform Micro Edition (Java ME, korábban* J2ME) csökkentett erőforrások, mobil eszközök számára Java Platform Standard Edition (Java SE, korábban* J2SE) workstation-ök számára általános felhasználás, kliens gépek Java Platform Enterprise Edition (Java EE, korábban* J2EE) elosztott vállalati környezetben, avagy széles(ebb) spektrum igény esetén *: 2006 előtt más néven voltak hivatkozva, de ez zavaró volt 9

Java Virtual Machine (JVM) JVM részei osztálybetöltő (class loader) szemétgyüjtő (garbage collector) végrehajtó motor (execution engine) HotSpot: Oracle-Sun felvásárlást követően az Oracle által karbantartott JVM neve Java 1.2-ban még modul, Java 1.3 óta ez az alapértelmezett JVM C++/assembly-ban írták, és valójában két virtuális gépet takar (különböző célú optimalizálás): Client (gyors fordítási sebesség, rövid életű kód) Server (erősen optimalizált, hosszú életű kód) Kapcsolók segítségével konfigurálható Windows (x86/64), UNIX (x86/64) és Solaris (SPARC is) támogatás Vannak más JVM implementációk is: Kaffe, IBM J9 (ezek ún. clean room implementációk), vagy a BEA/Oracle JRockit (pl. WebLogic AS használta, ma Oracle Fusion Middleware) 10

SDK, JRE, JDK, TLA... Java Development Kit (JDK) korábban hívták Software Development Kit (SDK)-nek is Java programok fejlesztéséhez, hibakereséséhez Verziózás: JDK1.7, JDK1.8, stb. (+build number) javac.exe, java compiler java.exe, policytool.exe, jar.exe, jarsigner.exe, javadoc.exe, jconsole.exe, keytool.exe, wsgen.exe, wsimport.exe, stb. Java Runtime Environment (JRE) A JDK egy részhalmaza Java programok futtatásához használható Verziózás: JRE7, JRE8, stb. java.exe, java runtime luncher policytool.exe, keytool.exe, stb. Javasolt további Java alap komponens Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files US security policy miatt nem lehet része a JDK-nak 11

Natív, byte és Java kód Natív kód Win OS:: ~ *.exe architektúra, platform függő (Java) byte-kód (bytecode) *.class platformfüggetlen JVM értelmezi, natív kódot készít belőle Java kód *.java legtöbbször hordozható, platformfüggetlen fordítást követően Java byte-kód készül belőle Nem kizárólag Java nyelven készülnek Java byte-kódok, vagyis JVM platformra más nyelven is lehet fejleszteni Scala JRuby Groovy script JavaFX script AspectJ stb. 12

Hello World package hu.qwaevisz.demo; public class HelloWorld { } public static void main(string[] args) { System.out.println( "Hello World" ); } HelloWorld.java Az állományt kötelezően HelloWorld.java néven (case sensitive) kell elmenteni a package-nek megfelelő könyvtár struktúrában: hu qwaevisz demo HelloWorld.java Minden állományban egyetlen nyilvános osztály (public class) lehet. A "program" belépési pontja a main metódus, ennek első utasításával indul (számunkra) a végrehajtás. A System.out.println() feloldása: System osztály, out ezen osztály statikus PrintStream típusú nyilvános mezője, a void println() metódus pedig értelemszerűen ezen PrintStream osztály példánymetódusa. 13

Fordítás és futtatás >mkdir bin >javac -d./bin./src/hu/qwaevisz/demo/helloworld.java -d [path]: output directory minden ami a paraméterek mögött van: forrásállományok elérési útja (tetszőleges számú lista, az elérési útban forráskönyvtárak (src) és csomagkönyvtárak is lehetnek (hu, qwaevisz, demo), de értelemszerűen csak ebben a sorrendben). >java -cp./bin hu.qwaevisz.demo.helloworld -cp: classpath (ahol a class állományok vannak) utolsó paraméter: belépési osztály full qualified neve 14

Teljesítmény Általában a Java-ban írt programok lassabbak és több memóriát igényelnek mint a C-ben írt változatuk. A Java 1.1-ben bemutatták a JIT (Just-in-time) compilation-t (futásidejű fordítás*), amivel elindult egy közelítési folyamat 2012. februári adat szerint csupán ~1.5x lassabb a Java a C-nél szerver környezetben ez a sebesség eltérés általában lényegtelen *: a byte-kódot futási időben fordítja natív kóddá, dynamic compilation-nek is nevezik Kritikák generikus típusok megvalósítása (ez nézőpont kérdése) Java sebessége (nézőpont kérdése) előjel nélküli primitív típusok hiánya lebegőpontos aritmetikai számítások kezelése HotSpot korai változatainak biztonsága, támadhatósága pl. Double converting bug (karakterláncból valós szám konverziója végtelen ciklust okozott) JDK 1.6.10-ben még benne van.. (1.6.27-ben már nincs) 15

Típusok Primitív típusok (pontos méretük előre definiált. Pl. C++ban nem így van, a nagyobb optimalitás miatt különböző platformokon különböző méretű pl. az egész típus) (C# value types..) Összetett típusok (osztályok, tömbök, minden más) típus leírás byte short int long float double char boolean 8 bites előjeles egész 16 bites előjeles egész 32 bites előjeles egész 64 bites előjeles egész 32 bites egyszeres lebegőpontosságú 64 bites kétszeres lebegőpontosságú 16 bites Unicode-karakter logikai érték (igaz / hamis) 16

Literálok "A literal is a source code representation of a value." (MSDN Library) Integer literal 42 (int) 42L (long) 0x4a (hexadicima int) 042L (octal long) Character literal 'c' '\n' (new line) '\t' (tab) '\\' (backslash) '\ud' ahol d hexadec. 4 jegyű szám (unicode karakter) pl.: '\u0041' (A) Boolean literal true false Floating-point literal 3.14f (float) 3.14d (double) - d nélkül is double (alapértelmezett).123 (double) (0.123) 10. (double) (ha csak 10-et írunk, akkor int) String literal (speciális, mivel nem primitív típus) "Hello World" "c" Null literal (minden szempontból speciális) null 17

Tömbök int[] data; data = new int[3]; data[0] = 42; data[1] = 30; data[2] = 0; Tömb literál (tömb inicializáció, speciális, mivel nem primitív típus) {} (üres tömb) {1, 2, 3} (3 elemű int tömb) {'a', 'b', 'c', 'd'} (4 elemű char tömb) int[] data = { 3, 2, 5, 7, 9, 2, 10 }; for (int i = 0; i < data.length; i++) { System.out.println(data[i]); } C# vs. Java: alapvető programozási tételek átírhatóak C#-ról Java nyelvre legtöbbször a Length length-re átírásával (vagyis az L-et kell kisbetűsíteni). Azonban: Java-ban a length egy nyilvános (történelmi okokból) és végleges (itt final, C# readonly) mező, addig C#-ban a Length egy nyilvános property. Java-ban nincsenek ilyen jellegű property-k. 18