java的static关键字

本文解析了静态变量、方法在Java中的概念,强调了数据共享、类属性、加载顺序,并指出在static代码块中调用非static的错误方式。重点讲解了类加载时的执行顺序和如何正确调用静态资源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 使用

  • static修饰的变量是类变量,修饰的方法就是类方法,修饰之后虽然可以用该类的对象来调用,修改其值,但是一般用 类名. 变量名/方法 来调用。(类名.变量名/方法 不能调用非static,会报错)

image-20211214173629918.png

  • tip:它在类加载的时候最先加载,所以它的加载会先于new类对象的加载

2 static的特点

  • 数据共享,每个类对象都共用同一个static修饰的类变量/方法,

  • 属于类,不属于对象

  • 优先于非static变量/方法的加载,所以也优先于对象的产生。

  • static(static方法/static代码块/main方法)中都不能用"this." 来调用变量/方法

3 类加载时各个部分的执行顺序

  • 在实例化一个类对象时以下三者的加载顺序:

    先加载static静态代码块(静态构造器) 、静态方法、静态变量

    再加载匿名代码块(通用构造器),如下格式:

    {

    ​ ...(代码)...

    }

    后加载构造方法。

    tip:①在类加载全过程只执行一次,②和③会在每次new一个对象时执行。(效果如下图控制台输出)

image-20211214201428812.png

  • 因此,在static(静态)的代码块/方法(包括main方法)中不能通过"this."调用非static的部分。(因为"this"关键字是在加载非静态资源的时候才有的,所以在还没加载出来的时候就去调用它肯定会报错)

image-20211214205112658.png

(在method2中则可以通过 类名.method1()或者 this.method1()或者method1()调用method1)

4 我的总结思考

若想在本类中调用static方法,可以直接写方法名,省略"this." 或者 "类名." ,但是想在其他类中的方法调用该类的static方法,则需要在其他类的方法中调用时加上该类的 "类名."(前提是方法有public修饰) 。所以,为了统一,一般在自己类调用自己的static方法时也用"类名." 或者"this."。

image-20211214220858573.png

因为疏忽,上图的

public static void method1(){
    method1();
}

会导致无限递归,不能这样写


(本博客部分截图来自B站“老男孩IT教育”)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值