static总结

关键字: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

 

posted @ 2019-12-18 19:18  土豆烤鸭  阅读(446)  评论(0编辑  收藏  举报