Java je objektno-orijentirani programski jezik razvijen u timu predvođenim Jamesom Goslingom u kompaniji Sun Microsystems početkom 1990-tih. Ideja je bila da se stvori programski jezik koji bi bio nezavisan od operativnog sistema, baziran na C++-u, ali sa pojednostavljenom sintaksom, stabilnijim runtime sistemom i pojednostavljenom kontrolom memorije.
Java nema veze sa JavaScriptom, iako oba jezika koriste sličnu sintaksu baziranu na C sintaksi.
Pet osnovnih razloga za razvoj Jave su:
Da bi postigli mrežnu podršku i izvršavanje programa na udaljenim serverima, Java programeri ponekad moraju koristiti dodatke poput CORBA ili OSGi.
Osnovni koncept u Javi je klasa (engleski: class), tj. sav izvorni kod je napisan unutar klasa. U pravilu, svaka klasa je deklarirana unutar datoteke sa istim imenom i sufiksom .java. Ovo pravilo je donekle nametnuto kompajlerom koji zahtijeva da su imena klasa i datoteka ista (osim tzv. unutrašnjih klasa, engleski: inner classes). Osnovni tipovi u Javi, poput int, boolean, byte i sl. su također predstavljeni u klasama (napomena: Reflection types) i imaju odgovarajuće klasne omote poput java.lang.Integer, java.lang.Boolean i java.lang.Byte.
int
boolean
byte
java.lang.Integer
java.lang.Boolean
java.lang.Byte
Javin izvorni kod nije kompajliran u mašinski kod nego je pretvoren u tzv. bytecode koji zahtijeva posebno okruženje da bi se mogao izvršavati. To okruženje se u ovom slučaju zove Javina virtualna mašina (engl. Java Virtual Machine ili JVM). Trenutno JVM podržava najrasprostranjenije operativne sisteme, mada ne sve. Ideja je da ako se kod napiše i kompajlira na jednoj platformi (npr. Mac OS X), taj isti bytecode se može izvršavati na svim ostalim platformama koje imaju JVM (npr. Microsoft Windows XP, Linux) bez potrebe za ponovnim kompajliranjem na toj platformi.
U Javi, za razliku od npr. C++-a, memorija namijenjena objektu je automatski počišćena, tj. vraćena sistemu čim se taj objekat više ne koristi (za tog objekta kažemo da je van domašaja ili engleski: out of scope). To nije slučaj u C++-u gdje svaki objekat koji je stvoren mora biti ručno izbrisan koristeći uputu delete (ako se to ne uradi onda dođe do tzv. curenja memorije ili engleski: memory leak).
delete
Iako je Java nastala od C++, ali za razliku od C++, koji dozvoljava struktuirane kao i objektno orijentirane principe, u Javi su objektno orijentirani principi obavezni. Sve je u Javi objekat, a sav izvorni kod je pisan unutar klasa.
// VozdraRaja.java public class VozdraRaja { public static void main(String[] args) { System.out.println("Hello world!"); } }
VozdraRaja
VozdraRaja.java
VozdraRaja$1.class
main()
void
args
argumenti
static
public
java.lang.System
out
java.io.PrintStream
println(java.lang.String)
javac
$ javac VozdraRaja.java
C:\> javac VozdraRaja.java
$ java -cp . VozdraRaja
C:\> java -cp . VozdraRaja
Ime klase koja sadrži glavnu metodu koja se pokreće može se također deklarisati u META-INF/MANIFEST.MF datoteci u Java arhivi, tj. JAR fajlu.
Java apleti (applets) su (obično mali) programi koji su uključeni unutar drugih aplikacija, obično web stranice prikazane (i izvršavane) unutar browsera.
// VozdraRaja.java applet import java.applet.Applet; import java.awt.Graphics; public class VozdraRaja extends Applet { public void paint(Graphics gc) { gc.drawString("Vozdra raja, nema Hello world!", 65, 95); } }
<!-- VozdraRaja.html stranica što sadrži VozdraRaja applet --> <html> <head> <title>Vozdra Raja Applet Primjer</title> </head> <body> <applet code="VozdraRaja" width="200" height="200"> </applet> </body> </html>
import
java.applet.Applet
java.awt.Graphics
Applet
paint(Graphics)
Container
paint()
Graphics
drawString(String, int, int)
code="VozdraRaja"
width="200"
height="200"
object
embeded