Java中的static关键字解析

static关键字是Java代码中比较常见的一个关键字也是比较难以理解的一个关键字,下面我就来讲述一下static关键字的用法和注意的些许细节

一. static关键字的用途

二. static关键字需要注意的细节

一.static关键字的用途

static关键字的基本作用,用一句话来描述就是“方便在没有创建对象的情况下来进行调用”,被static关键字修饰的方法或者变量不需要依赖对象进行访问,只要类被加载了,就可以通过类名去进行访问

1) static方法

static方法一般称作静态方法,由于静态方法不依赖于任何对象就可以进行访问,因此对于静态方法来说,是没有this的,因为它不依附于任何对象,既然都没有对象,就谈不上this了。并且由于这个特性,在静态方法中不能访问类的非静态成员变量和非静态成员方法,因为非静态成员方法/变量都是必须依赖具体的对象才能够被调用。

但是要注意的是,虽然在静态方法中不能访问非静态成员方法和非静态成员变量,但是在非静态成员方法中是可以访问静态成员方法/变量的。举个简单的例子:
在这里插入图片描述

上图中print2()方法是独立存在的,它随着类的创建而创建,可以直接通过类名去调用 例如:Object.print2(),上图中存在两处错误,Str2,print1()均于print2()后而生成的,所以在不可以在静态方法中直接去调用非静态的方法和成员。然而对于非静态函数就可以直接调用静态方法了,所以我们最常见的static方法就是main方法,因为程序在执行main方法的时候没有创建任何对象,所以只有通过类名来访问。

1) static变量

static变量也称作静态变量,所以与之相对的就是非静态变量

静态变量与非静态变量的区别:

数量上的区别:

(n份)非静态成员变量是在每个对象中都维护着一份数据

(1份)静态成员变量只会在方法中维持着一份数据

访问方式上的区别

非静态成员变量只能使用对象进行访问

静态成员变量可以使用对象,类名进行访问

存储位置上的区别

非静态成员变量是存储在堆内存上

静态成员变量是存储在方法区中

生命周期的区别

非静态成员变量是随着对象的创建而创建,随着对象的消失而消失

静态成员变量是随着类文件的加载而被创建存在的,随着类文件的消失而消失

作用上的区别

非静态函数适用于描述一类事物的属性

静态函数是提供一个共享数据给所有对象使用的

附上一张内存图:

在这里插入图片描述

当然在方法区中数据也是会更新的,例如图中的country就由原来的“中国”被替换成“小日本”了。

当然还有一个重要的问题:什么时候使用static修饰一个函数呢?

如果一个函数没有直接访问非静态的成员,那么即可使用static修饰该函数了。(常用于工具类的方法)

1) static代码块

所属类的字节码被加载到就执行了,而且可以来优化程序性能。Staticc块可以放在类的

任何地方,类中可以有多个static代码块。在类初次被加载的时候,会按照static代码块的顺序来执行每个static块,并且只会执行一次。

二.static关键字需要注意的细节

1)静态成员变量需要注意的细节

静态的成员变量可以使用类名或者是对象进行访问

非静态成员变量只能使用对象进行访问,不能使用类名直接访问

千万不要为了方便访问而使用static修饰一个成员变量,只有这个成员变量的数据需要被共享的时候才能使用static修饰

2)static修饰成员函数需要注意的细节

非静态的函数只能使用对象调用,不能使用类名调用

静态函数可以直接访问静态的成员,但是不能直接访问非静态的成员

非静态的成员变量可以直接访问静态以及非静态的成员

静态函数不能出现this以及super关键字

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值