static关键字


概述

static 是Java中的一个关键字,它可以用来修饰变量、方法和代码块。它在不同的上下文中有不同的含义和用途。

1.修饰变量:

  • 在类级别上,static关键字可以用来创建静态变量(也称为类变量)。静态变量属于类本身,而不是属于类的实例。因此,无论创建了多少个类的对象,它们都共享同一个静态变量的值。
  • 静态变量在类加载时初始化,并且一直存在于整个程序的生命周期中。它们通常用于存储常量、共享数据或全局配置信息。

实际上,静态变量可以通过对象引用来访问,但这并不是推荐的做法,因为静态变量是与类相关联的,而不是与对象实例相关联的。应该使用类名来访问静态变量,以明确地表示其属于类本身。

2.修饰方法:

  • static 关键字也可以用来创建静态方法。静态方法属于类本身,而不是属于类的实例。因此,它们可以通过类名直接调用,不需要先创建对象。
  • 静态方法中不能访问实例变量,因为它们没有隐式的当前对象(即没有 this)。只能访问静态变量和其他静态方法。
  • 静态方法常用于编写工具类,提供一些通用的功能方法,不需要创建实例对象即可使用。

静态方法调用的注意事项:

  • 静态方法可以直接访问类变量和静态方法。
  • 静态方法不能直接访问普通成员变量或成员方法。反之,成员方法可以直接访问类变量或静态方法。
  • 静态方法中不能使用this、super关键字

静态方法中不能使用super和this关键字原因是:
this是对当前对象的引用
super是对父类的对象的引用
(静态成员(包括静态方法)在类加载时就会被创建并存在于内存中,而对象是在运行时根据类实例化而创建的,因此静态方法先存在于对象之前。)
这时候,连实例化的对象都没有产生,所以this和super也就不存在。
综上所述!就不能在静态方法中使用this和super关键字!

3.修饰代码块:

  • static 关键字也可以用于创建静态代码块。静态代码块在类加载时执行,且仅执行一次。它主要用于进行类的初始化操作,例如初始化静态变量。
  • 静态代码块的执行顺序在类加载时是优先于构造函数和普通代码块的。

4.静态原理图解:

在这里插入图片描述

5.题

类加载练习图
执行流程:
说明:

`什么时候类加载: 类被使用之前`
    a.创建对象
    b.创建子类对象, 会加载父子类
    c.调用类的静态成员
    d.调用子类的静态成员, 会加载父子类
    e.主动加载 Class.forName(全限定类名)
`类加载的过程:`
    静态成员变量初始化
    静态的代码块要执行
    静态的方法会加载
`对象实例化过程:`
	成员变量初始化
	执行代码块
	执行构造方法

首先main方法里进行了对象的实例化,触发类加载,进行静态成员变量的初始化,按照定义顺序进行初始化,k=0;静态变量 t1 被创建并初始化为新的 Text 对象,开始成员变量 j 的初始化,然后执行代码块,最后执行构造方法,t1初始化完成(由于静态变量i和n还未被初始化默认为0)。继续静态变量初始化,t2同理。然后i初始化,n初始化,静态成员变量初始化完毕开始执行静态代码块,最后类加载结束。继续main方法 init 的实例化,成员变量` j 初始化,代码块执行,然后构造方法执行,结束。

结果为:
1:j i=0 n=0
2:构造块 i=1 n=1
3:t1 i=2 n=2
4:j i=3 n=3
5:构造块 i=4 n=4
6:t2 i=5 n=5
7:i i=6 n=6
8:静态块 i=7 n=99
9:j i=8 n=100
10:构造块 i=9 n=101
11:init i=10 n=102

Process finished with exit code 0

总结

static 关键字用于在类级别上创建静态成员,即属于类本身而不是类的实例。静态变量在类加载时初始化,一直存在于整个程序的生命周期中。静态方法可以通过类名直接调用,不需要创建对象。静态代码块在类加载时执行一次,用于进行类的初始化操作。

其主要目的还是想在不创建对象的情况下,去调用方法。节省了创建对象的开销。由于静态方法不依赖于对象,它在方法调用时不需要进行方法调度和创建栈帧,因此执行效率相对较高。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值