一.变量当一个变量前面有了static这个修饰符,内存会为它分配唯一的一块存储空间。程序跑起来的时候,变量就存在在内存里了。谁要用它,就去访问一下它所在的内存。假如内存是澡堂子,static变量就像一坨肥皂,一整个澡堂子的人都共用之。。不管澡堂子里有没有人,肥皂总是在这里。编译器想拿出肥皂来玩一玩,直接吼出肥皂的名字就好了。如果这是一个非static的变量,则是对每个对象有一份存储空间。程序跑刚起来的时候,是没有这个变量的。相当于一个澡堂子里每个人都有一坨肥皂。如果没有人,也就没有肥皂。编译器想要用肥皂来做点什么,必须先制造一个手持肥皂的人。
public class XX{ final static double PI = 3.14;
final double E=2.71;
public static void main(String[] args) {
//下面要使用static变量PI了 System.out.print(PI);//直接粗来了有木有!!!
//下面要使用非static变量E
XX b = new XX();
System.out.print(b.E)
;//要用b牵着才粗来真是羞涩 }}
二.方法假如一个方法被static修饰,可直接访问。不被static修饰,就需要用对象来访问了。和变量是差不多的感觉。。
`public class XX{
public static void method1(){ }
public void method2(){ }
public static void main(String[] args) {
method1();
XX b = new XX();
b.method2()//嗯,又一个牵着才出来的。 }}-`
---------肥来再写一个---------三.程序块形如:static{ balabala…;}首先给题主看一段代码写这段代码的目的是为了看看静态块、非静态块和构造函数出现的先后顺序。运行结果如下可以看出是以 静态块–>非静态块–>构造函数的顺序执行的事实上,静态块的加载是在main()函数以前的,并且只执行一次(从anotherObject的加载情况可以看出)加载静态块时为它分配固定的内存,程序结束时内存才被释放。而非静态块和构造函数则是new一次执行一次。----------每天一写----------
四.静态导入(慎用)形如import static 完全限定名称eg: import static java.long.System.out;平时import一般是导入的类,而静态导入是导入静态变量和静态方法。被静态导入的方法和变量在当前类可以被直接访问。由于很多人觉得过多使用静态导入会降低代码的可读性,故最好只在有很多重复调用时使用。上图:// 将要被静态导入的玩意儿~// 开始静态导入啦// 运行结果
五.嵌套类占坑。。