static静态小总结
<1>静态成员变量与方法推荐通过类名直接调用,不推荐使用类对象进行操作;【没有对象】
<2>静态成员变量无论通过哪一种方式修改都会影响到所有的使用着;【共享资源】
<3>静态成员变量是在类对象创建之前可以使用,类对象销毁之后也可以使用,【生命周期完全不同】
<4>所以静态成员变量和类对象无关;
static内存分析
<1> 类对象 -> 【堆区】
<2> 静态成员变量 -> 【数据区】
<3>类对象和静态成员变量占用的内存空间不属于同一个区域,如果没有以用指向操作,不存在任何关系
<4> 内存角度分析【没有关系】
static 代码加载原理性分析
<1> .java文件会通过java编译器(javac.exe)编译生成对应的.class文件(.class文件是二进制的文件),
<2>在程序加载过程中.class字节码文件会加载到内存的【方法区】,同时会按照基本的顺序结构【从上至下,从左到右】完成.class字节码文件的加载过程;
<3>在加载过程中static修饰的内容会准备就绪,可以执行,可以使用;
<4>也就是说在以上流程中static与类对象是没有任何关系的;
【资源销毁过程】
<5>java存在的类对象,是通过JVM中的垃圾回收机制销毁对象,回收内存,
<6>静态成员变量是在整个程序退出之后,当前代码中不存在任何一块内存被类对象占用,JVM才会释放。
<7>.class文件占用的【方法区】空间,与之同时,销毁静态成员变量占用的【数据区】空间;
<8>静态成员变量的生存周期是远远大于类对象的;
public class Test {
public static void member(){
}
public void memberInfo(){
Test test = new Test();
//通过类对象调用静态方法会有警告【不建议】
test.member();
}
}