Static and not-static block

public class User {
    static {
        /*some code 1*/
    }
    public static void foo(){
        /*some code 2*/
    }
} 


Tutaq ki, static block da ve foo metodunda her hansi System.out.println("..."); kodlari var.
Eger User classindaki foo metodunu cagirsaq, ilk once static block-un kodlari daha sonra foo metodunun kodlari icra olunacaqdir. Bunun esas sebebi bundadir ki, class load olunan zaman, ilk once static block ishe dushur.
Lakin bunu qeyd etmek lazimdir ki , eger biz hemin class i istifade etmesek, static block un kodlari icra olunmayacaq.


QEYD : static block yalnizca bir defe, class load olunan zaman ishe dushur. Meselen, class daxilinde bir nece metod varsa ve bunlari ayri aryi cagirib istifade etsek bele static block yalnizca bir defe ishleyecek.


Bele bir hal mumkundur ki, User classin da hech deyishen ve ya metod olmasin. Bu zaman bunu istifade etmek de mumkun olmayacaq. Buna gore asagidaki koddan istifade olunur.

Class.forName("package.User");

Bu zaman, class in hech bir metod ve ya deyisheninden istifade etmeden, class i istifade etmish oluruq ve static block icra olunur

Eyni package daxilinde olsaq bele, package mutleq gosterilmelidir.

Non-static ve ya instance block


public class User {
    {
        /*some code 1*/
    }
    public Person() {
        /*some code 2*/
    }
} 


Obyekti yaradan zaman constructor istifade ederken, constructordan qabaq, non-static block ishe dushur.
Sade mentiq, static deyishenler, metodlar ve block class a aid oldugu kimi, static olmayan her shey de obyektlere aiddir. Yeni, class-in static olan metodunu cagirdiqda static block ishe dushecek , non-static yox.


QEYD :  static blockdan ferqli olaraq, non-static block obyekte aid oldugundan, nece defe obyekt yaratsaq, non-static block o qeder ishe dushecek.



Comments

Popular posts from this blog

Validation for AZ phone numbers with RegEx in Java

Java necə işləyir, kod nədir ?

@Transactional annotation haqqinda. Cascade istifade olunmasi