【Java|基础篇】详解static关键字和代码块

news2024/12/24 21:29:39

文章目录

  • 1.前言
  • 2.static关键字
    • 2.1 static修饰成员变量
    • 2.2 static修饰成员方法
  • 3. 代码块
    • 3.1 普通代码块
    • 3.2 静态代码块
    • 3.3 构造代码块
  • 4.总结

1.前言

本文主要讲解static关键字以及代码块的执行顺序以及各部分代码块的作用.

2.static关键字

Java中的static关键字是用来修饰类成员(静态成员)的,可以用来修饰静态变量、静态方法和静态代码块。

2.1 static修饰成员变量

先来看这段代码:

public class Student {
    public String id;
    public String name;
    // static 修饰的成员变量
    public static String major = "软件工程";
    public Student(String id, String name) {
        this.id = id;
        this.name = name;
   }
}

在这里插入图片描述
static修饰成员变量有三个特点:

  1. 静态成员属于类,而不是属于实例,因此可以通过类名直接访问。
  2. 静态成员在类被加载时就被初始化,不需要创建类的实例。
  3. 静态成员被所有实例共享,可以用来存储类级别的信息。

简单来说就是 虽然可以通过实例化的对象来访问 static修饰的成员变量,但是不推荐这么使用. static修饰的成员变量也成为类成员. 推荐使用类名.的方式进行访问. 通过类名.的方式访问也就说明了static修饰的成员变量在类被加载时就被初始化,不需要创建类的实例. student1和student2都有major 这个成员变量,说明 静态成员被所有实例共享.

小结:使用static关键字修饰的变量称为静态变量,也叫类变量。静态变量属于类,而不是属于实例。静态变量的值被所有类实例共享,可以通过类名直接访问。可以在类的任何方法中访问静态变量,不需要创建类的实例。

2.2 static修饰成员方法

1.静态方法只能访问静态成员
在这里插入图片描述
在图中我们能到看name没有被static修饰,因此在被static修饰的方法func中报错了.

2.静态成员方法只能访问静态的成员方法
在这里插入图片描述
由图中可以看到在func中调用func3方法报错了. 因此静态成员方法只能访问静态的成员方法
3.静态成员方法属于类
在这里插入图片描述
静态方法属于类,因此也可以通过类名.的方式进行访问

其实还有一点,静态方法无法重写,不能用来实现多态,这一点会在多态中讲解.

小结: 使用static关键字修饰的方法称为静态方法,也叫类方法。静态方法属于类,而不是属于实例。静态方法可以直接通过类名访问,不需要创建类的实例。静态方法只能访问静态变量或调用其他静态方法。

3. 代码块

代码块是指一段被大括号包围的代码片段,用于组织代码和限制变量作用域

3.1 普通代码块

普通方法块直接使用{}定义
示例:

    public static void main(String[] args) {
        {
            int x = 20;
            System.out.println(x);
        }
        int x = 10;
        System.out.println(x);
    }
    // 输出结果:
    // 20
	// 10

这种用法很少,了解即可

3.2 静态代码块

使用static定义的代码块称为静态代码块。一般用于初始化静态成员变量

public class Student {
    public String id;
    public String name;
    public static String major;

    static {
        major = "软件工程";
        System.out.println("执行了 静态代码块");
    }
}

在这里插入图片描述
静态代码块不管生成多少个对象,其只会执行一次

3.3 构造代码块

构造块:定义在类中的代码块(不加修饰符)。也叫实例代码块。构造代码块一般用于初始化实例成员变量。
示例:
Student类

public class Student {
    public String id;
    public String name;

    {
        this.id = "1";
        this.name = "张三";
    }

    @Override
    public String toString() {
        return "Student{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                '}';
    }
}
    public static void main(String[] args) {
        Student student = new Student();
        System.out.println(student.toString());
    }

运行结果:
在这里插入图片描述

代码块使用时的注意事项:

  1. 静态代码块不管生成多少个对象,其只会执行一次
  2. 如果一个类中包含多个静态代码块,在编译代码时,编译器会按照定义的先后次序依次合并
  3. 实例代码块只有在创建对象时才会执行

来看一下代码块的执行顺序:

