Structura lexicală a limbajului Java
- Detalii
- Categorie: Programare Java
- Accesări: 5,080
Setul de caractere
Limbajului Java lucrează în mod nativ folosind setul de caractere Unicode. Acesta este un standard international care înlocuieşte vechiul set de caractere ASCII si care foloseste pentru reprezentarea caracterelor 2 octeti, ceea ce înseamna ca se pot reprezenta 65536 de semne, spre deosebire de ASCII, unde era posibila reprezentarea a doar 256 de caractere. Primele 256 caractere Unicode corespund celor ASCII, referirea la celelalte facandu-se prin \ uxxxx, unde xxxx reprezintă codul caracterului.
O alta caracteristica a setului de caractere Unicode este faptul că întreg intervalul de reprezentare a simbolurilor este divizat în subintervale numite blocuri, cateva exemple de blocuri fiind: Basic Latin, Greek, Arabic, Gothic, Currency, Mathematical, Arrows, Musical, etc.
Mai jos sunt oferite cateva exemple de caractere Unicode.
- \u0030 - \u0039 : cifre ISO-Latin 0-9
- \u0660 - \u0669 : cifre arabic-indic 0-9
- \u03B1 - \u03C9 : simboluri grecesti α — ω
- \u2200- \u22FF : simboluri matematice (V, 3, 0, etc.)
- \u4e00 -\u9fff : litere din alfabetul Han (Chinez, Japonez, Coreean)
Mai multe informatii legate de reprezentarea Unicode pot fi obtinute la adresa ’’http://www.unicode.org”.
Cuvinte cheie
Cuvintele rezervate în Java sunt, cu cateva excepţii, cele din C++ si au fost enumerate în tabelul de mai jos. Acestea nu pot fi folosite ca nume de clase, interfeţe, variabile sau metode. true, false, null nu sunt cuvinte cheie, dar nu pot fi nici ele folosite ca nume în aplicatii. Cuvintele marcate prin * sunt rezervate, dar nu sunt folosite.
abstract | double | int | strictfp |
boolean | else | interface | super |
break | extends | long | switch |
byte | final | native | synchronized |
case | finally | new | this |
catch | float | package | throw |
char | for | private | throws |
class | goto* | protected | transient |
const* | if | public | try |
continue | implements | return | void |
default | import | short | volatile |
do | instanceof | static | while |
Incepand cu versiunea 1.5, mai există si cuvantul cheie enum.
Identificatori
Sunt secvente nelimitate de litere si cifre Unicode, începand cu o litera. Dupa cum am mai spus, identificatorii nu au voie sa fie identici cu cuvintele rezervate.
Literali
Literalii pot fi de urmatoarele tipuri:
Intregi
Sunt acceptate 3 baze de numerate : baza 10, baza 16 (încep cu caracterele 0x) si baza 8 (încep cu cifra 0) si pot fi de doua tipuri:
- normali - se reprezintă pe 4 octet (32 biti)
- lungi - se reprezinta pe 8 octet (64 bit) si se termina cu caracterul L (sau l).
Flotanţi
Pentru ca un literal sa fie considerat flotant el trebuie sa aiba cel puţin o zecimala dupa virgula, sa fie în notatie exponential sau sa aiba sufixul F sau f pentru valorile normale - reprezentate pe 32 biti, respectiv D sau d pentru valorile duble - reprezentate pe 64 biti.
Exemple: 1.0, 2e2, 3f, 4D.
Logici
Sunt reprezentati de true - valoarea logică de adevar, respectiv false - valoarea logica de fals.
Atenţie
Spre deosebire de C++, literalii întregi 1 si 0 nu mai au semnificata de adevarat, respectiv fals.
Caracter
Un literal de tip caracter este utilizat pentru a exprima caracterele codului Unicode. Reprezentarea se face fie folosind o litera, fie o secventă escape scrisa între apostrofuri. Secventele escape permit specificarea caracterelor care nu au reprezentare grafica si reprezentarea unor caractere speciale precum backslash, apostrof, etc. Secventele escape predefinite în Java sunt:
- '\b' |
Backspace (BS) |
- '\t' |
Tab orizontal (HT) |
- '\n' |
Linie nouă (LF) |
- '\f' |
Pagină noua (FF) |
- '\r' |
început de rând (CR) |
- '\”' |
Ghilimele |
- '\’' |
Apostrof |
- '\\’ |
Backslash |
Şiruri de caractere
Un literal şir de caractere este format din zero sau mai multe caractere între ghilimele. Caracterele care formeaza şirul pot fi caractere grafice sau secvenţe escape.
Daca sirul este prea lung el poate fi scris ca o concatenare de subsiruri de dimensiune mai mica, concatenarea sirurilor realizându-se cu operatorul + , ca în exemplul: "Ana " + " are " + " mere ". Sirul vid
este "".
După cum vom vedea, orice sir este de fapt o instantă a clasei String, definita în pachetul java.lang.
Separatori
Un separator este un caracter care indică sfârsitul unei unitati lexicale si începutul alteia. In Java separatorii sunt urmatorii: ( )[ ] ; , . .
Instructiunile unui program se separă cu punct si virgula.
Operatori
Operatorii Java sunt, cu mici deosebiri, cei din C++:
- atribuirea: =
- operatori matematici: +, *, /, %, ++, — .
Este permisă notata prescurtata de forma lval op= rval: x += 2 n -= 3
Există operatori pentru autoincrementare si autodecrementare (post si pre): x++, ++x, n—, —n
Evaluarea expresiilor logice se face prin metoda scurtcircuitului: evaluarea se opreste în momentul în care valoarea de adevăr a expresiei este sigur determinatăa.
- operatori logici: &&(and), ||(or), !(not)
- operatori relationali: <, <=, >, <=, ==, ! =
- operatori pe biti: &(and), |(or), ~ (xor), ~ (not)
- operatori de translase: <<, >>, >>> (shift la dreapta fara semn)
- operatorul if-else: expresie-logica ? val-true : val-false
- operatorul , (virgula) folosit pentru evaluarea secvenţiala a operaţiilor: int x=0, y=1, z=2;
- operatorul + pentru concatenarea şirurilor:
String s1="Ana"; String s2="mere"; int x=10; System.out.println(s1 + " are " + x + " " + s2);
-
operatori pentru conversii (cast) : (tip-de-data)
int a = (int)'a'; char c = (char)96; int i = 200; long l = (long)i; //widening conversion long l2 = (long)200; int i2 = (int)l2; //narrowing conversion
In Java exista trei feluri de comentarii:
- Comentarii pe mai multe linii, închise între /* si */.
- Comentarii pe mai multe linii care tin de documentare, închise între /** si */. Textul dintre cele doua secvente este automat mutat în documentatia aplicatiei de catre generatorul automat de documentare javadoc.
- Comentarii pe o singuraa linie, care incep cu //.
Observatii:
- Nu putem scrie comentarii în interiorul altor comentarii.
- Nu putem introduce comentarii în interiorul literalilor caracter sau sir de caractere.
- Secventele /* si */ pot sa apara pe o linie dupa secventa // dar îsi pierd semnificatia. La fel se întampla cu secventa // în comentarii care incep cu /* sau */.