1 public class statictest { 2 3 4 String X = "我是非静态变量"; 5 6 7 static int butterfly =0; 8 static String staticX = "我是静态变量" ; 9 static String staticZ="我也是静态变量"; 10 11 12 statictest(){ 13 System.out.println("我是构造器"); 14 } 15 16 17 18 public static void main(String[] args) { 19 statictest this1 =new statictest();//new出这个对象只是为了下面的fangfa2()用,但即使你用static块里的构造器也没关系 20 //System.out.println(ff3); 错,说明静态方法中的变量也是个临时变量,并不是全局的 21 //System.out.println(staticY); 错,说明即使在STATIC块里定义的量,也是一个临时变量,并不是全局的,也不是这个类中的 22 //this.fangfa2(); 错,说明this是一个对象,不能用在static方法中 23 this1.fangfa2(); 24 fangfa4();//单纯的想说明不需用this1引用 25 26 } 27 28 29 static{ 30 statictest this2 =new statictest();//只为了说明可以在static块中就早点进行new出一个对象,目的是运行一下构造器 31 String staticY ="staticy"; 32 //System.out.println(x);错 33 System.out.println(staticY); 34 //this.fangfa1();这样写错,因为this是表示自己这个对象,是一个对象值,而static是先于对象加载的 35 fangfa1();//说明static块可以调用静态方法方法 36 // if(true){} 对的,说明其实static块就可以当成一个没有名字,不能被调用的特殊的静态方法,它的实质是一个静态方法,同时还相当于main方法一样可以 37 // 运行,而且比main先运行 38 } 39 40 static void fangfa0(){ 41 System.out.println("我是蝴蝶"); 42 }//这个方法只是想表明我喜欢蝴蝶,没什么具体用处 43 44 45 46 47 static void fangfa1(){ 48 System.out.println(staticX); 49 //System.out.println(X);错,因为静态方法不能调用非静态量 50 System.out.println(fangfa3()); 51 //System.out.println(ff3) ;错,说明ff3即使在静态方法中定义的,但是它还是一个临时变量,但是如果在它前面加上static就不会错了 52 53 54 } 55 56 static String fangfa3(){ 57 String ff3 ="我是fangfa3"; 58 return ff3; 59 60 } 61 62 static void fangfa4(){ 63 fangfa0(); 64 } 65 66 67 void fangfa2(){ 68 System.out.println(staticZ);//静态方法可以调用静态量 69 this.X ="2"; 70 } 71 72 73 74 } 75 /*打印结果:*/ 76 //我是构造器 77 //staticy 78 //我是静态变量 79 //我是fangfa3 80 //我是构造器 81 //我也是静态变量 82 //我是蝴蝶 83 84 85 /* 总结过程:1、static加载并初始化:先对静态量(变量和方法)进行初始化,对方法的初始化的意思是说,对这个变量名进行指针的赋值;对变量的初始化的就是 86 * 直接对这个变量进行一般数据类型的赋值 87 * 2、static执行:然后对static块中的内容进行执行,它相当于main方法一样先被执行,是静态的执行入口好比“main”, 88 * 3、非静态的加载并初始化:轮到所以的非静态的变量和方法的加载及它的赋值 89 * 4、执行构造器 90 * 5、非静态的执行:对main方法进行执行 91 * 注意:方法的赋值和调用是2个概念,方法的赋值是对这个方法名的也就是间接变量进行地址指针的赋值;而方法的调用是调用这个方法 92 * 注意:还有非静态块没提到 93 * 注意:执行和加载和初始化这3个概念一定要分清楚 94 * 注意:static是所有的该类的对象所共有,也就是一个 只有这1个,而非static量是每一个对象自己就有一个,好比最开始新建的变量X,this2.X和this1.X并不是 95 * 同一个 96 * 注意:因为static量是共有的,所以还是前面不要加对象名而直接调用比较好,这样对概念的理解有帮助 97 */