static关键字

概述

static关键字,可以修饰成员变量,和成员方法。被修饰的成员是【属于类】的,不单单是属于某个对象的,也就是,既然是属于类的,那就不需要创建对象来调用类中的成员信息。

定义和使用格式

类变量

  • 当成员变量被static修饰,该变量就称为【类变量】。该类的每一个对象都【共享】同一个类变量的值。任何对象都可以更改类变量的值。类变量可以不通过创建对象的方式进行操作,通过类也可以操作。
  • 定义格式
    static 数据类型 变量名;
    如;static int number;
    //调用格式:
    //类名.变量名=值;
    

静态方法

  • 当成员方法一旦被static关键字修饰时,该方法称为【类方法】。类方法一般是通过类名直接调用,而不是单独创建对象来调用,调用方式很简单。习惯称为【静态方法】。

  • 定义格式:

    修饰符 static 返回值类型 方法名(参数列表){
    	//代码块
    }
    //调用格式
    //类名.方法名
    
  • 静态方法的注意事项:

    • 静态方法可以直接访问类变量和静态方法

    • 静态方法【不能直接访问】成员变量和成员方法。反之,成员方法可以【直接访问】类变量和静态方法。

    • 静态方法中不能使用this关键字

  • 调用格式

    静态方建议通过类来调用,但是也可以通过对象来调用,会出警告信息,不建议使用对象来调用

    //访问类变量
    类名.变量名;
    //访问静态方法
    类名.静态方法(参数);
    //备注;这些不能直接访问的成员信息,可以间接的通过实例化对象来调用。
    
  • static修饰的内容

    • 随着类的加载而加载,而且只会加载一次。
    • 存储于一块固定的内存区域,在静态域(静态区),可以被类直接调用。
    • 它优先于对象存在,所以可以被类的所有对象所共享。

静态代码块

静态代码块:定义在成员位置,被static修饰的代码快{}

  • 位置 :类中方法外
  • 执行:随着类的加载而加载,而且只会执行一次,优先于main方法和构造方法加载
public class ClassStatic{
    static{
		//执行语句 多条语句
    }
    public static void main(String[] args){
        //static{}//错误的写法
    }
}
//static可以修饰成员变量,成员方法,代码快。在使用过程中,如果你不行在创建对象的情况下
//,去调用成员变量,成员方法,可以定义静态的。对于静态代码快来说,通常是对类中的成员信息初始化。

练习

  • 查看一下运行结果为什么
class Father {
    static {
        System.out.println("父类静态代码块");
    }

    {
        System.out.println("父类非静态代码块");
    }

    public Father() {
        System.out.println("父类构造函数");
    }
}

class Son extends Father {
    static {
        System.out.println("子类静态代码块");
    }

    {
        System.out.println("子类非静态代码块");
    }

    public Son() {
        System.out.println("子类构造函数");
    }

    public static void main(String[] args) {
        Son son = new Son();
    }
}
	父类静态代码块
    子类静态代码块
    父类非静态代码块
    父类构造函数
    子类非静态代码块
    子类构造函数 
  • 补充一下完整版的,执行顺序从左到右:
    父类静态代码块 ->子类静态代码块 ->父类非静态代码块 -> 父类构造函数 -> 子类非静态代码块 -> 子类构造函数。
原文地址:https://www.cnblogs.com/zk2020/p/14015564.html