java Static的使用

static是一个静态修饰符,用于修饰成员(成员变量,成员函数)。《thinking in java》对staic的使用场景有下面2种定义:“一种情形是只想用一个存储区域来保存一个特定的数据—— 无论要创建多少个对象,甚至根本不创建对象。另一种情形是我们需要一个特殊的方法,它没有与这个类的任何对象关联。也就是说,即使没有创建对象,也需要一个能调用的方法”。。在类中,用static声明的成员变量成为静态成员变量,用static声明的方法即称为静态方法。对于static,它有如下几个特点:

 1.随着类的加载而加载。

一旦static被创建,它会一直存在静态常量池中,知道程序执行完,随着类的消失而消失,它的生命周期相对来说是最长的。

2.优先于对象存在

静态是优先于对象存在的。

举个例子:

public class Demo {

    public static void main(String[] args) {
        Test.name="hello";
        Test.staticHello();//优于对象创建,所以可以直接调用static修饰的方法
        //Test.age=0 //调用非静态变量age会报错,因为对象还未创建
        Test t=new Test();//创建对象
        t.age=18;//这个时候就可以调用非静态变量和方法
        t.normalHello();
        
    }
}
class Test{
    static String name;
    int age;
    public static void staticHello(){
        System.out.println("static name:"+name);
    }
    public void normalHello(){
        System.out.println("normal age:"+age);
    }
}

输出结果为:

static name:hello
normal age:18

 

从这个例子还可以看出,我们可以在没有创建对象的情况下,通过类名直接调用static修饰的方法和变量,所以可以得知,static是不依赖于对象存在的,即

3.被类的所有对象所共享

因此,静态的成员变量和方法也不能使用this,super关键字,这2个关键字都是基于对象的。

4.可以直接被类名所调用

在上述的例子中,可以看到static修饰的变量方法是直接通过类名Test调用出来的,当然,在创建对象之后,同样可以使用创建的对象去调用这个方法。

在不创建对象的情况下,静态方法不能访问类的非静态成员变量/方法,main方法就是一个静态方法,假如我们在Demo类里创建一个成员变量String names,要在main方法里直接取到这个值是不行的,如果没有创建对象,它就不能直接访问。而非静态方法可以访问静态成员/方法

《Thinking in java4》中“当程序创建第一个对类的静态成员的引用时,就会加载这个类。这个证明构造器也是类的静态方法,即使在构造器之前没有使用static关键字”。因为静态方法可以在未创建对象时调用,从这个角度看,构造方法在对象未创建时调用,可以看作是静态方法。
但从另一个方面来看,静态方法不能调用实例方法,而构造方法可以调用实例方法,所以构造方法也不算是静态方法。

 

转载请注明出处http://www.cnblogs.com/epilogue/p/5670220.html 

posted @ 2016-07-14 15:43  Epilogue  阅读(2060)  评论(0编辑  收藏  举报