Static关键字
1.静态属性
public class Student {
private static int age;//静态的变量
public double score;//非静态的变量
public static void main(String[] args) {
Student stu = new Student();
System.out.println(Student.age);//静态变量可以直接通过类名访问
System.out.println(Student.score);//非静态变量不可以通过类名访问,运行时这里会报错
System.out.println(stu.score);//通过对象访问属性
System.out.println(stu.age);//通过对象访问属性
}
}
静态属性对于类而言,在内存中只有一个,可以被类中的所有实例共享,当有许多类需要对这个属性进行操作时,可以使用静态属性
2.静态方法
package study;
public class Student {
public void run(){
go();//非静态方法可以调用静态方法
}
public static void go(){
}
public static void main(String[] args) {
new Student().run();//非静态方法需要对象去调用
Student.go();//静态方法可以通过类名直接调用
}
}
- 静态方法可以调用静态方法
- 非静态方法可以调用静态方法
- 静态方法不可以调用非静态方法
- 静态方法是和类一起加载的
3.静态代码块
package study;
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 person1 = new Person();
System.out.println("++++++++");
Person person2 = new Person();
}
}
4.静态导入包
import static java.lang.Math.PI;
import static java.lang.Math.random;
public class Study {
public static void main(String[] args) {
// System.out.println(Math.random());
// System.out.println(Math.PI);
System.out.println(random());//可以直接调用Math类里的方法和常量
System.out.println(PI);
}
}
5.final关键字
- 可以用来修饰常量
- 被final修饰的类不能被继承