public class Demo {
    private static int x = 1;
    private int y = 2;

    static {
        System.out.println("静态代码块1,x=" + x);
        x = 10;
    }

    {
        System.out.println("实例代码块1,x=" + x + ", y=" + y);
        y = 20;
    }

    public Demo() {
        System.out.println("构造函数,x=" + x + ", y=" + y);
        y = 30;
    }

    static {
        System.out.println("静态代码块2,x=" + x);
        x = 100;
    }

    {
        System.out.println("实例代码块2,x=" + x + ", y=" + y);
        y = 40;
    }
    public static void main(String[] args) {
        Demo demo1 = new Demo();
        Demo demo2 = new Demo();
    }
}

在这里插入图片描述
代码块的执行顺序:

  1. 先执行静态的(加载了类就会执行),且只会执行一次.如果有多个静态代码块,看定义的顺序
  2. 其次执行实例代码块,有多个时看定义的顺序
  3. 构造方法执行

4.总结

static关键字可以用来定义类级别的变量、方法和代码块,通过类名直接访问静态成员变量和静态成员方法. 而代码块的执行顺序以及各部分代码块的作用也很重要.

感谢你的观看!希望这篇文章能帮到你!
专栏: 《从零开始的Java学习之旅》在不断更新中,欢迎订阅!
“愿与君共勉,携手共进!”
在这里插入图片描述

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

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

相关文章

hive函数02

hive函数02 窗口函数 窗口函数(Window functions )也叫做开窗函数、OLAP函数,其最大特点是∶输入值是从SELECT语句的结果集中的一行或多行的“窗口”中获取的。 窗口函数可以简单地解释为类似于聚合函数的计算函数,但是通过GROUP BY子句组合…

jenkins 常见问题汇总

1、win11 节点(Error: Unable to access jarfile slave.jar) jenkins 默认cd 进入到设置的目录下面,如果不是C盘的话,直接cd 进入不了其他盘,所以,需要在命令前面,加参数进入到对应盘符。eg:E:…

pandas1

