Java (programozási nyelv)
| Java | |
| Paradigma | objektumorientált |
| Jellemző kiterjesztés | .java, .class, .jar, .war, .ear |
| Megjelent | 1995 |
| Tervező | James Gosling illetve a Sun Microsystems cég |
| Fejlesztő | James Gosling illetve a Sun Microsystems cég, amit később megvett az Oracle Corporation |
| Utolsó kiadás | Java Standard Edition 7 Update 3 (1.7.3) (2012. február 15.) |
| Típusosság | statikusan típusos, erősen típusos, típusbiztos, normatív |
| Fordítóprogram | Javac |
| Megvalósítások | OpenJDK, Sun HotSpot, JRockit, Jikes |
| Operációs rendszer | platformfüggetlen |
| Licenc | GNU General Public License / Java Community Process |
| Weboldal | |
A Java egy általános célú, objektumorientált programozási nyelv, amelyet a Sun Microsystems fejleszt a ’90-es évek elejétől kezdve napjainkig. A Java alkalmazásokat jellemzően bytecode formátumra alakítják, de közvetlenül natív (gépi) kód is készíthető Java forráskódból. A bytecode futtatása a Java virtuális géppel történik, ami vagy interpretálja a bytecode-ot vagy natív gépikódot készít belőle és azt futtatja az adott operációs rendszeren. Létezik közvetlenül Java bytecode-ot futtató hardver is, az úgynevezett Java processor.
A Java nyelv szintaxisát főleg a C és a C++ nyelvektől örökölte, viszont a Java sokkal egyszerűbb objektummodellel rendelkezik, mint a C++. A Javascript szintaxisa és neve hasonló ugyan a Javahoz, de nincs közvetlen köze egymáshoz a két nyelvnek.
Bár a nyelv neve kezdetben Oak (tölgyfa) volt, (James Gosling, a nyelv atyja nevezte így az irodája előtt növő tölgyfáról), de később kiderült, hogy ilyen elnevezésű nyelv már létezik, ezért végül Java néven vált ismertté. A Java szó a Sun Microsystems védjegye. Ennélfogva engedélye nélkül más nem használhatja más által kifejlesztett termékek megjelölésére még például Java-szerű stb. összetételekben sem, mert ez a védjegyjogosult jogaiba ütközik.
Tartalomjegyzék
|
[szerkesztés] Általános tudnivalók
A Java nyelvet kávézás közben találták ki, innen ered a kávéscsésze ikon.[forrás?] Négy fontos szempontot tartottak szem előtt, amikor a Javát kifejlesztették:
- objektum-orientáltság;
- függetlenség az operációs rendszertől, amelyen fut (többé-kevésbé);
- olyan kódokat és könyvtárakat tartalmazzon, amelyek elősegítik a hálózati programozást;
- távoli gépeken is képes legyen biztonságosan futni.
[szerkesztés] Objektum-orientáltság
A nyelv első tulajdonsága, az objektum-orientáltság („OO”), a programozási stílusra és a nyelv struktúrájára utal. Az OO fontos szempontja, hogy a szoftvert „dolgok” (objektumok) alapján csoportosítja, nem az elvégzett feladatok a fő szempont. Ennek alapja, hogy az előbbi sokkal kevesebbet változik, mint az utóbbi, így az objektumok (az adatokat tartalmazó entitások) jobb alapot biztosítanak egy szoftverrendszer megtervezéséhez. A cél az volt, hogy nagy fejlesztési projekteket könnyebben lehessen kezelni, így csökken az elhibázott projektek száma.
[szerkesztés] A Java szerepei
A Java szoftver három igen fontos szerepet tölt be:
- mint programozási nyelv;
- mint középszint (köztes réteg - middleware);
- mint platform.
A Java legfontosabb része a Java virtuális gép (Java Virtual Machine – JVM). A JVM mindenütt jelen van (szinte mindenféle berendezés, chip és szoftvercsomag tartalmazza), így a nyelv középszintként és platformként egyaránt működik. Ugyanakkor a nyelv „platformfüggetlen” is, mert a Java virtuális gépek interpretálják a szabványos Java bájtkódot. Ez azt jelenti, hogy egy PC-n megírt Java program minimális módosítás után ugyanúgy fog futni egy javás telefonon is. Innen jön az írd meg egyszer, futtasd bárhol kifejezés. Ez jelentős költségcsökkenést eredményez, mert a kódot csak egyszer kell megírni.
[szerkesztés] Platformfüggetlenség (hordozhatóság)
A második tulajdonság, a platformfüggetlenség azt jelenti, hogy a Javában íródott programok hasonlóan fognak futni különböző hardvereken. Ezt úgy lehet megvalósítani, hogy a Java fordítóprogram csak egy úgynevezett Java bájtkódra fordítja le a forráskódot, ami aztán futtatva lesz a virtuális gépben, amely lefordítja az illető hardver gépi kódjára. Továbbá, szabványos könyvtárcsomagok léteznek, amelyek elérhetővé teszik az illető hardver sajátságosságait (grafika, szálak és hálózat) egységes módon.
Vannak olyan Java fordítóprogramok, amelyek natív gépi kódra fordítják le a forráskódot, ilyen például a GCJ, így valamelyest felgyorsítják a futtatást, de ugyanakkor a lefordított program elveszti hordozhatóságát.
A Sun Microsystems licence ragaszkodik a különböző Java kivitelezések összeférhetőségéhez. Egyes cégek, mint például a Microsoft, mégis platformfüggő sajátságokat adtak a nyelvhez, amire a Sun keményen reagált: beperelte a Microsoftot (az amerikai bíróság 20 millió dollár kártérítésre és a sajátos tulajdonságok visszavonására kötelezte a céget).
Válaszként a Microsoft kihagyta a Java rendszert a jövőbeli termékekből és Windows-változatokból. Ez azt jelenti, hogy az Internet Explorer webböngésző alapváltozataiból hiányzik a Java, így az olyan weboldalak, amelyek Javát használnak, nem fognak helyesen megjelenni. A Sun és más cégek ingyenesen letölthetővé tették a JVM rendszert azon Windows-változatok számára, amelyekből a virtuális gép hiányzik.
A hordozhatóság megvalósítása technikailag nagyon bonyolult, a Java esetében is sok vita volt; az „írd meg egyszer, futtasd bárhol” szlogenből „írd meg egyszer, keress hibát mindenhol” lett.
Ennek ellenére a Java sikeres lett a servlet, a JSP és Enterprise JavaBeans kiszolgálóoldali technológiákkal.
[szerkesztés] Biztonságos távoli futtatás
A Java rendszer volt az első, amely lehetővé tette a távoli gépeken való futtatást. Egy kisalkalmazás futtatható volt a felhasználó gépén (letöltve a Java kódot egy HTTP kiszolgálóról). A kód egy biztonságos környezetben fut, amely nem teszi lehetővé a "rossz szándékú" kód futtatását; a kiadók kérhetnek olyan tanúsítványokat, amelyeket digitálisan aláírnak, tanúsítva, hogy a kisalkalmazás biztonságos, lehetővé téve ennek kilépését a biztonságos környezetből (ugyancsak a felhasználó felügyelete alatt).
[szerkesztés] A nyelv
[szerkesztés] A klasszikus „Helló Világ!” Javában
A következő egyszerű program kiírja azt, hogy „Helló Világ!” az alapértelmezett kimeneti eszközre (ami általában a képernyő, de lehet egy fájl vagy bármi más is).
public class HelloVilag { public static void main(String[] args) { System.out.println("Helló Világ!"); } }
[szerkesztés] Vezérlés
[szerkesztés] Ciklusok
[szerkesztés] while
A while egy olyan ciklus, amely a belsejében lévő utasításokat mindaddig ismétlődően végrehajtja, ameddig a megadott feltétel igaz.
while (logikai kifejezés) { utasítás(ok) }
[szerkesztés] do - while
A do…while ciklus hasonlóan a while ciklushoz, addig hajtja végre a belsejében lévő utasításokat, ameddig a feltétel igaz. A while és a do…while között annyi a különbség, hogy a while az utasítások lefuttatása előtt kiértékeli feltételt, így ha már az első alkalommal a feltétel hamis, a belsejében lévő utasítások egyszer sem futnak le. A do…while ezzel ellentétben viszont csak az utasítások lefuttatása után értékeli ki a kifejezést, tehát ebben az esetben egyszer mindenképpen végrehajtja a belsejében lévő utasításokat.
do { utasítás(ok) } while (logikai kifejezés);
[szerkesztés] for
A for ciklus általános alakja a következő:
for (inicializáló kifejeztés(ek) ; ciklusfeltétel(ek) ; léptető kifejezés(ek) ) { utasítás(ok) }
[szerkesztés] for - in
A Java 1.5 verziótól kezdve for ciklussal iterálhatóak a tömbök és a java.lang.Iteratable interface implementációi a következő szintaxissal:
for (elem : tömb) { utasítás(ok) }
Például:
for (String s : new String[]{"1","2","3"}) { System.out.println(s); }
[szerkesztés] Feltételes utasítások
if (logikai kifejezés) { utasítás(ok) }
if (logikai kifejezés) { utasítás(ok) } else { utasítás(ok) }
Elegendő else if utasításokkal bármilyen komplex ha-akkor szerkezetet ki lehet építeni.
if (logikai kifejezés) { utasítás(ok) } else if (logikai kifejezés) { utasítás(ok) } else if (logikai kifejezés) { utasítás(ok) } else { utasítás(ok) }
Az előbbi szerkezet kiváltható, ha ugyanazt az egész kifejezést kell kiértékelni több esetben is. Ezzel kevesebb leütéssel (rövidebb a kód hossza) és átláthatóbb a megvalósítás.
switch (egész kifejezés) { case konstans egész kifejezés: utasítás(ok) break; … default: utasítás(ok) break; }
[szerkesztés] Kivételkezelés
try { utasítás(ok) } catch (kivételtípus) { utasítás(ok) } catch (kivételtípus) { utasítás(ok) } finally { utasítás(ok) }
[szerkesztés] Feltétel nélküli ugróutasítások
A Java nem támogatja a goto utasítást, mivel ennek használata pongyola kódot eredményezhet. Nagyon ritkán mégis szükség van a goto-ra, a Java lehetővé tesz alternatív megoldásokat, ami a címkézhető continue és break utasítás. A goto fenntartott szó és nem használható azonosítóként.
[szerkesztés] Korai kilépés a ciklusokból
A Java nyelv két utasítást is ad a ciklusból való kilépéshez. A
continue;
utasítás befejezi a folyamatban levő ismételgetést és egy újabbat kezd (ugyanúgy viselkedik, mint a ciklus elejére ugró goto).
Hasonlóan, a
break;
utasítás teljesen kilép a ciklusból, és több ismételgetést nem hajt végre. A hatás ugyanaz, mint egy goto utasítás a cikluson kívülre.
A Java break és continue utasításai sokkal hatásosabbak, mint a C és C++ hasonló nevű utasításai, mert képesek egy többszintű ciklusból is kilépni (csak annyi a teendő, hogy megcímkézzük a ciklust és hozzátoldjuk a break vagy continue utasításokhoz. Ugyanezt csak goto utasítással lehet elérni C-ben és C++-ban).
Példa:
kulso: while (true) { belso: while (true) { break; // kilépés a legbelső ciklusból break belso; // ugyancsak kilépés a legbelső ciklusból break kulso; // kilépés a <em>legkülső</em> ciklusból } }
[szerkesztés] Korai kilépés az eljárásokból
A
return;
utasítás befejez egy eljárást.
A
return aErtek;
visszaad a hívó eljárásnak egy értéket (aErtek) is visszatéréskor.
[szerkesztés] Alapvető adattípusok
A nyelv alapvető adattípusai, más szóval primitív típusai a következők:
| Változó típusa | Leírás |
|---|---|
| byte | 8 bites előjeles egész |
| short | 16 bites előjeles egész |
| int | 32 bites előjeles egész |
| long | 64 bites előjeles egész |
| float | 32 bites egyszeres lebegőpontosságú (IEEE 754 szabvány) |
| double | 64 bites kétszeres lebegőpontosságú (IEEE 754 szabvány) |
| char | 16 bites Unicode-karakter |
| boolean | logikai érték (igaz / hamis) |
A tömbök és karakterláncok nem alapvető adattípusok, hanem objektumok.
[szerkesztés] Karakterek
A Java a 16 bites Unicode kódolást (az UTF-16-ot) használja. Ez tartalmazza a szabványos ASCII-karaktereket, de ugyanakkor tartalmazza más nyelvek karakterkészletét is (pl: görög, cirill, kínai, arab stb.). A Java programok mindezeket a karakterkészleteket képesek használni, habár a legtöbb szerkesztőprogram csak a hagyományos ASCII karakterkészletet támogatja.
[szerkesztés] Interfészek és osztályok
Az egyik fontos tulajdonsága a Javának az, hogy lehetővé teszi interfészek létrehozását, amit az osztályok megvalósítanak. Példa egy interfészre:
public interface Torolheto { public void torol(); }
Ez az interfész csak annyit határoz meg, hogy minden, ami törölhető biztosan rendelkezik egy eljárással: torol(). Ennek a fogalomnak több haszna is van, mint például:
public class Fred implements Torolheto { //Itt kötelező megvalósítani a torol() eljárást }
Más osztályban lehetséges a következő:
public void torolMindent(Torolheto[] lista) { for (int i = 0; i < lista.length; i++) lista[i].torol(); }
Léteznek továbbá jelölő interfészek amelyeket nem szükséges implementálni ilyen a Serializable
[szerkesztés] Ki- és bemenet
A következő kódrészlet bemutatja egy karakter beolvasását a felhasználótól, majd ennek kiíratását:
public static void main(String[] args) throws java.io.IOException { char a; System.out.println("Üdvözlöm! Kérem írjon be egy betűt."); a = (char) System.in.read(); System.out.println("A beütött betű: " + a); }
[szerkesztés] Objektumorientált programozás megvalósítása
A származtatott osztály megadása extends segítségével:
class Alaposztaly { int i; void Eljaras(){ i++; } }
class Szarmaztatott extends Alaposztaly { //eljaras felulirasa void Eljaras() { i+=2; } }
A származtatáskor az alaposztály minden elemét átvette a származtatott osztály, de az Eljaras() metódusát felüldefiniáltuk.
Alaposztály konstruktor meghívása a super segítségével
class Szarmaztatott extends Alaposztaly { //Konstruktor Szarmaztatott(int i){ //Alaposztaly konstruktoranak atadjuk a parametert super(i); Masik_valtozo = i; } }
[szerkesztés] A Java története
A Java nyelv története összeforrt a Sun Microsystems Java fordítójával és virtuális gépével és az ezekhez kapcsolódó fejlesztői programcsomaggal (Java SDK vagy újabban JDK – Java Development Kit), amely a Java nyelv és ahhoz kapcsolódó szabványok standard implementációjának tekinthető. A nyílt szabványt képviselő, de zárt forráskódú Java eszközök miatt sok kritikát kapott a Sun a Free Software Foundationtól. Valószínűleg ennek is köszönhető, hogy a Sun Microsystems 2007-ben a Java SE (Standard Edition), Java ME (Micro Edition) és a Java EE (Enterprise Edition) GPL licenc alatt nyílt forráskódúvá, azaz szabad szoftverré teszi, ahogy ez már részben meg is történt a Java EE esetében, nem GPL-kompatibilis licenccel.
[szerkesztés] Java FX
2006-ban megjelent egy változata a Java-nak JavaFX néven, ami egy szkriptnyelvet takar. Gyorsan egyszerűen tudunk vele asztali alkalmazásokat készíteni.
A JavaFX drasztikusan lerövidült termelési ciklust kínál a Java-fejlesztők és a webfejlesztők számára egyaránt, valamint megkönnyíti a grafikát, videót, audiót, animációt és gazdag szövegfunkciókat tartalmazó alkalmazások létrehozását. A JavaFX abból a szempontból egyedülálló, hogy egységesített fejlesztési és telepítési modellt kínál kifejezésteli, gazdag internetes alkalmazások (RIA) asztali számítógépen, böngészőn és mobilon történő kiépítéséhez. Ráadásul az új JavaFX mobil emulátor használata mellett a fejlesztők előzetesen megtekinthetik alkalmazásaikat a közeljövőben bevezetett JavaFX mobilplatformon, amely 2009 tavaszától lesz elérhető a Sun mobilpartnerei számára.[1]
[szerkesztés] Változatok
- 1.0 (1996) – kódneve Oak (tölgy), ez volt az első verziója a Java virtuális gépnek és az osztálykönyvtáraknak. Ez a következő főbb eszközöket jelentette: jvm a java programok futtatásához, java plugin böngészőhöz, java fordító, debugger, applet viewer. Főbb könyvtárak léteztek már a grafikus megjelenítéshez (AWT), audio-hoz, animációhoz, és a hálózat kezeléshez. Nyelvi szinten a nyelvet jellemezték a következők: Objektum Orientáltság, C/C++-hoz hasonló szintaxis, 1 fájl 1 osztály elve, interface-ek, absztrakt osztályok. Továbbá jellemző volt még az interpretált végrehajtás is.
- 1.1 (1997) – itt jelent meg először a belső osztály fogalom - ami lehetővé teszi több osztály egymásba ágyazását,valamint a JDBC az adatbázis kezeléshez, RMI a távoli metódus hívásokhoz, a Reflection API az osztály/példány elemzéshez, dinamikus példányosításhoz/metódus híváshoz.
- 1.2 (1998) – kódneve Playground (játszótér), ez a verzió számottevő mérföldkő volt a nyelv evolúciójában. Azért, hogy ezt kihangsúlyozza, a Sun hivatalosan Java 2-nek nevezte el.
- 1.3 (2000) – kódneve Kestrel, csak néhány kisebb változtatást végeztek el rajta. Itt került be a Hotspot JVM a rendszerbe, a Java Sound. A JNDI API is hivatalos része lett a belső belső rendszernek.
- 1.4 (2002) – kódneve Merlin, ez ma a legelterjedtebb változat.Sok újdonsággal pl. új API a reguláris kifejezések kezelésére,exception láncolás,NIO, Java logging API,Image IO, JAXP, JSSE, Java Web Start a vastag kliensek könnyebb webes futtatásához, update-eléséhez,Preferences API.
- 5 (2004) – belső számozás szerint 1.5, kódneve Tiger, újdonsága például a továbbfejlesztett ciklusmegoldások, az adattípusok automatikus objektummá alakítása (autoboxing), a generic-ek.
- 6 (2006) – belső számozás szerint 1.6.0, kódneve Mustang. Decemberben jelent meg a végleges változat kiterjesztett nyomkövetési és felügyeleti megoldásokkal, szkriptnyelvek integrációjával, grafikusfelület-tervezést támogató kiegészítésekkel.
- 7 (2011) – kódneve Dolphin. 2011. július 28-adikátől érhető el hivatalosan. Főbb újdonságai a teljesség igénye nélkül: JVM támogatás a dinamikus nyelvekhez,nyelvi bővítések: String-ek engedélyezése
switchutasításban, automatikus erőforrás kezelés,új IO könyvtár, Generic bővítése; GPU-t kihasználni képes XRender API a Java 2D-hez. - 8 (2012 vége) – Amit már tudni lehet, hogy biztosan tartalmazni fog: JDK modularizáció, amit a Jigsaw projekt keretében dolgoztak ki, Lambda kalkulus beépítése nyelvi szinten a Lambda projekt keretében, valamint a 7-be még nem beépített Coin projekt részek.
[szerkesztés] Kapcsolódó szabad szoftverek
- GCJ – Nyílt forrású Java fordítóprogram, amely a GNU Compiler Collection része, képes Java bájtkódot vagy natív gépi kódot generálni számos géptípusra
- A Jakarta projekt szabad Java szoftvert készít, főleg webes programok írásához szükséges eszközöket
- Eclipse – ingyenes integrált fejlesztői környezet
- NetBeans – ingyenes integrált fejlesztői környezet
- JUnit – tesztkészítő segédeszközök
[szerkesztés] Források
[szerkesztés] Külső hivatkozások
- A Java hivatalos webhelye
- Szabad és nyílt forráskódú Java
- Sun oktatói weboldalak
- Java Standard Edition 6 dokumentációja
- Java 2 Platform Standard Edition 5.0 dokumentációja
- Szabad szoftverek Java nyelven
- Java Fórum
- Java wiki
- Java a Startlapon
- Full Java Tutorial
- JavaFX Technology
- Java Guru
- Tajti Ákos Java fejtörők és technológiák blogja
|
||||||||||||||||||||||||||

