CATEGORII DOCUMENTE |
Diferente intre limbajele Java si C
Limbajul Java foloseste aceleasi instructiuni cu limbajul C, mai putin instructiunea goto. Tipurile de date primitive sunt aproape aceleasi, plus tipul boolean, care a schimbat si sintaxa instructiunilor care testeaza conditii. Diferentele importante apar la tipurile de date derivate (vectori, structuri, pointeri) si la structura programelor.
In limbajul C exista un singur fel de comentarii, care incep prin perechea de caractere '/*' si se termina prin perechea de caractere '*/'. In C++ au aparut, in plus, comentarii care incep prin perechea de caractere '//' si se termina la sfarsitul liniei in care apare acel comentariu. Java preia aceste doua feluri de comentarii, la care se adauga comentarii destinate generarii automate a documentatiilor programelor (cu ajutorul programului "javadoc"); aceste comentarii incep printr-un grup de 3 caractere '/**' si se termina la fel cu comentariile C, prin '*/'
Exemplu:
/** Clasa Heap
* @ Data : Apr. 2000
*/
Tipurile de date primitive
Java preia de la C si C++ aproape toate tipurile aritmetice (short, int, long, float, double) si tipul void, dar impune o aceeasi lungime si reprezentare a tipurilor numerice pentru toate implementarile limbajului. Un intreg de tip int ocupa 32 de biti, un short ocupa 16 biti, iar un long ocupa 64 de biti. Un float ocupa 32 de biti iar un double ocupa 64 de biti. Tipul aritmetic byte ocupa 8 biti (valori intre -128 si 127).
Tipul char ocupa 16 biti pentru ca standardul de reprezentare a caracterelor este UTF-16 sau Unicode (in locul codului ASCII) si permite utilizarea oricarui alfabet.
Toate tipurile aritmetice din Java reprezinta numere cu semn si nu mai exista cuvantul unsigned pentru declararea de variabile aritmetice fara semn.
Tipul boolean din Java ocupa un singur bit; constantele de tip boolean sunt true si false. Existenta acestui tip modifica sintaxa instructiunilor if, while, do si a expresiei conditionale, precum si rezultatul expresiilor de relatie (care este acum de tip boolean si nu de tip int). Asadar, instructiunile urmatoare sunt gresite sintactic in Java, desi sunt corecte in C si C++.
while ( a%b) // corect este : while ( a%b !=0) ;
return x ? 1:0 ; // corect este: return x !=0 ? 1:0 ; cu x de tip "int"
if ( ! n) // corect este: if (n==0)
do while (n) ; // corect este: do while ( n>0);
Variabilele declarate in functii nu primesc valori implicite iar compilatorul semnaleaza utilizarea de variabile neinitializate explicit de programator.
In Java, se fac automat la atribuire numai conversiile de "promovare" de la un tip numeric "inferior" la un tip aritmetic "superior", care nu implica o trunchiere. Exemple:
int n=3; float f; double d;
d=f=n; // corect f=3.0, d=3.0
n=f; // gresit sintactic
f=d; // gresit sintactic
Ierarhizarea tipurilor aritmetice, de la "inferior" la "superior" este:
byte, short, int, long, float, double
Tipul char nu este un tip aritmetic dar se pot face conversii prin operatorul (tip) intre tipul char si orice tip aritmetic intreg. Exemplu:
byte b=65; char ch; ch =(char)b; // ch este 'A'
ch='n'; b =(byte)ch; // b este 10
Aceleasi reguli de conversie intre tipuri numerice se aplica si intre argumentele efective si argumentele formale, deoarece compilatorul face automat o atribuire a valorii argumentului efectiv la argumentul formal corespunzator. Exemplu:
double r = Math.sqrt(2); // promovare de la int la double ptr. 2
O alta conversie automata, de promovare se face pentru rezultatul unei functii, daca tipul expresiei din instructiunea return difera de tipul declarat al functiei. Exemplu:
static float rest (float a, float b)
Conversia de la un tip numeric "superior" la un tip aritmetic "inferior" trebuie ceruta explicit prin folosirea operatorului "cast" de fortare a tipului si nu se face automat ca in C. Exemple :
f= (float)d; // cu pierdere de precizie
n=(int)f; // cu trunchiere
int r = (int) Math.sqrt(4); // conversie necesara de la double la int
// functie de rotunjire din clasa Math
public static int round (float a)
Compilatorul Java verifica daca este specificat un rezultat la orice iesire posibila dintr-o functie cu tip diferit de void (de exemplu, instructiuni if fara else ). Exemplu:
public static int indexOf (int a[], int b)
In Java nu exista operatorul sizeof din C, pentru determinarea memoriei ocupate de un tip sau de o variabila, pentru ca nu este necesar acest operator (nici chiar pentru alocare dinamica de memorie).
Cea mai importanta diferenta dintre Java, pe de o parte, si limbajele C, C++ pe de alta parte, este absenta tipurilor pointer din Java. Deci nu exista posibilitatea de a declara explicit variabile pointer si nici operatorii unari '&' (pentru obtinerea adresei unei variabile) si '*' (indirectare printr-un pointer). Operatorul new pentru alocare dinamica din C++ exista in Java, dar are ca rezultat o referinta si nu un pointer.
Supradefinirea functiilor
Supradefinirea sau supraincarcarea functiilor ("Function Overloading") a fost introdusa in C++ pentru a permite definirea mai multor functii cu acelasi nume si cu acelasi tip dar cu argumente diferite intr-o aceeasi clasa. Pot exista functii cu acelasi nume (eventual si cu acelasi argumente si tip) in clase diferite, dar acesta nu este un caz de supradefinire, fiindca ele se afla in spatii de nume diferite.
In Java, ca si in C++, o functie este deosebita de alte functii din aceeasi clasa (de catre compilator) prin 'semnatura' sa (prin 'amprenta' functiei), care este formata din numele, tipul si argumentele functiei. Un exemplu uzual de functii supradefinite este cel al functiilor de afisare la consola in mod text "print" si "println", care au mai multe definitii, pentru fiecare tip de date primitiv si pentru tipurile clasa String si Object :
public class PrintStream
public void print (float f)
public void print (boolean b)
public void print (String s)
Functia "String.valueOf" este si ea supradefinita pentru diferite argumente.
Declaratii de variabile
O declaratie de variabila poate sa apara fie intr-o functie, fie in afara functiilor, dar intr-o clasa; nu exista variabile externe claselor. Locul declaratiei este important : o variabila dintr-o functie este locala acelei functii, iar o variabila declarata la nivel de clasa este utilizabila de orice functie din clasa (si chiar de functii din alte clase).
class StrTok
// verifica daca mai sunt cuvinte
public boolean hasMoreTokens ()
// extrage urmatorul cuvant dintr-un sir
public String nextToken ()
}
In C toate declaratiile dintr-un bloc trebuie sa preceada prima instructiune executabila din acel bloc. In C++ si in Java o declaratie poate apare oriunde intr-un bloc, intre alte instructiuni sau declaratii. Domeniul de valabilitate al unei variabile incepe in momentul declararii si se termina la sfarsitul blocului ce contine declaratia.
Instructiunea for constituie un caz special: variabila contor se declara de obicei in instructiunea for, iar valabilitatea acestei declaratii este limitata la instructiunile repetate prin instructiunea for . Exemplu:
public static boolean este ( int x[ ], int y)
In Java nu exista cuvantul cheie const iar constantele sunt declarate ca variabile cu atributele static si final. Exemplu:
public static final double PI = 3.14159265358979323846; // in clasa Math
Alte diferente intre Java si C
In Java nu exista declaratia typedef deoarece definirea unei clase introduce automat un nume pentru un nou tip de date.
In Java nu exista operatorul sizeof , pentru ca lungimea variabilelor este cunoscuta, iar la alocarea de memorie (cu new) nu trebuie specificata dimensiunea alocata.
Compilatorul Java nu are preprocesor, deci nu exista directivele preprocesor atat de mult folosite in C si in C++ : #define, #include, etc.
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 1675
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved