@lemonguge
2015-06-23T02:23:46.000000Z
字数 1129
阅读 338
JAVA
static是一个修饰符,用于修饰成员(成员变量和成员函数),static的成员随着类的加载就已经存在了。
static修饰成员变量(静态变量)时,只分配单一存储空间,而不去考虑究竟要创建多少对象,甚至根本就不创建对象。static修饰成员函数(静态函数)时,方法不与包含它的类的任何对象关联在一起。static修饰的字段和方法都可以通过类名直接调用。
在方法内部声明变量只能在需要的时候用final修饰,除此之外不能用其它修饰符修饰。
静态变量对这个类的任何对象来说,都只有一份存储空间,具有共享数据的效果。
知道了静态变量的特点,那么就对比一下静态变量和成员变量。
在方法里调用该类的静态变量,则前面省略了类名,而非静态省略了
this。
this:持有对象的引用;super:不初始化父类而使用super调用父类的成员变量是没有任何意义的,若要初始化父类则只有在创建子类对象时,因为初始化子类对象之前先会调用父类的构造器进行初始化,即它们都需要有对象的存在。函数是否用静态修饰,就参考一点,即该函数功能是否有访问到对象中的特有数据。
简单点说,从源代码看,该函数功能是否需要访问非静态的成员变量。如果需要,该功能就是非静态的;如果不需要,就应该将该功能优先定义成静态的,当然,也可以定义成非静态。由于非静态函数需要被对象调用,而为了调用非静态的没有访问特有数据的方法而创建对象,那么该对象的创建是没有意义的,属于浪费堆内存的行为。
随着类的加载而执行,而且只执行一次,用于给类进行初始化。
对于不需要创建对象就想使用的类,由于无法在构造器中进行初始化(构造器是用于给创建完成的对象进行初始化),可以通过静态代码块的方式来初始化。
构造代码块:可以给所有对象进行初始化。由于初始化对象时一定会执行构造代码块,所以构造代码块具有通用性。构造函数是给对应的对象进行针对性的初始化。