static关键字详解
public class Student {
private static int age;//静态的变量(后面多线程会用到)
private double score;//非静态变量
public static void main(String[] args) {
Student S1 = new Student();
System.out.println(Student.age);
//System.out.println(Student.score);静态变量是和类加载的,所以这里的非静态变量并不能由类加载
System.out.println(S1.age);
System.out.println(S1.age);
}
public void run(){
go();//非静态方法可以直接调用静态方法
}
public static void go(){
}
public static void main(String[] args) {
new Student().run();//不能直接调用run,需要new
go();//静态方法可以调用静态方法,但是不能调用非静态方法
//因为static静态方法和类一起加载,加载的时候,非静态方法还没有
}
}
静态代码块
public class Preson {
//2:赋初值
{
//代码块(匿名代码块)程序在执行的时候并不能直接调用
System.out.println("匿名代码块");
}
//1:只执行一次
static {
//静态代码块,类一加载就直接执行,永久就执行一次
System.out.println("静态代码块");
}
//3
public Preson(){
System.out.println("构造方法");
}
public static void main(String[] args) {
Preson preson = new Preson();//静态代码块、匿名代码块、构造方法
System.out.println("========================");
Preson preson2 = new Preson();//匿名代码块、构造方法
}
}
一个类被final定义了,就没有办法被继承
导入包
package com.note.Demo01;
import static java.lang.Math.random;
//静态导入包
public class Test {
public static void main(String[] args) {
System.out.println(Math.random());//可以直接调用,不用Math.
}
}