Java static 它为什么叫静态?一语道破天机!

简介: 那今天咱们就分析分析,搞定它!为了解决上边的问题,咱们再抛出一个问题:有静肯定就有动啊,那这个“静”是相对于谁来说的?要讲明白这个,首先需要知道Java中 类和对象之间的关系类是对某一类具有共同特征的事物的抽象,对象是根据类产生出的具体实例。请注意:这里说的共同特征是指具有共同的属性(字段)和共同的行为(方法),绝对不是指这些事物的数据都相同举个例子:张三和李四都属于学生。这里的张三、李四就是具体的实例对象;学生就是一个抽象出来的具有共同特性的事物,学生这类事物都有都有班级、姓名、年龄、性别等属性,所以学生是个类。

1、举例分析理解静态

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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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

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


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


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


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


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


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


3、静态的其他内容理解

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


静态:static关键字


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


静态的特点:


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


2、静态先于对象存在


3、被所有的对象共享


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


静态使用的注意事项:


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


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


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


静态的利弊:


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


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


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


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


相关文章
|
11月前
|
存储 安全 Java
探索 Java 静态变量(static)的奥秘
本文深入探讨了Java中的静态变量(`static`),从初印象、使用场景、访问方式、初始化、线程安全、优缺点到最佳实践,全面解析其特性和应用场景。静态变量属于类而非实例,适用于共享数据、定义全局常量和工具类中的变量。它在类加载时初始化,生命周期贯穿整个程序运行。然而,多线程环境下需注意线程安全问题,可通过`synchronized`或原子类解决。优点包括共享数据方便和提高性能,但也存在线程安全和代码耦合度增高的缺点。最佳实践建议谨慎使用、保证线程安全、遵循命名规范并封装访问。掌握静态变量的正确用法,能让你的代码更加高效简洁。
750 11
|
设计模式 JavaScript 前端开发
java中的static关键字
欢迎来到瑞雨溪的博客,博主是一名热爱JavaScript和Vue的大一学生,致力于全栈开发。如果你从我的文章中受益,欢迎关注我,将持续分享更多优质内容。你的支持是我前进的动力!🎉🎉🎉
286 8
|
存储 Java
Java 中的静态(static)
【10月更文挑战第15天】静态是 Java 语言中一个非常重要的特性,它为我们提供了一种方便、高效的方式来管理和共享资源。然而,在使用过程中,我们需要谨慎考虑其优缺点,以确保代码的质量和可维护性。
|
Java 程序员
Java 面试高频考点:static 和 final 深度剖析
本文介绍了 Java 中的 `static` 和 `final` 关键字。`static` 修饰的属性和方法属于类而非对象,所有实例共享;`final` 用于变量、方法和类,确保其不可修改或继承。两者结合可用于定义常量。文章通过具体示例详细解析了它们的用法和应用场景。
290 3
|
Java 编译器
在Java中,关于final、static关键字与方法的重写和继承【易错点】
在Java中,关于final、static关键字与方法的重写和继承【易错点】
194 5
|
Java
Java关键字 —— static 与 final 详细解释!一看就懂 有代码实例运行!
这篇文章详细解释了Java中static和final关键字的用法,包括它们修饰类、方法、变量和代码块时的行为,并通过代码示例展示了它们的具体应用。
867 0
Java关键字 —— static 与 final 详细解释!一看就懂 有代码实例运行!
|
存储 Java
Java之静态(static)与实例(instance)
Java之静态(static)与实例(instance)
356 5
【Java基础面试四十一】、说一说你对static关键字的理解
这篇文章主要介绍了Java中static关键字的概念和使用规则,强调了类成员与实例成员的区别及其作用域的限制。
static关键字在Java中的作用
static关键字在Java中的作用
|
存储 Java 数据库
Static关键字在Java中的多种用途解析
Static关键字在Java中的多种用途解析