[关闭]
@lemonguge 2015-06-23T02:23:46.000000Z 字数 1129 阅读 338

static关键字

JAVA


static是一个修饰符,用于修饰成员(成员变量和成员函数),static的成员随着类的加载就已经存在了。

  1. static修饰成员变量(静态变量)时,只分配单一存储空间,而不去考虑究竟要创建多少对象,甚至根本就不创建对象。
  2. static修饰成员函数(静态函数)时,方法不与包含它的类的任何对象关联在一起。
  3. static修饰的字段和方法都可以通过类名直接调用。

在方法内部声明变量只能在需要的时候用final修饰,除此之外不能用其它修饰符修饰。


静态变量

静态变量对这个类的任何对象来说,都只有一份存储空间,具有共享数据的效果。

知道了静态变量的特点,那么就对比一下静态变量和成员变量。

在方法里调用该类的静态变量,则前面省略了类名,而非静态省略了this


静态函数

  1. 静态方法只能访问静态成员(成员变量和成员函数);非静态既可以访问静态成员,又可以访问非静态成员。
  2. 静态方法中不可以使用this或者super关键字。因为静态方法可以直接被类名调用,并不需要对象。this:持有对象的引用;super:不初始化父类而使用super调用父类的成员变量是没有任何意义的,若要初始化父类则只有在创建子类对象时,因为初始化子类对象之前先会调用父类的构造器进行初始化,即它们都需要有对象的存在。

函数是否用静态修饰,就参考一点,即该函数功能是否有访问到对象中的特有数据。

简单点说,从源代码看,该函数功能是否需要访问非静态的成员变量。如果需要,该功能就是非静态的;如果不需要,就应该将该功能优先定义成静态的,当然,也可以定义成非静态。由于非静态函数需要被对象调用,而为了调用非静态的没有访问特有数据的方法而创建对象,那么该对象的创建是没有意义的,属于浪费堆内存的行为。


静态代码块

随着类的加载而执行,而且只执行一次,用于给类进行初始化

对于不需要创建对象就想使用的类,由于无法在构造器中进行初始化(构造器是用于给创建完成的对象进行初始化),可以通过静态代码块的方式来初始化。

构造代码块:可以给所有对象进行初始化。由于初始化对象时一定会执行构造代码块,所以构造代码块具有通用性。构造函数是给对应的对象进行针对性的初始化。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注