2014. szeptember 21., vasárnap

Java programozási nyelv - adattípusok és változók

A Java adattípusai a következők:

boolean: logikai típus, értéke true vagy false lehet.
char: két bájtos adatként egyetlen unicode karakter tárolására használjuk
byte: egy bájtos előjeles egész (-127 és 128 közti érték)
short: két bájtos előjeles egész (-32735 és 32736 közti érték)
int: négy bájtos előjeles egész
long: nyolc bájtos előjeles egész
float: négy bájton ábrázolt lebegőpontos szám
double: nyolc bájton árbrázolt lebegőpontos szám

Az alaptípusok nem referenciatípusok! Ahhoz hogy referenciával rendelkezzenek (kvázi a C nyelv mutatóinak felel meg) ahhoz úgynevezett csomagoló osztályokat kell alkalmaznunk. Ezzel az elemi típusokat objektumként tudjuk kezelni és ahol referenciatípust vár egy paraméter, ott csomagolóosztályként tudunk értékeket átadni.

A csomagolóosztályok a következők:

Boolean, Character, Integer (ez az összes egész típusra használható), Float és Double.


Ezek az adattípusok gépfüggetlenek, azaz minden JVM adaptáció pontosan ugyan úgy kezeli ezeket, függetlenül az adott hardvertől.

Változók deklarálásakor a C-ben megszokottak szerint járhatunk el.
Például:

int i;
float x,y;
boolean b;

deklarációkor egyből értéket is kaphatnak a változók:

char c='A';
int i=100, j=200;

Az egyes változók alapértékeket kapnak, ha nem adunk értéket a definiáláskor. Ezek a következők:

char -> '\0'
egész típusok -> 0
lebegőpontosok -> 0.0
boolean -> false

A Java objektumok a nyelv legfontosabb elemei. Az objektumokat úgynevezett referenciaváltozókon keresztül érjük el. A referenciaváltozók a C nyelv mutatóihoz hasonlítható, azzal a különbséggel hogy míg a mutatók kezelése teljes mértékben a programozó feladata és felelőssége, addig a referenciák a JVM menedzselése alatt állnak. Közvetlenül meg sem tudható egy objektum referenciájának értéke (azaz a memóriacím ahol megtalálható az objektum). Ez biztonságossá és egyszerűvé teszi a programozást.

Referencia a new operátorral kérhető a példányosítás során:

Car mycar = new Car();

Innentől kezdve a mycar nevű referenciaváltozó automatikusan egy Car típusú objektum egészét jelenti.

A referenciáknak értékül adható a null érték, mely sehová sem mutat. Ezzel elérhetetlenné válik az addig hivatkozott objektum. Az objektumokat a C++ nyelven meg kellett szüntetni ha már nem használtuk, hogy a lefoglalt memória felszabadulhasson. Ezt az úgynevezett destruktor hívással lehetett megtenni. Javában nincs szükség destruktor hívásra. Az objektumokat a JVM kezeli és ha már nincs rá hivatkozás, akkor az úgynevezett Garbage Collector (GC) mechanizmus felelős a memória felszabadításáért.


Hogyan működik a Java? - A Java fejlesztői és futtató környezet

A programkészítés lépései természetesen a Java programozás kapcsán is értelmezhetők. Ezek a következők:

  • Program írás
  • Fordítás
  • Futtatás

Programírás:
A programírás kapcsán a Java nyelv szabályai szerint megírjuk a programunk forrásnyelvi változatát. Ennek eredményeként egy .java kiterjesztésű standard ASCII szövegfájlt kapunk. 

Fordítás:
A fordítás során ezt a forrásfájlt kell átalakítani bájtkóddá, amit majd a Java virtuális gép futtatni tud. Ahhoz hogy ezt az átalakítási műveletet el tudjuk végezni, szükség van a Java fordítóprogramra. Ez a Java Development Kit (JDK) része. A JDK többféle változatban és többféle platformra áll rendelkezésre. Linux, Windows, Mac és Solaris rendszerekre is elérhető. A JDK a fejlesztéshez szükséges segédprogramokat, fordítót, nyomkövetőt és a szabványos osztálykönyvtárakat tartalmazza. Az osztálykönyvtárak 6500-nál is több intefészt, osztályt tartalmaznak, melyek nagyban megkönnyítik a programfejlesztést.
Az előző cikkben említettem hogy létezik Micro, Standard és Enterprise Edition, attól függően hoyg milyen jellegű alkalmazást szeretnénk készíteni. Kezdetnek a Java SE megfelelő választás.
A telepítők az Oracle honlapján elérhetők! 

