一.static关键字的用途
static关键字解释:
它为该类的公用变量,属于类,被该类的所有实例共享,在类被载入时被显式初始化,
对于该类的所有对象来说,static成员变量只有一份。被该类的所有对象所共享!!
static的调用方法:
可以使用“对象.类属性”来调用。不过,一般都是用“类名.类属性”
static存放位置:
static变量置于方法区中
用static声明的方法为静态方法
- 不需要对象,就可以调用(类名.方法名)- 在调用该方法时,不会讲对象的引用传递给它,所以在static方法中不可访问非static的成员
很显然,被static关键字修饰的方法或者变量不需要依赖于对象来进行访问,只要通过类加载器(Class Loader)加载类之后,就可以通过类名去进行访问。
1)static方法
static方法一般称作静态方法,由于静态方法不依赖于任何对象就可以进行访问,因此对于静态方法来说,是没有this的,因为它不依附于任何对象,既然都没有对象,就谈不上this了。并且由于这个特性,在静态方法中不能访问类的非静态成员变量和非静态成员方法,因为非静态成员方法/变量都是必须依赖具体的对象才能够被调用。
但是要注意的是,虽然在静态方法中不能访问非静态成员方法和非静态成员变量,但是在非静态成员方法中是可以访问静态成员方法/变量的。
class Simple{
<span style="white-space:pre"> </span>static void go(){
<span style="white-space:pre"> </span>System.out.println("Go...");
<span style="white-space:pre"> </span>}
}
public class Cal{
<span style="white-space:pre"> </span>public static void main(String[] args){
<span style="white-space:pre"> </span> Simple.go();
<span style="white-space:pre"> </span>}
}
在上面的代码中,由于go()方法是独立于对象存在的,可以直接用过类名调用。
调用一个静态方法就是“类名.方法名”,静态方法的使用很简单如上所示。一般来说,静态方法经常为应用程序
中的其它类提供一些实用工具所用,在Java的类库中大量的静态方法正是出于此目的而定义的。
2)static变量
static变量也称作静态变量,静态变量和非静态变量的区别是:静态变量被所有的对象所共享,在内存中只分配一个存储空间,它当且仅当在类初次加载时会被初始化。而非静态变量是对象所拥有的,在创建对象的时候被初始化,各个对象拥有的非静态变量之间互不影响。
static成员变量的初始化顺序按照定义的顺序进行初始化。
3)static代码块
static关键字还有一个比较关键的作用就是 用来形成静态代码块以优化程序性能。static块可以置于类中的任何地方,类中可以有多个static块。在类初次被加载的时候,会按照static块的顺序来执行每个static块,并且只会执行一次。
4)静态类
通常一个普通类不声明为静态的,只有一个内部类才可以。这时这个声明为静态的内部类可以直接作为一个
普通类来使用,而不需实例一个外部类。如下代码所示:
public class StaticCls {
public static void main(String[] args){
<span style="white-space:pre"> </span>OuterCls.InnerCls oi=new OuterCls.InnerCls();
}
}
class OuterCls{
public static class InnerCls{
<span style="white-space:pre"> </span>InnerCls(){
<span style="white-space:pre"> </span>System.out.println("InnerCls!");
}
}
}
总结:
如果一个成员被声明为static,它就能够在它的类的任何对象创建之前被访问,而不必引用任何对象。你可以将方法和变量都声明为static。static 成员的最常见的例子是main()。因为在程序开始执行以main()方法为入口,所以它被声明为static。
有时你希望定义一个类成员,使它的使用完全独立于该类的任何对象。通常情况下,类成员必须通过它的类的对象访问,但是可以创建这样一个成员,它能够被它自己使用,而不必引用特定的实例。在成员的声明前面加上关键字static(静态的)就能创建这样的成员。如果一个成员被声明为static,它就能够在它的类的任何对象创建之前被访问,而不必引用任何对象。你可以将方法和变量都声明为static。static 成员的最常见的例子是main( ) 。因为在程序开始执行时必须调用main() ,所以它被声明为static。
声明为static的变量实质上就是全局变量。当声明一个对象时,并不产生static变量的拷贝,而是该类所有的实例变量共用同一个static变量。
声明为static的方法有以下几条限制:
◆它们仅能调用其他的static 方法。
◆它们只能访问static数据。
◆它们不能以任何方式引用this 或super
本文参考: http://www.cnblogs.com/dolphin0520/p/3799052.html
http://home.cnblogs.com/group/topic/38753.html