java static关键字

来源:互联网 发布:mac 终端退出 bash 编辑:程序博客网 时间:2024/06/05 15:33

         通常,我们创建类时会指出那个类的对象的外观与行为。除非用new 创建那个类的一个对象,否则实际上并


未得到任何东西。只有执行了new 后,才会正式生成数据存储空间,并可使用相应的方法。


但是有两种特殊的情形,上面的方法并不管用:


       1.    只想用一个存储区域来保存一个特定的数据——无论要创建多少个对象,甚至根本不创建对象。


       2.    我们需要一个特殊的方法,它没有与这个类的任何对象关联(也就是说没有new一个对象)。即使没有创建对象,也需要一个能调用的方法。


像上面的两种情况,用static可以很好的解决这些问题。


       static方法的调用有两种方式,一种是通过对象调用,另一种是方法名调用。通常使用第二种。


       对学过Java的人来说,对static的使用肯定不陌生,可能有人会说这有什么好说的呢?不就是方法前


加个static关键字,然后调用的时候直接用类名点方法名不就可以了吗。


使用的方法确实没错,这里要说的是static的一点特殊的解析:


如下:


成员前没加static:


public class StaticClass {
         int i = 3;
}


   public static void main(String[] args) {
        StaticClass c1 = new StaticClass();
        StaticClass c2 = new StaticClass();

        c1.i++;
        System.out.println(c2.i);
    }


执行结果: 3



成员前加了static:

public class StaticClass {
    static int  i = 3;
}


执行类:


  public static void main(String[] args) {
        StaticClass c1 = new StaticClass();
        StaticClass c2 = new StaticClass();

        c1.i++;
        System.out.println(c2.i);
   }


或者:

   public static void main(String[] args) {
        StaticClass.i++;
        System.out.println(StaticClass.i);
    }


执行结果:4



总结:加了static的成员,无论new了多少个对象,该成员都只占用一个存储空间。


拓展:

关于类中的静态static模块:

public class StaticClass {static {             //逻辑代码....类加载的时候执行,并且只执行一次。             System.out.println("类加载的时候执行,并且只执行一次。");       }}


1. 当给StaticClass   new 一个对象的时候,执行上述代码中的static块....,不管生成多少个对象,该static块只加载执行一次。


2. 当采取【Class.forName("类的全路径");】语句进行类加载时,执行static块。


正因为static块在类加载的时候就执行了,所以当在static方法中调用非static方法时,会报编译错误!!!!



0 0
原创粉丝点击