详解Java的static关键字

文章目录

  • 🎄静态方法
  • 🌺静态方法和非静态方法对比
    • 🛸静态方法实例
    • 🛸非静态方法实例
  • 🌹static关键字
    • ⭐static变量
    • ⭐static代码块

在这里插入图片描述

🎄静态方法

  • 不依赖于对象实例:静态方法不需要依赖于任何对象实例,因为它们与具体的对象实例无关联。这意味着在没有创建对象实例的情况下,就可以直接通过类名访问或调用静态方法。
  • 可以访问静态成员:静态方法可以访问类的静态成员(静态字段和静态方法),但不能访问非静态成员(实例字段和实例方法)。这是因为静态方法在被调用时,可能还没有任何对象实例被创建,因此无法访问依赖于对象实例的非静态成员。
  • 类级别的操作:静态方法通常用于表示类级别的操作,例如工具方法、单例模式、工厂方法等。这些操作不依赖于具体的对象实例,而是与整个类相关联。
  • 语法结构:静态方法使用static关键字修饰,并且位于类中的任意位置。它可以通过类名直接访问或调用,而不需要创建对象实例。

🌺静态方法和非静态方法对比

🛸静态方法实例

public class MyClass {private static int count = 0;public static void increment() {count++;}public static int getCount() {return count;}// 其他成员和方法...
}

在上面的示例中,我们定义了一个静态方法increment()和一个静态字段count,用于表示某个类的实例数量。静态方法increment()每次被调用时,会将count加1;静态方法getCount()用于获取当前count的值。注意,这两个方法都是静态方法,可以通过类名直接访问或调用,例如MyClass.increment()和MyClass.getCount()

总之,静态方法不依赖于任何对象实例就能进行访问,因为它们与具体的对象实例无关联,而是与整个类相关联。静态方法在内存中只有一份副本,并且在类加载时初始化,因此可以直接通过类名访问或调用。

🛸非静态方法实例

public class MyClass {private int count = 0;public void increment() {count++;}public int getCount() {return count;}// 其他成员和方法...
}

在上面的示例中,我们定义了一个非静态方法increment()和一个非静态字段count,用于表示某个对象实例的数量。非静态方法increment()每次被调用时,会将当前对象实例的count加1;非静态方法getCount()用于获取当前对象实例的count值。注意,这两个方法都是非静态方法,必须通过对象实例来访问或调用,例如obj.increment()和this.getCount()

总之,非静态方法必须要依赖于对象实例才能进行访问,因为它们与具体的对象实例相关联,并且需要访问依赖于对象实例的实例成员。

🌹static关键字

