static关键字详解

六、static关键字详解

静态与非静态的区别

static是一个修饰符,修饰方法叫做静态方法,修饰属性叫做静态属性。

private static int age; //静态变量 with "static" 和所有类共享 多线程
private double score; //非静态变量 without "static"

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

    System.out.println(Student.age);// 类变量,直接调用
    System.out.println(Student.score);//不可以使用score,因为类中他是非静态变量
    System.out.println(s1.age);
    System.out.println(s1.score);
}

静态方法可以调用静态方法,但是不可以调用非静态方法
非静态方法可以直接访问这个类中的静态方法

public void run(){ //非静态方法
    go(); //非静态方法可以直接访问这个类中的静态方法
}
public static void go(){ //静态方法

}

public static void main(String[] args) {
    go(); //静态方法可以调用静态方法,但是不可以调用非静态方法
}

代码块

  1. 直接一对{}叫做匿名代码块
  2. static {} 叫做静态代码块,第一个和永久被执行
package oop.Demo07;

public class Person {
    {
        // 匿名代码块
        // 因为没有名字,程序员并不能主动去调用这个代码块
    }
    static{
        //静态代码块,可在里面加载初始化的数据
    }
}
package oop.Demo07;

public class Person {
    {
        System.out.println("匿名代码块");//可以在匿名代码块赋值初始值
    }
    static {
        System.out.println("静态代码块"); //只执行一次
    }

    public Person() {
        System.out.println("构造器/构造方法");
    }

    public static void main(String[] args) {
        Person person1 = new Person();
        System.out.println("==============");
        Person person2 = new Person();
    }
    /*第一次输出:
    静态代码块
    匿名代码块
    构造器/构造方法
     */
    /*
    第二次输出 有了person2

    静态代码块
    匿名代码块
    构造器/构造方法
    ==============
    匿名代码块
    构造器/构造方法
     */
}

补充知识-导入类

package oop.Demo07;
//import java.lang.Math;直接导入Math这个类, 也可以导入具体的方法
import static java.lang.Math.random;
//导入之后,不用写成Math.random(),可以直接写成random(),省略Math

public class Test {
    public static void main(String[] args) {
        System.out.println(random());
    }
}
posted @ 2021-02-18 16:22  NTE701  阅读(57)  评论(0)    收藏  举报
1