Java中的static

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java中的static相关的知识,希望对你有一定的参考价值。

static表示静态的意思。

  static关键字可以用于修饰属性,也可以用于修饰方法,还可以用于修饰类。
 
   (1)静态成员(与对象无关,与类有关)

  成员使用static修饰----类成员(全局变量)。所有对象共同使用唯一一份静态的成员变量。(一般将常量使用static修饰)

  如果一个成员变量是static的,那么可以通过:类名.成员变量名的形式使用。(也可以用变量名.成员变量名的形式,但是使用类名更好一些)。
     例:private static final int A = 10;(在实例化多个对象的时候,就只需在数据段的静态区划分一个A的存放空间)
 
  (2)静态方法(一般用于工具类的工具方法------Math中的方法(类产不产对象对使用者无影响,使用者只用其方法))

  static修饰的方法称为静态方法。

  静态方法可以使用类名.方法名的方式来访问。

  静态方法只能继承,不能重写。
   
    static 的方法不能操作非static 的任何属性与行为。

    

  多态调用时,静态方法属于一种特殊情况,父类的引用指向子类的对象,调用静态方法时,调用的仍是父类中的版本。因为子类不能覆写父类的静态方法。如果子类和父类中定义了同样的静态方法,起到的仅仅是隐藏的作用。


  静态方法只能访问静态的成员变量,因为非静态的成员与特定的对象相关联,而静态方法并不能明确是哪个对象。

  但是非静态的方法静态非静态的成员都可以访问。

  不能在静态方法中使用this关键字。
 
   (3)static代码块

  静态代码块:

  static

  {

    //内容

  }

  静态代码块的作用一般是完成一些初始化工作。

  静态代码块在类被加载的时候执行。要想调用某个类来生成对象,首先需要将类加载到Java虚拟机(JVM)上,然后用JVM加载这个类来生成对象。

  因为每个类只会被加载一次,所以静态代码块也只会被执行一次。而构造方法是在生成对象的时候被执行,每次生成对象都会调用构造方法--------不用static修饰构造方法。

  如果继承体系中有静态代码块,那么首先执行最顶层的类的静态代码块,一直执行到最底层的类的静态代码块;然后再去执行最顶层的类的构造方法,一直执行到最底层的类的构造方法。注意,静态代码只会执行一次。

  如果有多个static代码块,JVM将按照它们在类中出现的顺序依次执行它们。

  补充说明一下:如果有非静态的初始化语句,这些语句将在构造方法之前执行。


   例:public class Father {
    {
        System.out.println("父类实例化");
    }
    static{
        System.out.println("父类静态");
    }
    public Father(){
        System.out.println("父类构造");
    }


     }



   public class Son extends Father{
    {
        System.out.println("子类实例化");
    }
    static{
        System.out.println("子类静态");
    }
    public Son(){
        System.out.println("子类构造");
    }




   public class Test {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
          Son w = new Son();
          Father f = new Father();          
          System.out.println();
    }

      }



 运行结果:
父类静态
子类静态
父类实例化
父类构造
子类实例化
子类构造
父类实例化
父类构造

     (4)静态内部类:
        静态内部类是成员内部类的一特例。
        可以有访问修饰符,class文件的文件名:外部类类名$内部类类名.class。
        在本类的任意方法中都可以实例化出来,在第三方类中要new出来,无需产生外部对象,只需用"外部类类名."的方式访问
 

以上是关于Java中的static的主要内容,如果未能解决你的问题,请参考以下文章

java 关键字

Java面向对象--static

Java面向对象详解-下

java里的static/final含义

Java自用基础编程篇-4.面向对象(下)

大数据必学Java基础(三十六):深入了解关键词static