pandas pandas 的核心是:‘Series’、‘DataFrame’、Index’三个类型 1. 创建DataFrame对象 1.1 通过二维数组创建 scores np.random.randint(60,101,(5,3)) scoresarray([[ 91, 87, 87],[100, 80, 61],[ 76, 84, 80],[ 81, 97, 69],[ 67, 77, 65]]…

如何查看SSL证书的有效期?(中科三方)

SSL证书能够对数据传输进行加密处理,对网站的真实性进行核验,是网站提升数据安全能力的重要手段,现在已经有越来越多的网站开始安装SSL证书。但为了保障加密技术的快速更新,SSL证书的有效期逐渐缩短,而一旦SSL证书失效…

【腾讯云 Finops Crane 集训营】心得体会

【腾讯云 Finops Crane 集训营】心得体会 一直在关注技术社区的活动,希望看到更多的新技术,最近在逛 CSDN 的过程中,让我有机会参加了腾讯云的 Finops Crane 开源项目的第一季活动,从而深入了解了这个项目。Crane是一种云资源分析…

PMP常考知识点整理

1十大知识领域之项目整合管理 ❒ 变更控制流程(简化版) 书面记录变更请求→分析影响→提交CCB进行审批→批准或者拒绝→若批准,先修改计划(体现变更),再通知变更受影响相关方,最后再执行、追踪…

【PCIE720】 基于PCIe总线架构的高性能计算(HPC)硬件加速卡

板卡概述 PCIE720是一款基于PCI Express总线架构的高性能计算(HPC)硬件加速卡,板卡采用Xilinx的高性能28nm 7系列FPGA作为运算节点,在资源、接口以及时钟的优化,为高性能计算提供卓越的硬件加速性能。板卡一共具有5个F…

Linux---文件操作命令(find、which、read)

1. find命令 find [路径] [参数] 要查找的目录路径,可以是一个目录或文件名,也可以是多个路径,多个路径之间用空格分隔,如 果未指定路径,则默认为当前目录。 可选参数,用于指定查找的条件,可…

day37_JQuery

今日内容 零、 复习昨日 一、JQuery 零、 复习昨日 正则 匹配,筛选字符串[0-9a-zA-ZA-z\d\w]*?{3}{4,}{5,10}^$reg.test(字符) jquery js封装的库,封装js操作,可以用来操作事件,dom,动画,ajax$("#id") $("element") $(".class")$("选择器…

chatgpt赋能Python-pythonwhile遍历

Python中使用while循环遍历的优势 Python是一种高级语言,广泛用于Web开发、数据科学、人工智能等方面。Python提供了多种循环结构,其中while循环是一种非常常用的遍历方式。在本篇文章中,我们将介绍如何在Python中使用while循环遍历&#xf…

A2L文件的自动生成(Simulink/CANape)

目录 什么是A2L文件? 使用simulink生成A2L文件 A2L文件组成 characteristic measurement compu_method group simulink生成的A2L与CANape生成的A2L 如何自动修改simulink生成A2L文件使其适用于CANape? 所需文件 什么是A2L文件? A2…

27 KVM管理系统资源-管理虚拟CPU份额

文章目录 27 KVM管理系统资源-管理虚拟CPU份额27.1 概述27.2 操作步骤 27 KVM管理系统资源-管理虚拟CPU份额 27.1 概述 虚拟化环境下,同一主机上的多个虚拟机竞争使用物理CPU。为了防止某些虚拟机占用过多的物理CPU资源,影响相同主机上其他虚拟机的性能…

什么是数字化校园,校园怎么数字化?

教育数字化转型是目前教育领域的一个热门话题,那么到底什么是教育数字化转型?如何做好教育数字化转型?这就来回答一下! 阅读本文你将了解: 什么是教育数字化转型?零代码平台如何撬动教育数字化转型&#…

真别去阿里面试,6年测开经验的真实面试经历.....

前几天我朋友跟我吐苦水,这波面试又把他打击到了,做了快6年软件测试员。。。为了进大厂,也花了很多时间和精力在面试准备上,也刷了很多题。但题刷多了之后有点怀疑人生,不知道刷的这些题在之后的工作中能不能用到&…

Linux·eventfd 原理与实践

1. eventfd/timerfd 简介 目前越来越多的应用程序采用事件驱动的方式实现功能,如何高效地利用系统资源实现通知的管理和送达就愈发变得重要起来。在Linux系统中,eventfd是一个用来通知事件的文件描述符,timerfd是的定时器事件的文件描述符。…

防火墙(三)

firewalld防火墙 一、firewalld概述firewalld与iptables的区别firewalld区域firewalld数据处理流程 二、firewalld防火墙的使用配置方法常用的firewalld-cmd命令选项 三、操作小实验 一、firewalld概述 firewalld防火墙是Centos 7 系统默认的防火墙管理工具,取代了…

AWS设备自定义身份认证

AWS设备自定义身份认证需要通过lambda服务实现,具体来说,首先需要创建一个lambda函数,在函数中实现具体的认证逻辑,然后Iot在调用授权方时,将触发lambda函数,返回认证结果。 1.输入参数说明 授权方在调用…

Qt编程基础 | 使用VS创建空白Qt项目

一、使用VS创建空白Qt项目 使用VS创建空白Qt项目&#xff0c;如下&#xff1a; 步骤一&#xff1a;新建一个空白Qt项目 步骤二&#xff1a;手动添加需要的文件 头文件代码&#xff0c;如下&#xff1a; #include <QtWidgets/QApplication> #include <QWidget>int…

C++11 异常

文章目录 &#x1f356;异常是什么&#x1f32d;概念&#x1f32d;实现方式 &#x1f356;异常的使用和注意事项&#x1f32d;注意事项&#x1f32d;异常的重新抛出&#x1f32d;异常安全 &#x1f356;异常的规范&#x1f356;异常带来的优缺点 &#x1f356;异常是什么 &…

jQurey-基本知识点总结

&#xff08;一&#xff09;jQurey基础知识 1、官网下载&#xff1a;jQuery jQurey是一个js文件&#xff0c;直接存到项目文件中&#xff0c;然后跟平常文件js导入一致&#xff1a; <script src"js/jquery-3.7.0.js"></script> 2、jQurey语法 jQure…