你真的了解static吗?

news2024/11/17 11:57:06

目录

  • 一.static
    • 1.概念
    • 2.存在形式
    • 3.访问形式
    • 注意
    • 4.static成员变量的初始化
      • 4.1就地初始化
      • 4.2使用代码块初始化
    • 5.关于main
  • 二.代码块
    • 概念
    • 1.普通代码块
    • 2.构造代码块
    • 3.静态代码块
    • 注意事项
      • ①加载形式
      • ②加载顺序

一.static

1.概念

在Java中,被static修饰的成员,称之为静态成员,也可以称为类成员,其不属于某个具体的对象,是所有对象所共享的。
被static修饰的成员变量不属于对象,而是属于类

在这里插入图片描述

在这里插入图片描述

在如上图中的代码里我们可以发现,zhangsna,wangwu,lisi三人的教室属性相同,而重复的操作提升了代码量,那我们可以不可以将相同的属性在类中提前声明,使得类中的所以对象都包含该属性,不再写重复的代码呢?这时我们就引出了static

在这里插入图片描述

在这里插入图片描述

此时我们发现,每个对象中,了相同的属性班级

2.存在形式

被static修饰的成员变量或方法,是存在于方法区而并非栈区,它是随着类的创建而创建,随着类的销毁而消失。

在这段程序中,进入Student类中,classRoom已经在方法区加载完成了(如图一),而其余成员变量说在进入main方法区中的对象实例化中(也就是new Student)过程中申请内存创建的(如图二)
在这里插入图片描述
在这里插入图片描述

3.访问形式

可以通过对象名. 的形式来访问,合法但不合理,不会报错,但会警告
一般是通过类名. 的形式来访问

public class Student {
    public String name;
    public int age;
    public static String classRoom;

    public static void main(String[] args) {
        Student student = new Student();
        student.age = 18;
        student.name = "zhangsan";
        Student.classRoom = "101-3";//通过类名+.来访问

    }
}

注意

** 不能在静态方法中访问任何非静态成员变量**

如下图,因为在静态方法中无法传递this引用

在这里插入图片描述

4.static成员变量的初始化

4.1就地初始化

就地初始化就是在创建静态成员变量时就对其进行初始化。

  public static String classRoom = "101-3";

4.2使用代码块初始化

关于代码块的知识,在文章下半部分进行讲解

5.关于main

main方法是由static所修饰的,理论上来说,main方法也可以时非静态的,设计成被static修饰是因为在底层调用main时,不需要实例化对象,较为便利。

二.代码块

概念

使用 {} 定义的一段代码称为代码块

代码块分为普通代码块,静态代码块,构造代码块,同步代码块
同步代码块在后续文章会进行讲解

1.普通代码块

普通代码块时定义在方法中的代码块

public class test {
    public static void main(String[] args) {
    //普通代码块
        {
            int x = 10;
            System.out.println("x1="+x);
        }
        int x = 20;
        System.out.println("x2="+x);
    }
}

在这里插入图片描述

2.构造代码块

构造代码块也叫实例代码块
实例代码块:定义在类中的代码块,一般用于初始化类成员变量

public class Dog {
    public String name;
    public int age;
    public String color;
    //构造代码块
    {
        this.name = "xiaohuang";
        this.age = 18;
        this.color = "yellow";
    }
    public static void main(String[] args) {
        Dog dog = new Dog();
        System.out.println(dog.name);
        System.out.println(dog.age);
        System.out.println(dog.color);
    }
}

在这里插入图片描述

3.静态代码块

静态代码块:由static修饰的代码块

public class Dog {
    public String name;
    public int age;
    public String color;
    public static String master;
    //构造代码块
    {
        this.name = "xiaohuang";
        this.age = 18;
        this.color = "yellow";
    }
    //静态代码块
    static {
        master = "郭";
    }
    public static void main(String[] args) {
        Dog dog = new Dog();
        System.out.println(dog.name);
        System.out.println(dog.age);
        System.out.println(dog.color);
    }
}

注意事项

①加载形式

实例代码块只有在创建对象时才会执行
静态代码块也是随着类的创建而创建,随着类的销毁而消失。

②加载顺序

当三个代码块全都在代码中存在时,静态代码块最先被加载,其次是构造代码块,最后是普通代码块

码字不易,感谢观看
如果对你有帮助的话,记得点赞👍评论+关注吧

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Visual Studio 2017附加依赖项

在读韩国人尹圣雨的《TCP/IP网络编程》,在书中教我如何在Visual Studio 2008中设置附加依赖项,但是我使用的是Visual Studio 2017,所以我写下这篇文章学习如何在Visual Studio 2017附加依赖项。 在项目这里选择属性。 选择输入这一项,然后点…

如何通过货架电子标签PTL灯光指引拣选优化仓库管理

物流仓储行业的不断发展和智能化技术的应用,仓库管理的效率和精度要求也日益提高。在这样的背景下,PTL亮灯拣选系统作为一种智能化设备,采用分布式管理结构,为仓库管理带来了新的可能性。 PTL亮灯拣选系统采用智能计算机作为主控设…

低代码工具的常见用例与受众市场

目录 一、低代码工具的常见用例是什么? 1.业务流程管理(BPM) 2.自定义应用程序开发 3.数据管理和分析 4.移动应用程序开发 二、低代码受众和市场 1.制造商 2.个人开发者/自由职业者 3.代理商 4.小型企业和初创企业 5.中型企业 6.营销团队 7.软…

Voice Control for ChatGPT简单高效的与ChatGPT进行交流学习。

