Editarea, compilarea și executarea aplicațiilor Java

Fiecare aplicație Java parcurge următoarele etape: editarea programului sursă, compilarea și eliminarea erorilor sintactice, testarea și eliminarea erorilor de concepție, executarea. În acest scop, pe calculatorul pe care lucrați trebuie sa existe un set de dezvoltare Java, preferabil Java 2 Platform SDK, Standard Edition. Pentru a dezvolta aplicații Java:

Editarea fisierului sursă

Pentru început, vom considera că aplicația este constituită dintr-o singură clasă, care respectă șablonul indicat anterior. Programul sursă pentru această clasă va fi editat sub forma unui fișier separat, care are același nume cu clasa și are extensia .java.
 De exemplu, clasa PrimaAplicatie va fi editată sub forma unui fișier de text cu numele PrimaAplicatie.java. Este preferabil să puneți acest fișier într-un subdirector separat. De exemplu puteti crea un subdirector numit javaLab, în care să creați un alt subdirector numit sapt1, în care sa puneți fișierul PrimaAplicatie.java.

Pentru crearea fișierului se va folosi un editor de text simplu, care generează numai text neformatat, de exemplu "Notepad" daca lucrați sub Windows sau sub Linux cu  WinLinux99, respectiv "Text Editor" sau "Advanced Editor", daca lucrați sub Linux cu KDE.

Compilarea și eliminarea erorilor semnalate de compilator

Translatarea programului sursă în program sub forma de cod de octeți (bytecode) se face cu ajutorul compilatorului Java, numit javac. În acest scop, va deplasați în subdirectorul în care se găsește programul sursă pe care doriți să-l compilați și dați comanda
    javac <fisier_sursa>
De exemplu, pentru a compila fișierul care conține clasa PrimaAplicatie mergeti în subdirectorul în care se găseste fișierul respectiv și dați comanda
   javac PrimaAplicatie.java

După ce ați dat această comandă, veți obține unul din următoarele rezultate:

  1. Pe ecran apare din nou promptul sistemului de operare, fără a se afișa un mesaj de eroare. În acest caz, compilarea a decurs normal, iar dacă dați comanda dir veți constata ca în subdirectorul curent a apărut un nou fișier, care poartă numele clasei și extensia class. Acesta este fișierul care conține bytecode-ul clasei compilate.
  2. Obțineți un mesaj de eroare, care indică fie că există erori în program, care au fost sesizate de compilator, fie că există erori în linia de comandă prin care ați cerut compilarea. În ambele cazuri, este necesar să eliminați erorile și să reluați compilarea.
Exemplu de utilizare corectă
Sa considerăm ca am creat corect fișierul sursă PrimaAplicatie.java, după care dăm comanda
   javac PrimaAplicatie.java
Constatăm că pe ecran nu apare nici un mesaj de eroare, ci apare din nou promptul sistemului de operare. Dacă dăm acum comanda
   dir
constatăm că în lista de fișiere care se afișează apar:
   PrimaAplicatie.class
   PrimaAplicatie.java
Dintre acestea, PrimaAplicatie.java este fișierul sursă editat de noi, în timp ce PrimaAplicatie.class este fișierul de cod de octeti rezultat în urma compilării.
Exemplul 1 de eroare
Considerăm că, după ce ați creat fișierul sursă PrimaAplicatie.java, dați comanda
   jamac PrimaAplicatie.java
în care numele compilatorului este introdus greșit (jamac în loc de javac). Ca efect, veți obtine un mesaj prin care se arată că cuvantul jamac nu este o comandă corectă (nu este numele unei comenzi interne a sistemului de operare sau numele unui program executabil), de exemplu:
   jamac: command not found
Exemplul 2 de eroare
Să considerăm acum că numele fișierului sursă este introdus greșit, de exemplu:
   javac PimaAplicatie.java
În acest caz, mesajul de eroare este
   can't read: PimaAplicatie.java
adică "nu pot citi: PimaAplicatie.java", ceeace înseamnă că un astfel de fișier nu există în directorul curent.
Exemplul 3 de eroare
Să urmărim ce se întâmplă dacă introducem comanda
   javac PrimaAplicatie
în care numele fișierului este corect, dar lipșeste extensia. În acest caz, obtineți următorul mesaj:
   PrimaAplicatie is an invalid option or argument.
   usage: javac <options> <source files>
