static关键字

简介: static关键字

作者简介: zoro-1,目前大一,正在学习Java,数据结构

作者主页: zoro-1的主页

欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖

被static修饰意味什么

在Java中,被static修饰的成员,称之为静态成员,也可以称为类成员,其不属于某个具体的对

象,是所有对象所共享的。

static修饰成员变量

  1. 1.不属于某个具体的对象,是类的属性,所有对象共享的,不存储在某个对象的空间中
  2. 2.既可以通过对象访问,也可以通过类名访问,但一般更推荐使用类名访问,本类中直接调用
  3. 3.类变量存储在方法区当中
  4. 4.生命周期伴随类的一生(即:随类的加载而创建,随类的卸载而销毁)

static修饰成员方法

  1. 1.不属于某个具体的对象,是类方法
  2. 2.可以通过对象调用,也可以通过类名.静态方法名(…)方式调用,更推荐使用后者
  3. 3.不能在静态方法中访问任何非静态成员变量和非静态方法(没有this参数,除非在方法中实例化对象,才被调用)

代码块调用顺序

Java代码块的执行顺序如下:

1.静态代码块:当类被加载时,静态代码块会被执行,且只会被执行一次。

2.实例代码块:每次创建类的实例时,实例代码块都会被执行,并且在构造方法之前执行。

3.构造方法:在实例代码块执行之后,构造方法会被执行。

4.普通代码块:在方法中定义的普通代码块会在方法调用时被执行。

代码例子

class Parent {
    static { // 父类静态代码块
        System.out.println("父类静态代码块");
    }
    {       // 父类初始化块
        System.out.println("父类初始化块");
    }
    public Parent() { // 父类构造方法
        System.out.println("父类构造方法");
    }
}
class Child extends Parent {
    static { // 子类静态代码块
        System.out.println("子类静态代码块");
    }
    {       // 子类初始化块
        System.out.println("子类初始化块");
    }
    public Child() { // 子类构造方法
        System.out.println("子类构造方法");
    }
}
public class Test {
    public static void main(String[] args) {
        Child child = new Child();
    }
}

输出结果为:

父类静态代码块
子类静态代码块
父类初始化块
父类构造方法
子类初始化块
子类构造方法

从输出结果可以看出,首先执行父类的静态代码块(因为父类在子类之前加载),然后执行子类的静态代码块,接着执行父类的初始化块和构造方法,最后执行子类的初始化块和构造方法。

小思考

为什么普通成员方法可以直接访问非静态变量,而静态方法不能直接访问非静态变量?

  1. 1.静态方法和静态变量在类初始化时已经分配内存,已经存在,因此随时可以调用。
  2. 2.非静态方法和非静态变量在类初始化时不存在,只有类实例化成对象时才分配内存而存在

  3. 今天的分享到这里就结束了,感谢大家支持,创作不易,希望大家能给博主个三连,
目录
相关文章
|
编译器 C语言 C++
【C语言】realloc()函数详解(动态内存开辟函数)
【C语言】realloc()函数详解(动态内存开辟函数)
331 0
|
JavaScript
JS设置日期为0时0分0秒
项目中经常要给设置默认值,搜索从哪天开始,这时候,如果直接通过new Date()来获取时间,会有时分秒,如果快速设置为0时0分0秒?
595 0
|
Rust JavaScript 前端开发
【Rust 实战】Rust 与 Wasm
【Rust 实战】Rust 与 Wasm
2711 0
【Rust 实战】Rust 与 Wasm
|
Docker 容器
【registry】docker 私有仓库实现https 访问
【registry】docker 私有仓库实现https 访问
1779 2
【registry】docker 私有仓库实现https 访问
Mgo
|
存储 SQL Kubernetes
可观测性革命 - 揭秘OpenObserve开源高性能云原生平台
本文分析OpenObserve 以及其在可观测性方面如何帮助您构建更好的软件并节省观测成本
Mgo
2037 0
|
8月前
|
存储 算法 安全
企业员工数据泄露防范策略:基于 C++ 语言的布隆过滤器算法剖析[如何防止员工泄密]
企业运营过程中,防范员工泄密是信息安全领域的核心议题。员工泄密可能致使企业核心数据、商业机密等关键资产的流失,进而给企业造成严重损失。为应对这一挑战,借助恰当的数据结构与算法成为强化信息防护的有效路径。本文专注于 C++ 语言中的布隆过滤器算法,深入探究其在防范员工泄密场景中的应用。
191 8
|
9月前
|
人工智能 Java 程序员
一文彻底搞定C语言的表达式和语句
本文介绍了C语言中的表达式和语句,涵盖算术、关系等表达式及各类语句的用法,帮助初学者理解核心概念。本文介绍C语言表达式(算术、关系等)和语句(表达式、复合、控制、函数、空语句),助你掌握核心概念。
739 0
一文彻底搞定C语言的表达式和语句
|
JavaScript 前端开发 算法
对比一下Vue2 和 Vue3?—— 8个方面给你答案
本文介绍了 Vue 和 React 的起源、核心思想、表现形式、API 差异、社区差异、升级方向、响应式原理、Diff 算法、事件机制,并进行了总结。Vue 以其渐进式框架设计和简洁性著称,而 React 则强调单向数据流和灵活性。两者均支持组件化开发和虚拟 DOM,适用于不同的开发场景。
243 0
对比一下Vue2 和 Vue3?—— 8个方面给你答案
|
前端开发 架构师 算法
技术一号位的方法论《个人篇》——人成长的本质以及如何构建个人成长路线图
不论你是职场新人还是35岁的职场“老人”,成长是每个职场人都绕不开的话题,同时也是贯穿每个人职业生涯的痛点。本文主要帮助读者建立起对个人成长的认知,然后在此认知的基础上让大家理解成长的本质,最终通过文章的引导,来帮助读者完成个人成长路线图的确定以及落地实践。
13948 3
技术一号位的方法论《个人篇》——人成长的本质以及如何构建个人成长路线图
|
存储 关系型数据库 MySQL
用户案例合集 | 物联网平台的时序数据处理难点与优化实践
本文汇总了四个典型的物联网平台的实践经验,把它们曾面临的数据难题以及解决思路分享给大家。
524 0