A JDK telepítése után rendelkezésre fog állni a Java fordító (Java compiler), mely a javac parancs kiadásával érhető el. A fordító verziója a javac -version paranccsal kérdezhető le.


Futtatás:
Futtatási fázisban a lefordított Java bájtkódot átadjuk a virtuális gépnek, amit betölt és elindít.
A Java futtatási környezet (Java Runtime Environment, JRE) tartalmazza a virtuális gépet (JVM). A JRE része a fentebb említett JDK-nak. Tehát ha valaki telepítette a JDK-t annak már van telepített JRE-je is. A JDK-ra igazából a programozóknak van szüksége, a felhasználóknak elegendő a JRE. Ezért külön telepítőcsomagban is elérhetővé tették a JRE-t, amit szintén az Oracle honlapjáról tölthető le. Ezután a java parancs rendelkezésre áll, hogy futtassuk segítségével a Java programjainkat.

Példa:
Példaként nézzük a méltán híres Hello Wolrd! programot Java nyelven:

A Java nyelv szabályai szerint egy osztálydefiníciót kell készítenünk. A forrásfájl nevének meg kell egyezni a definiált osztály nevével. Hozzuk létre tehát a HelloWorld Java osztályt egy HelloWorld.java fájlban! A fájl a következőt tartalmazza:

public class HelloWorld {

  public static void main(String[] args) {
       System.out.println("Hello World!");
  }
}

Ez tehát a forrásállományunk. Ahhoz hogy ezt futtatni tudjuk először bájtkóddá kell átalakítani, lefordítani. Ehhez adjuk ki a következő parancsot:

javac HelloWorld.java

A fordítás eredményeként létrejön a HelloWorld.class állomány, mely már java bájtkódot tartalmaz és amit már bármilyen JVM futtatni képes. 
A futtatáshoz adjuk ki a következő parancsot:

java HelloWorld

A parancs hatására betölti a JVM a HelloWorld java osztályt és meghívja a main() metódusát. Mivel ez az osztály nincs példányosítva ezért a main metódus csak akkor érhető el ha statikus metódusként deklaráljuk. Ezért szükséges a public static minősítés a main deklarálásakor.

Az alábbi kép bemutatja a fentebb leírt dolgokat, sorba véve a JDK és a JVM használatát:

Java fejlesztés lépései a HelloWorld példa alapján


A Java kialakulása

A Java a 90-es években jelent meg, az Internet korszak kiteljesedésének kezdetén. Azóta látványos fejlődésen ment keresztül és a fejlődés napjainkban is tart.

A Java kialakulásának kezdetén a tervezők (Patric Naughton és James Gosling) egy olyan futtatási környezetben gondolkodtak, ami bármilyen platformon képes a Java programokat futtatni. Tehát egy olyan virtuális gép megvalósítása volt a cél, melyre a forrásprogramból egy közbenső kódot generálnak és minden platformon ahol létezik a virtuális gép, futtatni lehet ezt a közbenső kódot. Így alakult ki a Java Virtual Machine - azaz a JVM - ami elengedhetetlen a Java programok futtatása terén. Így gyakorlatilag a nyelvet általánossá tették és a különféle architektúrákon is futhattak a Java programok.

A JVM egy olyan szoftveresen megvalósított környezet, ami képes betölteni a Java osztályokat (class fájlok) és az osztálydefinícióban lévő java forrásnyelvi utasításokat képesek az adott architektúra gépi nyelvére fordítani és azt végrehajtani.

A Java tervezői a C/C++ nyelveket használták, így megtartották annak szintaktikai elemeit, kulcsszavait. Ugyanakkor egyszerűsítettek ahol lehetett és tisztán objektum-orientált nyelvvé alakították. Ez mellett úgy tervezték meg hogy a programozási hibák már a fordítási időben kiderüljenek.

A Java első sikereit a Webnek köszönheti. Az akkori webböngészőkbe implementálták a JVM-et és így képesek voltak dinamikus weboldalak megvalósítására.

A Java hivatalosan 1995 májusában jelent meg a SUN MICROSYSTEM égisze alatt. A második kiadás 1998-ban került publikálásra. Ebben már különválasztották a beágyazott (Micro Edition), az általános desktop (Standard Edition) és az üzleti célú (Enterprise Edition) verziókat.

A Java nem csupán egy programozási nyelv, hanem egy igen gazdag és részletes, szinte mindenre kiterjedő programozási és futtatási környezet, mely folyamatosan fejlődik.
Jelenleg (2014 őszén) a Java 8 a legfrissebb verzió és az Oracle szárnyai alatt fejlődik (1.7 verzió óta).

[Varjasi: Programozás III. alapján]