关键字:static、静态变量、静态方法
静态对象static
什么是静态变量
我们可以基于一个类创建多个该类的对象,每个对象都拥有自己的成员,互相独立。
然而在某些时候,我们希望该类所有的对象共用同一个成员。这时候就可以用到static!
Java 中被 static 修饰的成员称为静态成员或类成员。它属于整个类所有,而不是某个对象所有,即被类的所有对象所共享。
静态成员可以使用类名直接访问,也可以使用对象名进行访问。
使用 static 可以修饰变量、方法和代码块。
public class Test1 {
// static修饰的变量为静态变量,所有类的对象共享hobby
static String i = "a";
public static void main(String[] args) {
// 静态变量可以直接使用类名来访问,无需创建对象
System.out.println("通过类名访问i:" + Test1.i);
// 创建类的对象
Test1 t1 = new Test1();
// 使用对象名访问静态变量
System.out.println("使用对象名访i:" + t1.i);
// 使用对象名的形式修改静态变量的值
t1.i = "b";
// 再次使用类名访问静态变量,值已经被修改
System.out.println("通过类名访问i:" + Test1.i);
}
}
运行结果
通过类名访问i:a
使用对象名访i:a
通过类名访问i:b
什么是静态方法
使用 static 修饰的方法,称为静态方法或类方法。
其实之前我们一直写的 main 方法就是静态方法。
public class Test01 {
//使用static关键字声明静态方法
public static void print() {
System.out.println("欢迎你!");
}
public static void main(String[] args) {
//直接使用类名调用静态方法
Test01.print();
//也可以通过对象名调用,当然更推荐使用类名调用
Test01 t1 = new Test01();
t1.print();
}
}
运行结果如下:
欢迎你!
欢迎你!
常见题目:
public class Test extends Base{
static{
System.out.println("test static");
}
public Test(){
System.out.println("test constructor");
}
public static void main(String[] args) {
new Test();
}
}
class Base{
static{
System.out.println("base static");
}
public Base(){
System.out.println("base constructor");
}
}
在执行开始,先要寻找到main方法,因为main方法是程序的入口,但是在执行main方法之前,必须先加载Test类,而在加载Test类的时候发现Test类继承父类Base类,因此会转去先加载Base类,在加载Base类的时候,发现有static块,便执行了static块。在Base类加载完成之后,便继续加载Test类,然后发现Test类中也有static块,便执行static块。在加载完所需的类之后,便开始执行main方法。在main方法中执行new Test()的时候会先调用父类的构造器,然后再调用自身的构造器。因此,结果如下。
base static
test static
base constructor
test constructor