一语点破 Java 中的静态 static 关键字

点击上方“Java基基”,选择“设为星标”

做积极的人,而不是积极废人!

源码精品专栏

 

来源:blog.csdn.net/ju_362204801/article/details/90738966

  • 1,模拟分析理解静态

  • 2,什么时候可以使用静态?

  • 3,静态的其他内容理解


思考:大家有没有想过一个问题,静态它为什么叫静态?因为书上或者别的文章里这么写的都这么叫的?所以也跟着这么叫??????

1,模拟分析理解静态

那今天咱们就分析分析,搞定它!

为了解决上边的问题,咱们再引发一个问题:有静肯定就有动啊,那这个“静”是相对于谁来说的?

要讲明白这个,首先需要知道Java中类和对象之间的关系

类是对某些类具有共同特征的事物的抽象,对象是根据类产生出的具体实例。

请注意:这里说的共同特征是指具有共同的属性(长度)和共同的行为(方法),绝对不是指这些物体的数据都相同

举个例子:张三和李四都属于学生。这里的张三,李四就是具体的实例对象;学生就是一个抽象出来的具有共同特征的事物,学生某种事物都有共有班级,姓名,年龄,性别等属性,所以学生是个类。

但是张三这个具体的实例对象,他的班级是1班,姓名是张三,年龄是18岁,性别是男;

李四这个具体的实例对象,她的班级是2班,姓名是李四,年龄是18岁,性别是女。

这里的1班2班,18岁,男,女都是具体对象的具体数据,这些数据是转换张三,李四等这些不同实例对象的变化而变化的,是对象存储的,这就是上边说的相对于静来说的那个动

那什么是静呢?说完了动,静就很简单了,静就是不转移对象的变化而变化,是某种物体共有的数据,注意标红的几个字,从而这些静的数据的是通过类存储的,不是通过对象变得

所以静态变量又称为“类变量”,非静态的变量又称为“实例变量”

继续上边的示例,学生类再加个分段国家,假设我们只讨论中国范围内,那么国家这个分区就可以定义成静态的,因为张三,李四已以及他所有的学生对象,他们国家都是中国,“中国”这个值学生类的所有对象共有的

静态的就是类共有的。静就是大家(类)都有的共有的,是相对于通过对象变化而变化的“动”而言的

呜啦啦的说了那么多是为了帮助大家更容易的去理解。

总之简单粗暴的一句话:静态的是继承类的,非静态是继承对象的

那具体什么时候可以使用静态呢?

2,什么时候可以使用静态?

因为静态修饰的内容有成员变量和成员方法,所以回答这个问题得从两方面入手

什么时候可以定义静态变量?

当类别中出现所有对象都共有的数据时,该分区就可以定义成静态的。有时刚才说的学生类别里的国家这个分区就可以定义成静态的。

什么时候可以定义静态方法?

当方法内部没有使用到非静态数据(对象的特有数据)时,那么该方法就可以定义成静态的

大家平常到的工具类XxxUtils就很符合上边的场景,所以大家见到的工具类基本上都是静态的,不用new对象,直接XxxUtils.xxx()调用

3,静态的其他内容理解

理解了上述内容后,下边的内容就不难理解了

静态:static关键字

static关键字的用法:它是一个修饰符,用于修饰成员(成员变量,成员方法)

静态的特点:

1,通过类的加载而加载(就是说这个类一被加载进内存,静态的东西就可以加载进去了,这时候对象还不存在呢)

2,静态先于对象存在

3,被所有的对象共享

4,可以直接被类名调用,也可以被对象调用

静态使用的注意事项:

1,静态方法只能访问静态成员(属性和方法),不能访问非静态成员。因为静态在的时候非静态的还没在呢

2,非静态方法可以访问静态成员,也可以访问非静态成员

3,因为静态先于对象的存在而存在,所以静态方法中不可以出现this,super关键字。

静态的利弊:

1,利:对于所有对象都共有的数据,没必要每个对象中都存在一份,可以使用静态,节省空间;可以不新建对象,直接用类名调用

2,缺点:因为静态是通过类存在的,所以生命周期过长;访问出现局限性,只能访问静态

静态和非静态的数据在内存中的存储也有所不同,下篇会接着讲一下它们在内存中是怎么存的,以及实例化一个对象具体都做了些啥

以上就是本人对java中静态的一些理解和总结,若有不对的地方,欢迎留言指出,一起学习进步



欢迎加入我的知识星球,一起探讨架构,交流源码。加入方式,长按下方二维码噢

已在知识星球更新源码解析如下:

最近更新《芋道 SpringBoot 2.X 入门》系列,已经 20 余篇,覆盖了 MyBatis、Redis、MongoDB、ES、分库分表、读写分离、SpringMVC、Webflux、权限、WebSocket、Dubbo、RabbitMQ、RocketMQ、Kafka、性能测试等等内容。

提供近 3W 行代码的 SpringBoot 示例,以及超 4W 行代码的电商微服务项目。

获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。