static关键字
静态变量 vs 非静态变量
-
定义不同:
private static int age; //静态变量 多线程 private double score; //非静态变量
-
获取方式不同
- 静态变量:类名.变量名 or 变量名
- 非静态变量:对象.变量名
System.out.println(Student.age); System.out.println(s1.score); System.out.println(s1.age);
静态方法 vs 非静态方法
-
定义不同:
public void run(){} public static void go(){}
-
调用方式不同
-
静态方法:类名.方法名 or 方法名(本类中)
-
非静态方法:对象.方法名
Student.go(); Student student = new Student(); student.run();
-
代码块
-
静态代码块:
static { //静态代码块 }
-
匿名代码块
{ //代码块(匿名代码块) }
-
静态代码块、匿名代码块、构造方法的执行顺序:
- 1.静态代码块 2.匿名代码块 3.构造方法
- 静态代码块只执行一次
- 匿名代码块和对象同时产生,用来赋初始值
//2: 赋初始值 { //代码块(匿名代码块) System.out.println("匿名代码块"); } //1: 只执行一次~ static { //静态代码块 System.out.println("静态代码块"); } //3 public Person() { System.out.println("构造方法"); } public static void main(String[] args) { Person person1 = new Person(); System.out.println("================"); Person person2 = new Person(); }
静态导入包
导入包的时候加上static关键字,可以直接使用包中的方法
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);
}
}
用final定义的类
使用final关键字定义的类不可以被继承
public final class Person {}
public class Student extends Person{} //报错