java static详解
一:static关键字不依赖于this,也就是不依赖于任何对象,在static方法中不能调用非静态方法(反过来非静态方法中是可以调用静态方法的),static关键字的主要应用就是在没有创建对象的前提下去调用该关键字修饰的内容.
上面的一句话换种形式说就是static所修饰的内容在类被加载未被初始化的时候就可以被使用.
上面的逻辑就可以解释为什么static方法不可以访问非静态方法和非静态成员变量,却可以访问静态方法和静态成员变量.因为非静态成员变量是依赖于对象进行访问的,但是static只需在被类加载以后还没有生成对象的时候就可以被访问.
for example:
在本例中,由于static void main方法是一个静态方法,在调用string时由于string不一定有没有被初始化,所以看吧,自动提示报错了.
好了,一句话总结一下上面的内容.对于静态成员变量和静态方法只能调用静态成员变量和静态方法.非静态成员变量和非静态成员方法能调用静态成员变量和静态方法以及非静态成员变量和非静态方法,非静态成员变量和方法的使用需要实例化.
二:静态成员变量和非静态成员变量的区别是: 静态变量被所有的对象所共享,在内存中只有一个副本,它当且仅当在类初次加载时会被初始化。而非静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响。
static成员变量的初始化顺序按照定义的顺序进行初始化。
三:static代码块可以用来优化代码的性能.因为他只会在类加载的时候被执行一次.
比较下面两段代码:
上面一段a和b在类被加载时只会被加载一次,无论在其他地方被实例化了多少次都只是被加载一次.但是下面一段a和b每次在被实例化的时候都会占用不同的空间.上下两段代码相比下面的比较占用空间.
四:静态方法不依赖于this,但是可以通过this关键字来访问static关键字.
for example:
五:在Java中static是不可以用来修饰局部变量的,不信你可以试试.
六:static关键字不会改变成员访问权限
for example:
看吧,static关键字不会影响访问权限.右边的访问左边的由private修饰的属性就会出问题,左边的访问右边的由public修饰的属性就OK.