marți, 5 februarie 2019

Blocuri de inițializare în Java

În Java o variabilă poate fi inițializată prin următoarele modalități: 


1) La declarare 

2) Cu ajutorul unei metode ( fie constructor fie nu) 

3) Cu ajutorul blocurilor de inițializare 

Un bloc de inițializare este un bloc de cod definit între { și }, asemănător cu blocuri/corpuri de metode, principala diferență fiind, blocurile de inițializare nu au un nume. Ele sunt ca metodele, însă fără antet/header (tip returnat, nume metoda, lista de parametri). 

Deoarece în Java nu există cod înafara clasei, blocurile de inițializare vor fi la rândul lor definite în interiorul unei clase. 

Blocurile de inițializare sunt de 2 tipuri: 

Nestatice - blocuri de cod care sunt executate de fiecare dată când o instanță a clasei este creată, adică în cazul în care constructorul este apelat. Aceste blocuri de inițializare urmăresc inițializări de atribute statice ce trebuie executate de fiecare dată când se construiește un obiect indiferent de constructorul apelat. Blocurile instanță (nestatice) de inițializare pot accesa atribute statice și variabile de instanță. 

Exemplul_1:

public class Exemplu_1
{ // Bloc de initializare nestatic (instanta)
  {
   System.out.println("Bloc initializare nestatic invocat  !!");
  }
  public Exemplu_1(){
   System.out.println("Constructor default!!!");
  }
  public Exemplu_1(int x){
   System.out.println("Constructor parametrizat!!!");
  }
  public static void main(String [] args){
    Exemplu_1 ob1, ob2;
    ob1 = new Exemplu_1();
    ob2 = new Exemplu_1(0);
  }
}


Statice - blocuri de cod care sunt executate DOAR O DATA atunci când clasa este încărcată de Java Virtual Machine. Aceste tipuri de blocuri de inițializare sunt utile pentru inițializarea atributelor statice din clase sau pentru a efectua o singura data un set de prelucrări. Blocurile statice de inițializare pot accesa DOAR atributele statice ale clasei în care sunt definite. NU se pot folosi variabile de instanță în blocuri de inițializare statice (dacă încercați să faceți acest lucru veți primi o eroare de compilare: non-static variable value cannot be referenced from a static context).

Exemplul_2:

public class Exemplu_2
{ // Bloc de initializare static
  static {
   System.out.println("Bloc initializare static invocat  !!");
  }
  public Exemplu_2(){
   System.out.println("Constructor default!!!");
  }
  public Exemplu_2(int x){
   System.out.println("Constructor parametrizat!!!");
  }



  public static void main(String [] args){
    Exemplu_2 ob1, ob2;
    ob1 = new Exemplu_2();
    ob2 = new Exemplu_2(0);
  }
}





Se poate defini atât de multe blocuri de inițializare (statice sau nu) de câte este nevoie, dar trebuie sa se acorde atenție ordinii lor de definire, deoarece aceasta este și ordinea lor de execuție !


Clasa StringBuffer. Limbajul Java.

Definiție:
public final class StringBuffer extends Object implements Serializable,CharSequence


Descriere: 


Clasa StringBuffer se află în pachetul java.lang și este utilizată pentru crearea și prelucrarea șirurilor de caractere ,,mutable”. Este asemănător clasei String, dar instanțele acesteia sunt modificate, adică lungimea și conținutul șirului pot fi modificate de metodele care au fost apelate pentru șirul dat.

StringBuffer  - mutable
String - immutable
StringBuffer s1 = new  
StringBuffer("Hello");
s1.append("Hello");
System.out.println(s1);
 // HelloHello
String s2=new String("Hello");
s2.concat("Hello");
System.out.println(s2);
    //Hello



Pentru a crea un șir de caractere StringBuffer puteți utiliza sintaxa:
StringBuffer identificator = new StringBuffer(”Valoare”);

De exemplu:  StringBuffer zi = new StringBuffer(”Luni”);


SintaxaStringBuffer identificator =”Valoare”; nu este validă, deoarece literalul este de tip String și nu poate fi atribuit unui StringBuffer.

Ori de cîte ori compilatorul găsește un literal String în codul sursă acesta crează un obiect de tipul clasei String ce va conține ca valoare literalul.

La fel ca și în cazul celorlalte obiecte, puteți folosi constructorul clasei
String pentru a crea o instanță a acestei clase.
De exemplu:  String zi = new String(”Luni”);

Metode:
Metode comune cu clasa
String: charAt(), indexOf(), length(), substring().

Metode proprii:
1) StringBuffer()- constructorul clasei, construiește un șir de caractere StringBuffer fără caractere cu o capacitate de 16 caractere. 



2) StringBuffer(String str) - constructorul clasei, construiește un șir de caractere StringBuffer cu valoarea str. 


3) StringBuffer append(String str) – concatenează șirurile de caractere.
De exemplu:
StringBuffer s1 = new  StringBuffer("Programez");
s1.append(" in Java");
System.out.println(s1); // Programez in Java

4)
int capacity() – returnează capacitatea curentă a obiectului StringBuffer.
De exemplu:
StringBuffer s1 = new  StringBuffer("Java");
System.out.println(s1.length()); //4
System.out.println(s1.capacity()); //20

5)
StringBuffer delete(int start, int end) - va șterge subșirul aflat între poziția specificată în parametrul start și poziția specificată în parametrul end .
De exemplu:

StringBuffer s1 = new  StringBuffer("Programez");
s1.delete(7, 9);
System.out.println(s1); //Program

6) StringBuffer deleteCharAt(int index) - va șterge caracterul aflat pe poziția specificată în parametrul index.
De exemplu:
StringBuffer s1 =new  StringBuffer("Programez");
s1.deleteCharAt(8);
System.out.println(s1); //Programe

7) StringBuffer insert(int offset, String str) - va însera un șir de caractere începînd cu poziția offset.
De exemplu:

StringBuffer s1 =new  StringBuffer("ProgramJava");
s1.insert(7,"are" );
System.out.println(s1); //ProgramareJava

8) StringBuffer reverse() – inversează fiecare cuvând dintr-un șir de caratere și ordinea apariției cuvintelor în șirul dat.
De exemplu:

StringBuffer s1 =new  StringBuffer("Java Programare");
s1.reverse();
System.out.println(s1); //eramargorP avaJ



Sper ca vă este utilă postarea mea! Comentariile sunt binevenite! Să aveți o zi deosebită!