java入门(二十) | OOP(七)之static关键字

java入门(二十) | OOP(七)之static关键字

static关键字

1.1 概念

是java中的一个关键字
用于修饰成员(成员变量和成员方法)

1.2 特点

  1. 随着类的加载而加载 / 类的资源
  2. 只加载一次,就会一直存在,直到类消失就一起消失了
  3. 优先于对象加载
  4. 被所有对象所共享
  5. 可以直接被类名调用

1.3 练习1:入门案例

package cn.qile.staticdemo;

//测静态的使用
public class Test1_Static {
    public static void main(String[] args) {
        //测试
        //1、静态资源可以直接通过类名.访问
        //3、静态资源优先于对象加载进内存
        Person.study();

        //2、通过对象访问普通资源
        Person p = new Person();
        System.out.println(p.name);
    }
}
//创建Person类
class Person{
    //普通资源
    String name="小王";
    public void eat() {
        System.out.println("正在吃饭");
    }

    //静态资源
    static String country;
    static public void study() {
        System.out.println("都在学习");
    }

}

1.4 静态内存图

1.5 练习2:静态调用关系

package cn.qile.staticdemo;

//测静态的使用
public class Test2_Static {
    public static void main(String[] args) {
        //静态资源访问
        Student.study();
        //普通资源访问
        Student s = new Student();
        s.eat();
    }
}
//创建Student类
class Student{

    //普通资源:调用啥资源都可以
    String name="小王";
    public void eat() {
        //1、非静态 调用 静态   --  能!!!
        System.out.println(country);
        //2、非静态 调用 非静态   --  能!!!
        System.out.println(name);

        System.out.println("正在吃饭");
    }

    //静态资源:静态资源只能调用静态资源
    static String country="China";
    static public void study() {
        //1、静态 调用 非静态   --   不能!!
//     System.out.println(name);

        //2、静态 调用 静态   -- 能!!
        System.out.println(country);

        System.out.println("都在学习");
    }

}

静态代码块、构造代码块、局部代码块

1、 静态代码块:在类加载时就加载,并且只被加载一次,一般用于项目的初始化

static{
 ...
}

2、 构造代码块:在创建对象时会自动调用,每次创建对象都会被调用
3、 局部代码块:方法里的代码块

package cn.qile.block;

public class Test3_Block {
    public static void main(String[] args) {
        //创建Teacher对象测试执行顺序
        new Teacher();
    }
}
//创建Teacher类
class Teacher{
    //提供静态代码块:位置是类里方法外 + 随着类的加载就加载
    //静态资源只会在类加载时加载一次,之后就一直存在内存中
    static{
        System.out.println("静态代码块");
    }
    //提供构造代码块:位置是在类里方法外 + 创建对象时先执行构造代码块
    {
        System.out.println("构造代码块");
    }
    //提供构造方法 : 用来创建对象自动调用
    public Teacher() {
        //提供局部代码块 : 控制变量的作用范围
        {
            System.out.println("局部代码块");
        }
        System.out.println("构造方法");
    }

}

总结
执行顺序:静态代码块 -> 构造代码块 -> 构造方法 -> 局部代码块

hmoban主题是根据ripro二开的主题,极致后台体验,无插件,集成会员系统
自学咖网 » java入门(二十) | OOP(七)之static关键字