Java-faili kompileerimine ja käivitamine
Sissejuhatus
Java programm kirjutatakse inimloetava Java koodina ning salvestatakse java-failina (.java faililaiendiga fail).
Java-faili kompileeritakse class-faili, mis koosneb Java baitkoodist ja on seetõttu platvormist sõltumatu (.class faililaiendiga fail).
Programm käivitatakse JVM (Java Virtual Machine) sees ning kuna fail koosneb baitkoodist saab igal platvormil (Windows, Linux, Mac) sama faili käivitades sama tulemuse.
Koodinäide
Võtame näiteks eelnevas peatükis kirjutatud koodi:
public class Introduction {
private int value;
public Introduction(int value) {
this.value = value;
}
public void printValue() {
System.out.println("Value: " + value);
}
public static void main(String[] args) {
Introduction obj = new Introduction(5);
obj.printValue();
}
}
Programmi kompileerimine
Java-faili saab käivitada käsurealt (command line). Selleks tuleb fail kõigepealt kompileerida ning siis käivitada. IDE'd (nagu näiteks IntelliJ) teevad kogu selle töö ise ära, kui vajutada Run nuppu.
Käsureal tuleb liikuda õigesse kausta ning siis saab Java-faili kompileerida käsuga javac failinimi.java.
Näide (oletades, et meie failinimi on Introduction.java):
javac Introduction.java
Alternatiivselt ei pea faili kompileerimiseks liikuma selle faili kausta, vaid võib kasutada faili asukohta (file path).
Sellisel juhul peab failis paki ära defineerima. Näiteks kui faili asukoht on src/ee/taltech/iti0202/introduction/Introduction.java peab faili algusesse kirjutama:
package ee.taltech.iti0202.introduction;
Siis saab faili kompileerida järgneva käsuga:
javac ee/taltech/iti0202/introduction/Introduction.java
Mõlema tulemusena peaks tekkima fail Introduction.class.
Programmi käivitamine
Programmi käivitamiseks tuleks sisestada java failinimi käsk:
java Introduction
Kui kompileerisid faili paki sees, pead faili käivitamisel kasutama failinimena package1.package2.Main:
java ee.taltech.iti0202.introduction.Introduction
Mõlema näite puhul käivitatakse klassi Introduction main() meetodis olev kood ning käsurida peaks tulemusena näitama arvu 5.
Kompileerimise eelised
Kompileerimise protsess võib tunduda raske ning tekitada küsimust, et miks seda kõike vaja on. Tegelikult pakub kompileerimine mitmeid olulisi eeliseid, näiteks:
- Varajasem vigade avastamine
- Kompileerimise käigus kontrollitakse programmi süntaksit ja struktuuri (semikoolonite olemasolu, sulgude korrektsust jms.). See kontroll tagab vigade avastamise enne programmi käivitamist, mis muudab vigade parandamise lihtsamaks ja kiiremaks.
- Tüübikindlus ja suurem töökindlus
- Kuna Java on tüübikindel keel, siis kõikide muutujate ja meetodite tüübid peavad teada olema juba kompileerimise ajal. See aitab vältida olukordi, kus programm proovib töödelda vale tüüpi andmeid ning vähendab programmi käitusajal (runtime) tekkivate vigade tõenäosust
- Jõudlus
- Kompileerimise käigus viiakse läbi algne koodi optimeerimine.
- Lisaks kasutab JVM käitusajal JIT (Just-In-Time) kompilaatorit, mis muudab sageli käivitatava baitkoodi otse konkreetse protsessori jaoks optimeeritud masinkoodiks. See parandab oluliselt programmi jõudlust võrreldes puhtalt interpreteeritavate keeltega (nt: Python).
Kompileerimisvea näide
Selleks, et kompileerimise eelistest rohkem aru saada, on järgnevas näites kujutatud varajast vea avastamist. Olgu näiteks järgmine kood:
public class Example {
public static void main(String[] args) {
int number = "hello"; // <- Incompatible types: int <-/-> String
}
}
Kui käivitada kompileerimise käsk javac Example.java, siis kompilaator vastab meile järgneva veateatega:
error: incompatible types: String cannot be converted to int
Kompileerimise käigus tuvastati, et int tüüpi muutujale üritatakse omistada String väärtust.
Kuna Java on tüübikindel keel, ei ole selline operatsioon lubatud ning programm ei kompileeru.
Koodiredaktorid tõstatavad neid vigu automaatselt:
