【Java基础】static关键字的使用

目录

static简介

static变量

static方法

static代码块


static简介

Java static关键字主要用于内存管理,static关键字可以声明静态变量,静态方法和静态代码块,它们都属于类,不属于类的实例对象。

static可以用于:

  1. 变量
  2. 方法
  3. 代码块

static变量

 static关键字声明的变量称为static变量(静态变量),其他类可以直接通过类名.变量名访问。

  • static可以用来声明类和对象都能够访问的变量,比如说员工的公司名称,学生的学校名称
  • 静态变量在类加载时就会存放在内存

普通变量和静态变量的区别

public class staticandnornal {
    public String normalVar = "非静态变量";
    public static String staticVar = "静态变量"; // 声明变量前加上static关键字,称之为静态变量
}

class staticTest{
    public static void main(String[] args) {
        staticandnornal s = new staticandnornal(); // 实例化对象
        System.out.println(s.normalVar); // 通过类的实例访问非静态变量

        System.out.println(s.staticVar); // 通过类的实例访问静态变量,但是不建议
        System.out.println(staticandnornal.staticVar); // 建议通过类名.变量名访问静态变量

        // 静态变量可以重新赋值,如果想要静态变量保持不变,可以在static关键字前面加上final
        System.out.println(staticandnornal.staticVar = "修改后的静态变量");
    }
}

static方法

static关键字声明的方法称为static方法(静态方法),注意以下几点

  1. 静态方法只能使用静态变量和调用其他的静态方法,不能调用非静态方法和非静态变量。
  2. 非静态方法可以调用静态方法和静态变量
  3. 其他类可以通过类名.方法名直接调用静态方法
  4. super和this关键字不能在静态上下文使用
public class staticandnornal {
    public String normalVar = "非静态变量";
    public static String staticVar = "静态变量"; // 声明变量前有static关键字,称之为静态变量

    // 非静态方法可以调用非静态变量和方法,也可以调用静态方法和变量
    void printNormalVar() {
        System.out.println("printNormalVar:" + normalVar);
        System.out.println("printNormalVar:" + staticVar);
        staticMethod1();
    }

    // 静态方法只能调用静态变量和静态方法
    static void staticMethod() {
        // System.out.println(normalVar); 代码报错提示:无法从静态上下文中引用非静态变量 normalVar
        // printNormalVar(); 代码报错提示:错误: 无法从静态上下文中引用非静态方法 printNormalVar()
        System.out.println("staticMethod:" + staticVar);
        staticMethod1();
    }

    static void staticMethod1() {
        System.out.println("静态方法:staticMethod1");
    }
}

class staticTest{
    public static void main(String[] args) {
        staticandnornal s = new staticandnornal(); // 实例化对象
        s.printNormalVar(); // 类的实例化对象访问非静态方法

        // s.staticMethod(); 类的实例化对象访问静态方法,不建议使用
        staticandnornal.staticMethod(); // 建议通过类名.静态方法名使用
    }
}

static代码块

static代码块也叫静态代码,有以下几种特性

  1. static代码块用于类的初始化操作,加载类的时候JVM会按照类的执行顺序依次执行静态代码块且只会执行一次
  2. static代码块只能调用静态方法和静态变量
  3. 不在任何方法体内,是独立于类成员的代码块
public class staticandnornal {
    public String normalVar = "非静态变量";
    public static String staticVar = "静态变量"; // 声明变量前有static关键字,称之为静态变量

    // 非静态方法可以调用非静态变量和方法,也可以调用静态方法和变量
    void printNormalVar() {
        System.out.println("printNormalVar:" + normalVar);
        System.out.println("printNormalVar:" + staticVar);
        staticMethod1();
    }

    // 静态方法只能调用静态变量和静态方法
    static void staticMethod() {
        // System.out.println(normalVar); 代码报错提示:无法从静态上下文中引用非静态变量 normalVar
        // printNormalVar(); 代码报错提示:错误: 无法从静态上下文中引用非静态方法 printNormalVar()
        System.out.println("staticMethod:" + staticVar);
        staticMethod1();
    }

    static void staticMethod1() {
        System.out.println("静态方法:staticMethod1");
    }

    static {
        System.out.println("Static代码块");

        // static代码块不能使用非静态成员
        //System.out.println(normalVar);
        //printNormalVar();

        // static代码块可以使用静态成员
        System.out.println(staticVar);
        staticMethod();
    }

    public static void main(String[] args) {
    }
}

输出结果:

Static代码块
静态变量
staticMethod:静态变量
静态方法:staticMethod1 

main方法中没有任何方法和对象的调用,代码仍有输出,说明static代码块在类加载的过程中执行的,不需要任何调用。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值