package pkg;
//1st class
class Cup{
Cup(int mark){
System.out.println("Cup"+mark);//【4】【5】【7】【11】【13】【15】
}
static Cup cupItself=new Cup(9527);//【3】
// you can define an object even though you are buildING the correspond CLASS now
void func(int mark) {
System.out.println("function:"+mark);//【16】
}
}
//2nd class
class Pen{
Pen(){
System.out.println("It is a pen");//【9】
}
}
//3rd class
class Cups{
static Cup cup0=new Cup(0);//【2】
static Cup cup1;//
static Pen pen0;//define it only
static Cup cup2;
static Pen pen1000;
static Cup cup3;
static {//static bulk
cup1=new Cup(1);//【6】
pen1000=new Pen();//【8】
cup2=new Cup(2);//【10】
//System.out.println("YOU will see this,even though it is a print function!");
cup3=new Cup(3);// 【12】
}
static Cup cup4=new Cup(4);//【14】
Cups(){
System.out.println("Cups constructor");//NOT execute
}
}
//------------------ main -----------------------
public class P97 {
public static void main(String[] args) {
System.out.println("Inside main()");//【1】
Cups.cup1.func(2019);//[2] IT IS A TEST
/*Cups acup=new Cups();*/ THIS IS ANOTHER TEST
}
}
output:
【1】Inside main()
【4】Cup9527
【5】Cup0
【7】Cup1
【9】It is a pen
【11】Cup2
【13】Cup3
【15】Cup4
【16】function:2019
--- ANOTHER TEST ---
Inside main()
Cup9527
Cup0
Cup1
It is a pen
Cup2
Cup3
Cup4
Cups constructor
【總結】:
1、static bulk內部的對象會一次性全部初始化,不會僅僅只初始化用到的部分。static塊,甚至非static塊,初始化時,其內的函數也會被執行。
2、如果僅僅是定義(聲稱)一個對象,不會被初始化。
3、方法調用時,涉及需要初始化哪個對象,就會把這個類(不僅僅是涉及到對象及方法)初始化。
4、不需要創建對象而僅僅是調用方法時,該對象對應的 構造器,不會被執行。