static方法一般称为静态方法,由于静态方法不依赖于任何对象就能进行访问,因此对于静态方法来说,是没有this关键字的(因为静态方法不依赖于任何对象,既然没有对象,就谈不上this了

为什么静态方法不依赖于任何对象就能进行访问

静态方法不依赖于任何对象就能进行访问,是因为它们与具体的对象实例无关联,而是与整个类相关联(请看上面讲述静态方法实例的代码)。静态方法在内存中只有一份副本,并且在类加载时初始化,因此可以直接通过类名访问或调用。


虽然静态方法中不能访问非静态成员方法和非静态成员变量,但是在非静态成员方法中是可以访问静态成员变量和方法的
我们最常用的static方法就是main方法,因为程序在执行main方法的时候没有创建任何对象,因此只有通过类名来访问

⭐static变量

static变量又称为静态变量,静态变量和非静态变量的全部是
静态变量:被所有的对象所共享,在内存中只有一个副本
非静态变量:是对象所拥有的,在创建对象的过程在被初始化,存在多个副本,各个对象拥有的副本之间互不影响
使用static修饰成员方法最大的作用,就是可以通过类名.方法名的方式调用方法,避免了new出对象的繁琐和资源消耗

⭐static代码块

静态代码块(static code block)是使用static关键字定义的一种特殊代码块,在类加载时执行,并且仅执行一次,通过静态代码块,我们可以在类加载时完成一些必要的初始化工作,确保类的静态成员在后续的使用中具备正确的状态

静态代码块的主要特点如下:

  • 执行时机:静态代码块在类加载过程中被执行,而不是在创建对象实例时执行。它会在类首次被加载时自动执行,并且只执行一次。一般情况下,静态代码块在类加载时的准备阶段执行。
  • 作用范围:静态代码块属于整个类,与具体的对象实例无关。它可以用于初始化静态成员(静态字段)或执行其他一次性的静态操作。
  • 访问权限:静态代码块可以访问类中的静态成员(静态字段、静态方法等),但无法直接访问非静态成员(实例字段、实例方法等),因为非静态成员需要依赖具体的对象实例才能访问。
  • 语法结构:静态代码块使用static关键字修饰,并且位于类中的任意位置,通常紧跟在静态字段的定义之后。它使用一对大括号{}包裹起来,内部可以包含任意的Java代码。

以下是一个静态代码块的示例:

public class MyClass {static {// 静态代码块中的代码System.out.println("Static block executed.");}// 其他成员和方法...
}

在上面的示例中,当MyClass类被加载时,静态代码块会被执行,并输出"Static block executed."。注意,静态代码块只会执行一次,即使创建多个MyClass对象实例。

静态代码块常用于初始化静态字段或执行其他一次性的静态操作,例如加载配置文件、初始化数据库连接等。它在类加载时自动执行,确保了静态成员的初始化在使用之前完成。

总之,静态代码块是使用static关键字定义的一种特殊代码块,在类加载时执行,并且仅执行一次。它可以用于初始化静态成员或执行其他一次性的静态操作,通常位于类中的任意位置,紧跟在静态字段的定义之后。

希望本文能够为您带来新的思考和启发,也期待与您共同分享更多关于(文章主题)的想法。让我们携手并肩,共同创造美好的未来!

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/206170.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

美团四年、字节三年,我的软件测试之路

前言 时间回到8年前,我人生中的第一份实习工作,是在某互联网公司做一个自动化测试工程师。当时的我可谓意气风发,想要大干一场,结果第一次做测试就出现了事故。由于对某些地方的不了解,把某一个地方侧漏了&#xff0c…

python练习题(markdown中的60道题)

1.Demo01 摄氏温度转化为华氏温度 celsius float(input(输入摄氏温度:)) fahrenheit (9/5)*celsius 32 print(%0.1f 摄氏温度转为华氏温度为 %0.1f % (celsius, fahrenheit))结果: 2.Demo02 计算圆柱体的体积 h, r map(float, input().split())# …

2014年8月20日 Go生态洞察:Go在OSCON的精彩亮相

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

文心大模型商业化领跑,百度在自我颠覆中重构生长力

随着科技巨头竞逐AI大模型,人工智能技术成为今年最受瞩目的新技术。但是,AI大模型的创新之路,还缺少一个足够有力的商业化答案。 作为全球最先发布大模型的互联网大厂,百度能否加速大模型的应用落地,以及文心大模型能…

云原生入门系列(背景和驱动力)

做任何一件事,或者学习、应用一个领域的技术,莫过于先要想好阶段的目标和理解、学习它的意义是什么?解决了什么问题? 这部分,就尝试来探讨下这个阶段需要理解并达成的目标以及践行云原生的意义在哪里。 1.历程 任何阶…

Windows平台Unity下实现camera场景推送RTMP|轻量级RTSP服务|实时录像

技术背景 我们在对接Unity平台camera场景采集的时候,除了常规的RTMP推送、录像外,还有一些开发者,需要能实现轻量级RTSP服务,对外提供个拉流的RTSP URL。 目前我们在Windows平台Unity下数据源可采集到以下部分: 采集…

计数排序+桶排序+基数排序 详讲(思路+图解+代码详解)

文章目录 计数排序桶排序基数排序一、计数排序概念:写法一:写法二: 二、桶排序概念代码 三、基数排序概念1.LSD排序法(最低位优先法)2.MSD排序法(最高位优先法) 基数排序VS基数排序VS桶排序 计数…

leetcode:1773. 统计匹配检索规则的物品数量(python3解法)

难度:简单 给你一个数组 items ,其中 items[i] [typei, colori, namei] ,描述第 i 件物品的类型、颜色以及名称。 另给你一条由两个字符串 ruleKey 和 ruleValue 表示的检索规则。 如果第 i 件物品能满足下述条件之一,则认为该物…

git命令 cherry-pick

参考:https://blog.csdn.net/weixin_42585386/article/details/128256149 https://blog.csdn.net/weixin_44799217/article/details/128279250 merge和cherry-pick的区别: merge:是把某一个代码分支完全合并到当前的代码分支。完全合并的意…

深度学习卷积神经网络的花卉识别 计算机竞赛

文章目录 0 前言1 项目背景2 花卉识别的基本原理3 算法实现3.1 预处理3.2 特征提取和选择3.3 分类器设计和决策3.4 卷积神经网络基本原理 4 算法实现4.1 花卉图像数据4.2 模块组成 5 项目执行结果6 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 基…

设计模式篇---外观模式

文章目录 概念结构实例总结 概念 外观模式:为子系统中的一组接口提供一个统一的入口。外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 外观模式引入了一个新的外观类,它为多个业务类的调用提供了一个统一的入口。主要优点…

材料电磁参数综合测试解决方案-材料电磁参数测试系统 (100MHz-500GHz)

材料电磁参数测试系统 100MHz-500GHz 材料电磁参数测试系统测试频率范围覆盖100MHz~500GHz,可实现材料复介电常数、复磁导率等参数测试。系统由矢量网络分析仪、测试夹具、系统软件等组成,根据用户不同频率、材料类型的测试需求&#xff…