⭐⭐⭐ Spring Boot 项目实战 ⭐⭐⭐ Spring Cloud 项目实战
《Dubbo 实现原理与源码解析 —— 精品合集》 《Netty 实现原理与源码解析 —— 精品合集》
《Spring 实现原理与源码解析 —— 精品合集》 《MyBatis 实现原理与源码解析 —— 精品合集》
《Spring MVC 实现原理与源码解析 —— 精品合集》 《数据库实体设计合集》
《Spring Boot 实现原理与源码解析 —— 精品合集》 《Java 面试题 + Java 学习指南》

摘要: 原创出处 blog.csdn.net/ju_362204801/article/details/90738966 「嗑嗑磕嗑瓜子的猫」欢迎转载,保留摘要,谢谢!


🙂🙂🙂关注**微信公众号:【芋道源码】**有福利:

  1. RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表
  2. RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址
  3. 您对于源码的疑问每条留言将得到认真回复。甚至不知道如何读源码也可以请教噢
  4. 新的源码解析文章实时收到通知。每周更新一篇左右
  5. 认真的源码交流微信群。

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

1、举例分析理解静态

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

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

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

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

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

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

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

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

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

那什么是静呢?说完了动,静就很简单了,静就是不随着对象的变化而变化,是这类事物共有的数据,注意标红的几个字,也就是说这些静的数据的是随着类存储的,不是随着对象变得

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

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

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

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

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

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

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

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

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

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

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

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

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

3、静态的其他内容理解

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

静态:static关键字

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

静态的特点:

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

2、静态先于对象存在

3、被所有的对象共享

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

静态使用的注意事项:

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

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

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

静态的利弊:

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

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

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

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

文章目录
  1. 1. 1、举例分析理解静态
  2. 2. 2、什么时候可以使用静态?
    1. 2.0.1. 什么时候可以定义静态变量?
    2. 2.0.2. 什么时候可以定义静态方法?
  • 3. 3、静态的其他内容理解
    1. 3.0.1. 静态的特点:
    2. 3.0.2. 静态使用的注意事项:
    3. 3.0.3. 静态的利弊: