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、不需要创建对象而仅仅是调用方法时,该对象对应的 构造器,不会被执行。