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
Post a Comment