static关键字
package oop.demo01.demo08;
public class Student {
public static int age;
public double score;
public void run(){
}
public static void go(){
}
public static void main(String[] args) { //main静态方法
Student student = new Student();
System.out.println(Student.age); //静态变量推荐使用类名.变量,很明显知道这是静态变量,静态变量对于这个类而言,在内存中只有一个,它能被类中的所有实例去共享。(多线程中会用到)
//System.out.println(Student.score); //非静态的变量字段不能这么用
System.out.println(student.age);
System.out.println(student.score); //用对象调用非静态属性
Student s1 = new Student();
s1.run(); //new Student().run(); 用对象调用非静态方法,非静态方法可以直接访问这个类里面的静态方法。因为静态方法跟类一起加载,一直存在,非静态方法就可以调用静态方法。
Student.go(); //直接用类调用静态方法。run非静态方法可以调用go静态方法,反之不行,因为go静态方法先加载,加载顺序不同。
go(); //因为在当前这个类里面,可以省略类
}
}
代码二:
package oop.demo01.demo08;
public class Person {
//2:对象一创建,先走匿名代码块:赋一些初始值
{ //创建这个对象的时候就自动创建了,在构造器(方法)之前。
//代码块(匿名),由于没有名字,程序在执行的时候并不能主动调用这些代码块。
System.out.println("匿名代码块");
}
//1:只执行一次
static{ //跟类一加载它就直接执行,永久只执行一次。
//静态代码块,可以加载一些初始化的数据
System.out.println("静态代码块");
}
//3:先走匿名代码块,再走构造方法,有静态代码块,只会在第一次执行,并且第一个执行。
public Person() {
System.out.println("构造方法");
}
public static void main(String[] args) {
Person person = new Person();
System.out.println("============");
Person person1 = new Person();
}
}
代码三:
package oop.demo01.demo08;
//静态导入包:
import static java.lang.Math.PI;
import static java.lang.Math.random;
public class Test {
public static void main(String[] args) {
System.out.println(Math.random()); //将import static java.lang.Math.random;包导入后,就不用写Math.,简单。
System.out.println(random());
System.out.println(PI); //final是常量的修饰符,通过final修饰的类没有子类,不能被继承。
}
}