Day013 Static关键字详解

Posted 南方风

tags:

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

static 关键字


总结

  • 有static修饰的变量叫静态变量,有static修饰的方法叫静态方法
  • 静态变量和静态方法属于类,可以直接通过类名.变量名和类名.方法名调用;而非静态变量和非静态方法属于对象,必须用实例化后的对象调用。
  • 静态变量和静态方法对于类而言在内存中是只有一个,能被该类的所有实例所共享。而非静态属性和非静态方法每个对象都对象其自己的。
  • 静态变量和静态方法随类一起加载,而非静态属性和非静态方法在对象创建的时候才会去加载,因此静态变量和方法一定先加载,非静态变量和方法后加载。
public class Student {
    private static int age;//静态变量
    private double score;//非静态变量

    public void run(){

    }

    public static void go(){

    }
    public static void main(String[] args) {
        Student s1=new Student();

        System.out.println(Student.age);
        System.out.println(s1.age);
        System.out.println(s1.score);

        Student.go();
        s1.run();
    }
}

输出结果

0
0
0.0

静态代码块

静态代码块也属于类,跟类加载的时候一起执行,只执行一次。匿名代码块随对象创建的时候执行,每new一个对象,执行一次。new一个对象的执行顺序:静态代码块-->匿名代码块-->构造方法

public class Person {
    {
        //代码块(匿名代码块)
        System.out.println("匿名代码块");
    }

    static {
        //静态代码块
        System.out.println("静态代码块");
    }

    public Person(){
        System.out.println("构造方法");
    }
}
 public static void main(String[] args) {
        Person p1 = new Person();
        System.out.println("==================");
        Person p2 = new Person();
        System.out.println("==================");
        Person p3 = new Person();
    }

输出结果

静态代码块
匿名代码块
构造方法
==================
匿名代码块
构造方法
==================
匿名代码块
构造方法
  • 可以看到静态代码块只执行了一次,执行顺序是先执行静态代码块,再执行匿名代码块,最后执行构造方法。

  • 匿名代码块的作用:赋对象的一些初始值

静态导入包

举个例子,输出随机数

public class Test {
    public static void main(String[] args) {
        System.out.println(Math.random());
    }
}

如果我不想写Math.random(),直接写random()要怎么写,这就要用静态导入包了

//静态导入包
import static java.lang.Math.random;

public class Test {
    public static void main(String[] args) {
        System.out.println(random());
    }
}

如果在一个类中需要多次调用一个类的静态方法或者静态变量,使用静态导入包可以提高我们的编程效率。

//静态导入包
import static java.lang.Math.random;
import static java.lang.Math.PI;

public class Test {
    public static void main(String[] args) {
        System.out.println(random());
        System.out.println(PI);
    }
}

狂神说java

以上是关于Day013 Static关键字详解的主要内容,如果未能解决你的问题,请参考以下文章

Day013 instanceof和类型转换

java static 详解

零基础学Java并不难!详解Java中的static关键字(下)

零基础学Java并不难!详解Java中的static关键字(上)

static关键字详解

Java面向对象中 static关键字的详解