快捷又不失灵活性 日常生活中,我们与亲人朋友沟通交流一般都是喜欢语音的形式来完成的,毕竟相对于文字来说语音就不会显的那么的苍白无力,同时最大的好处就是能解放我们的双手吧,能更快实现两者间的对话,沟通便更高效…

基于Java Web的在线教学质量评价系统的设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…

【数据结构】树与二叉树(五):二叉树的顺序存储(初始化,插入结点,获取父节点、左右子节点等)

文章目录 5.1 树的基本概念5.1.1 树的定义5.1.2 森林的定义5.1.3 树的术语5.1.4 树的表示 5.2 二叉树5.2.1 二叉树1. 定义2. 特点3. 性质引理5.1:二叉树中层数为i的结点至多有 2 i 2^i 2i个,其中 i ≥ 0 i \geq 0 i≥0。引理5.2:高度为k的二叉…

免费好用的网页采集工具软件推荐

在众多各具特色的采集器软件中,真正好用的采集器软件有哪些? 自己一个个去查找和尝试无疑会耗费大量的时间和精力。 因此,在深入体验大多数采集器后,给大家推荐几款优秀且好用的免费网页采集器软件。 本文将对这几款采集器进行…

【机器学习】梯度下降预测波士顿房价

文章目录 前言一、数据集介绍二、预测房价代码1.引入库2.数据3.梯度下降 总结 前言 梯度下降算法学习。 一、数据集介绍 波士顿房价数据集:波士顿房价数据集,用于线性回归预测 二、预测房价代码 1.引入库 from sklearn.linear_model import Linear…

如何处理 java.lang.NoClassDefFoundError

1. 问题背景 系统异常提示java.lang.NoClassDefFoundError: ch/qos/logback/classic/spi/ThrowableProxy 2.问题分析 了解NoClassDefFoundError含义 在开始解决这个问题之前,我们需要先了解一下java.lang.NoClassDefFoundError错误的含义。这个错误通常表示在运行…

借助 DevChat AI 之力,成就我之全栈梦想

何为 DevChat ? DevChat 是集好多种 AI 大模型的智能编程工具,可以大大增加我们上班摸鱼的时间。 整合了如 ChatGPT、Codex等热门 AI 模型支持自然语言编程、代码生成与编写、代码补全等功能因其集成热门 AI 智能,相当于站在了巨人的肩膀上&#xff0c…

琛蓝健康明星产品ClamBP™蛤蜊肽,调节血压的针对性方案

琛蓝健康明星产品ClamBP™蛤蜊肽,调节血压的针对性方案 高血压是现今社会最紧迫的公共卫生挑战之一,影响着全球约20%的成人人口。据《中国心血管健康与疾病报告2019》显示,中国高血压患者达2.45亿。长期高血压可引起心脏病、中风、肾功能减退…

Kibana Dashboard饼图展示keyword子字符串去重统计

日志内容 log.info("请求开始 uri: {} header RequestId:{}", request.getRequestURI(), reqId, request.getHeader("request_id"));操作步骤 进入Dashboard菜单 点击Create Dashboard按钮 点击Create Panel按钮 选择Aggregation based 然后选择Pie饼图 …

C#在.NET Windows窗体应用中使用LINQtoSQL

目录 一、新建Windows窗体应用并添加LINQtoSQL类 二、错误信息CS0234 三、添加扩展包让Windows窗体应用支持LINQtoSQL类 默认安装的背景下,新建的Windows窗体应用是不支持LINQtoSQL类的。现象是资源管理器里的依赖项中默认的安装不能自动生成支持system.data.lin…

触摸屏通过modbus转profinet网关连接PLC与变频器485modbus通讯案例

通过兴达易控modbus转profinet网关(XD-MDPN100)的桥接,数据可以以高速、可靠的方式从触摸屏传递到PLC,同时能够实现PLC对变频器的监控和控制。这四台变频器通过485modbus协议与PLC通讯,使得系统能够实现对变频器的高效…

AI系统源码ChatGPT网站源码+ai绘画系统/支持GPT4.0/支持Midjourney局部编辑重绘

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统,支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如…

信号的阻塞与递达

目录 阻塞信号 信号和相关概念 sigset_t 信号集 信号的保存与阻塞 第一个问题 第二个问题 第三个问题 信号的递达 信号递达 内核态与用户态 为什么可以从用户态到内核态 我们怎么知道现在是内核态还是用户态? 信号的处理 sigaction 可重入函数 vola…

Stable Diffusion源码调试(一)

Stable Diffusion源码调试(一) 个人模型主页:https://liblib.ai/userpage/369b11c9952245e28ea8d107ed9c2746/model Stable Diffusion版本:https://github.com/AUTOMATIC1111/stable-diffusion-webui/releases/tag/v1.4.1 调试t…

使用 CountDownLatch 实现多线程协作

目录 前言 在多线程编程中,经常需要实现一种机制来协调多个线程的执行,以确保某些操作在所有线程完成后再进行。CountDownLatch 就是 Java 并发包中提供的一种同步工具,它能够让一个或多个线程等待其他线程完成操作。 了解 CountDownLatch …

嵌入式软件工程师面试题——2025校招社招通用(十)

说明: 面试题来源于网络书籍,公司题目以及博主原创或修改(题目大部分来源于各种公司);文中很多题目,或许大家直接编译器写完,1分钟就出结果了。但在这里博主希望每一个题目,大家都要…

芯片无线升级,给产品和芯片买个保险

例如,想让卧室灯过于刺眼,需要稍微暗一个度。 目前来说常见的只能重新买了重新安装?! 可都已经安装的好的电灯,实在是食之无味,弃之可惜。 这时候产品不拆换,还可以升级就显得尤为重要了。 为了…