java 中static的几种用法

1.static修饰变量和方法

在类的变量和方法上加上了static修饰符以后,在JVM加载该类的时候就会被分配到方法区(new 出来的对象分配到堆),因此不需要在创建该类的实例以后再进行引用。

有几点需要特别注意:

  1. 在static方法中不能调用其他的非static方法;
  2. 不能引用this或者super;
  3. 在static的方法上加synchronized占用的是类锁而非对象锁,比如一个线程执行一个对象的非static synchronized方法,另外一个线程需要执行这个对象所属类的static synchronized方法,此时不会发生互斥现象;

2.static静态代码块


public class StaticCodeTest {
public StaticCodeTest(){
System.out.println("我是构造方法,我被执行了");
}
static {
System.out.println("我是static代码块,我被执行了,我只会被执行一次");
}
}

public static void main(String[] args){
new StaticCodeTest();
new StaticCodeTest();
}

运行结果:

我是static代码块,我被执行了,我只会被执行一次
我是构造方法,我被执行了
我是构造方法,我被执行了

Process finished with exit code 0

  static代码块会在JVM加载类的时候执行,并且只会执行一次,应用较多的场景一般是项目启动的时候加载初始化配置。

3.静态内部类

在Java中不能用static修饰顶级类,但是允许我们在一个类里面定义内部静态类,静态类只能访问外部类的静态成员,不管是静态方法还是非静态方法都可以在非静态内部类中访问。

public class StaticCodeTest {

    static class InnerStatiClass{
        public void print(){
            System.out.println("我是静态内部类");
        }
    }
}

public static void main(String[] args){
new StaticCodeTest.InnerStatiClass().print();
}

4.import static导入

  import static 静态导入是从jdk1.5以后引入的,方式:import static java.lang.Integer.MAX_VALUE;或者:import static java.lang.Integer.*;这样写的好处是我们可以直接在代码中调用引入的静态方法,而不需要通过classname.method()来引用,减少代码的重复使用。

 

posted @ 2017-06-01 14:38  莫莫莫  阅读(1232)  评论(0)    收藏  举报