- public class TestBlockClass{}
- public void testBlockMethod (){}
- public TestBlockClass(){}
- static {}
- {}
class Init {
static {
System.out.println("1 static init");
}
static {
System.out.println("2 static init");
}
{
System.out.println("1 instance init");
}
{
System.out.println("2 instance init");
}
Init() {
System.out.println("1 constructor init");
}
Init(int x) {
System.out.println("2 constructor init");
}
Init(int x , int y) {
System.out.println("3 constructor init");
}
}
public class InitMain {
public static void main(String[] args) {
Init i = new Init();
}
}
//Console Output
1 static init
2 static init
1 instance init
2 instance init
1 constructor init
Aslinda su olay gerceklesir bir sinif ilk cagirildigida once sinifa remde bir yer ayriliyor ve bu yere ayni zamanda static olan tum nesneler , methodlar , bloglar yukleniyor ve yuklenmesi demek bir kere calismasi demekoluyor ama her Init class'mizi cagirdik ve remde yer olusturdu ondan sonra her Init icin olusturulan referansta tabiki program sonlanmadigi surece remde yer olusturmaz cunku artik vardir. Sadece Init ile ilgili olusturulan her referansta normal bloglar her seferinde yenide calistirilir
public class InitMain {
public static void main(String[] args) {
Init i = new Init();
Init i1 = new Init(22);
}
}
//Console Output
1 static init
2 static init
1 instance init
2 instance init
1 constructor init
1 instance init
2 instance init
2 constructor init
Yukardaki yazdigim aciklama biraz karisik gibi gelsede ikinci olusturdugum InitMain ile hersey daha iyi anlasilir. Goruldiyi gibi TestMain calistirdigimizda ilk once Init class remde yer ayrilip olusuyor ve onunla beraber static bloglarimizda olusyor yani calisiyor ve referans olusturdugun icin normal bloglarimda bir kere calistir ve tabiki cagirilan constructor calisir. ama ikinsi satirda tekrar Init'in referansi olustururken sadece bloglar calisir ve constructor calisir yani static bloglar tekrar calismaz.
public class InitMain {
public static void main(String[] args) {
Init i = new Init();
Init i1 = new Init(22);
Init i2 = new Init(22,11);
}
}
//Console Output
1 static init
2 static init
1 instance init
2 instance init
1 constructor init
1 instance init
2 instance init
2 constructor init
1 instance init
2 instance init
3 constructor init
Bir uygulama daha yapip konuyu daha iyi analayalim
public class Bird {
static {
System.out.print("A");
}
{
System.out.print("K");
}
public Bird() {
System.out.print("A");
}
}
public class Raptor extends Bird {
static {
System.out.print("B");
}
public Raptor() {
System.out.print("I");
}
{
System.out.print("D");
}
static {
System.out.print("D");
}
}
public class Hawk extends Raptor {
static {
System.out.print("U");
}
public Hawk() {
System.out.print("4");
}
{
System.out.print("R");
}
public static void main(String args[]){
System.out.print("L");
new Hawk();
System.out.println("7");
}
}
//Console Output
ABDULKADIR47
hocam elinize saglik cok guzel 1 yaz olmus.
ReplyDelete