urmat de o lista de opțiuni. Aceasta înseamnă că nu s-a respectat sintaxa comenzii, care cere ca comanda javac să fie urmată (eventual) de una sau mai multe opțiuni din lista dată, după care trebuie să apară numele fișierului (fișierelor) sursă care trebuie compilate. Aceste nume de fișiere trebuie sa conțină obligatoriu extensia java.
Exemplul 4 de eroare
Să considerăm acum că fișierul sursă editat de noi conține erori. Un exemplu este fișierul PrimaAplicatie1.java, care are următorul conținut:
class PrimaAplicatie1 { 
   void main(String args[]) { 
      System.ont.println("Prima noastra aplicatie a reusit!"); 
   } 
}
Compilând acest fișier obținem următorul mesaj de eroare:
PrimaAplicatie1.java:3: No variable ont defined in class Java.lang.System
      System.ont.pintln("Prima noastra aplicatie a reusit!");
            ^
Acest mesaj se interpretează astfel: în fișierul PrimaAplicatie1.java, linia 3, în locul marcat mai jos prin ^, apare variabila ont, care nu există în clasa System din pachetul (biblioteca) java.lang
Într-adevar, eroarea constă în faptul că apare ont în loc de out. Observăm că a fost reprodusa linia din program în care apare eroarea și s-a marcat prin ^ locul apariției erorii.

Dacă dăm comanda dir, constatam că în directorul curent nu a apărut clasa PrimaAplicatie1.class. Făcând corecția în fișier și compilând din nou, constatăm că nu mai apare nici un mesaj de eroare, deci compilatorul nu a mai sesizat nici o eroare și a creat fișierul care conține codul de octeți corespunzător.
Remarcăm că, totuși, programul nu este corect, deoarece - conform șablonului dat anterior, prima linie din metoda main trebuia să aibă forma 
   public static void main(String args[]){
Compilatorul nu a sesizat această eroare deoarece, în principiu, clasa poate sa conțina și o metoda main de forma celei date în acest fisier. Vom vedea, însă, că eroarea apare la executarea programului.

Exercițiu
Încercați să faceți și alte modificări în programul sursă și să constatați ce erori apar la compilare. De exemplu:
  • scrieti incorect cuvintele public, static, main, string, System. println;
  • omiteți unele dintre acolade sau paranteze;
  • puneți acolade sau paranteze în plus.
Puteți introduce intenționat și mai multe din erorile de mai sus simultan. Compilați fișierul astfel modificat și interpretati mesajele de eroare obținute.

Executarea aplicației

Dacă în directorul curent există fișierul <nume_aplicație>.class, executarea acestei aplicații se solicită prin comanda
   java <nume_aplicație>
Remarcăm că se dă ca parametru numai numele clasei, fără extensia class. Efectul acestei comenzi este, fie executarea aplicatiei, fie aparitia unui mesaj de eroare de execuție.
Prin comanda java se pune în execuție interpretorul mașinii virtuale Java. Acest interpretor verifică dacă în directorul curent există fișierul <nume_aplicație>.class. Daca acesta există, încarcă în memorie codul de octeți pe care îl conține și pune în execuție metoda public static void main(). Dacă fișierul nu există, sau dacă el nu conține o astfel de metodă, se semnalează printr-un mesaj de eroare.
 
Exemplul 1
Considerăm că a reușit compilarea fișierului corect PrimaAplicatie.java și s-a obținut astfel fișierul PrimaAplicatie.class, după care se dă comanda
   java PrimaAplicatie
Ca rezultat, pe ecran apare textul
Prima noastra aplicatie a reusit!
Exemplul 2
Să dăm acum comanda
   java PimaApicatie
în care numele clasei este dat greșit. Ca rezultat, obținem mesajul de eroare
Exception in thread "main" java.lang.NoClassDefFoundError: PimaApicatie
Acest mesaj arată că nu s-a găsit definiția clasei PimaAplicatie (Eroarea constatată se deduce din numele acesteia: NoClassDefFoundError provine de la "no class definition found error", adica nu a fost găsită definiția clasei PimaApicatie.
Exemplul 3
Să considerăm acum că am eliminat erorile de compilare din fișierul PrimaAplicatie1.java și am obținut fișierul PrimaAplicatie1.class, dar că metoda main a rămas fără modificatorii public static. Am arătat că lipsa acestor modificatori nu dă eroare de compilare. Dând acum comanda
   java PrimaAplicatie1
se obține mesajul de eroare
Exception in thread "main" java.lang.NoSuchMethodError: main
"No such method" se traduce prin "nu exista o astfel de metoda". Urmeaza două puncte și numele metodei care nu există: main
Noi știm că, în realitate, în clasa PrimaAplicatie1 exista o metodă numita main, numai că nu este cea pe care o caută interpretorul java pentru a pune aplicația in execuție: acesta caută metoda
   public static void main(String args[])
care, în această clasă, nu există.



© Copyright 2000 - Severin BUMBARU, Universitatea "Dunărea de Jos" din Galați