最近实训结束了,在实训答辩的时候,我讲的知识点是static
但是自己就看了一个晚上,也没怎么理解,答辩的时候老师还跟我讲了一下!
static 的优点 :
1、对对象的共享数据进行单独空间的存储,节省空间,没有必要每一个对象中都存储一份。
2、可以直接被类名调用。
细说一下这两个优点:
第一:节省空间,这个static的变量会在程序执行的时候,单独分配一个地址内存!不是静态修饰的变量,只有在new的时候才会分配地址!
第二: static的内存是存放在栈里边的 , new出来的内存是存放在堆里边的 ;
缺点:
1、生命周期过长;
这个static 相当与一个“全局变量”
2、造成代码的耦合度过高
3、访问出现局限性,只能访问静态。在静态方法中不能访问非静态的变量
下面这个是某博主的图片,就根据这个图片说一下:
str1 是静态的,str2不是静态的, print1不是静态的,print2是静态的代码块
根据我们上面的哪句话,可以看到print2里边报错了 , 静态方法调用了非静态的变量str2
其实它的报错原理很简单,就是内存问题
我们知道,static在类加载的时候就分配内存了,其他的是在new的时候才分配内存
加载print2的时候,发现str2是非静态的,你没有new它,它没内存啊,你怎么能输出呢!这不是空指针异常吗!
使用的时候把握住这几点:
1、static代码块只能访问static变量
2、非static都可以访问
传送门:用法可以参考这篇博客