java中static关键字(尚未完善)

文章目录

  • static关键字
  • static可修饰
  • static方法举例
  • static代码块
  • 拓展
  • 其他链接

static关键字

  • 加载顺序
  • 类是构建对象的模板,一个类多个对象
  • static修饰的方法或者变量都属于类,类独有的

静态常量池

static可修饰

  • 修饰变量(属于类变量,被创建出来的所有对象共享)
  • 方法
    • static修饰的方法属于类,叫做静态方法
    • 在静态方法不能调用非静态方法(静态方法在调用时可能不存在对象实例,无法访问对象相关的成员变量或方法。如果静态方法需要访问非静态方法的功能,通常需要通过创建对象实例来调用非静态方法。)
    • 非静态方法调用静态方法
  • 块(一直都是放在main之前运行,可以用来优化程序)
    • 静态代码块(static block)是在类被加载时执行的一段代码块。它通常用于在类加载时进行一些初始化操作,具有以下好处:
      1. 初始化静态变量:静态代码块可以用于初始化静态变量。这些变量可以在类的任何地方被访问,而不需要创建类的实例。
      1. 执行静态方法:静态代码块可以包含调用静态方法的逻辑。这些方法可以执行一些初始化任务,例如读取配置文件或建立数据库连接。
      1. 异常处理:静态代码块还可以处理静态方法中可能抛出的异常。通过在静态代码块中捕获异常并进行处理,可以确保在类加载时不会因为异常而导致加载失败。
      1. 执行一次性任务:静态代码块中的代码仅在类加载时执行一次,因此它们适合用于执行一些只需在应用程序启动时执行一次的任务,例如初始化静态资源或设置全局变量。
      1. 提高代码可读性:将一些与类初始化相关的逻辑放在静态代码块中可以提高代码的可读性和可维护性,因为这些逻辑会被集中在一起,而不是分散在类的其他地方。
    • 总的来说,静态代码块是在类加载时执行的一段代码,它可以用于执行初始化操作、处理异常、执行一次性任务等,从而提高代码的效率、可读性和可维护性。

static方法举例

public class Example {
    private static int value;

    // 非静态方法
    public void setValue(int newValue) {
        value = newValue; // 可以直接访问静态变量
    }

    // 静态方法
    public static void printValue() {
        // 无法在静态方法中使用 this 关键字
        // this.setValue(10); // 错误!静态方法无法使用 this 关键字
        // System.out.println(this.value); // 错误!静态方法无法使用 this 关键字
    }

    public static void main(String[] args) {
        Example example = new Example();
        example.setValue(10); // 正确!通过对象实例调用非静态方法
        printValue(); // 正确!调用静态方法
    }
}

static代码块

public class Test1 {

    static{

        System.out.println("我是main之前的static");

    }

    {

        System.out.println("我仅仅是一个Person中的main之前代码块");

    }

    public static void main(String[] args) {
    
        new Test1();

        System.out.println("我是main");
        
    }

    static{

        System.out.println("我是main之后的static");

    }

    {

        System.out.println("我仅仅是一个Person中main之后代码块");

    }

}

//输出结果:
// 我是main之前的static
// 我是main之后的static
// 我仅仅是一个Person中的main之前代码块
// 我仅仅是一个Person中main之后代码块
// 我是main

拓展

静态常量池是 Java 虚拟机(JVM)中的一部分,它是存储类、方法和接口中使用的常量的内存区域。在编译 Java 程序时,所有的常量(如字符串文字、final 域的常量值等)都会被编译器放入到静态常量池中,然后在类加载的过程中被加载到内存中。
静态常量池具有以下特点:

  1. 存储位置:静态常量池存储在方法区(在 Java 8 及之前版本中)或元空间(在 Java 8 及之后版本中)中,与类的字节码一起被加载到内存中。
  2. 不同类型的常量:静态常量池可以包含各种类型的常量,如整型、浮点型、字符串、类和接口引用等。
  3. 共享和重用:静态常量池中的常量可以被多个类或方法引用,这样可以节省内存空间,并且提高了代码的重用性。
  4. 编译期间确定:静态常量池中的常量是在编译期间确定的,并且在运行时不会改变。
  5. 字符串常量池:字符串常量池是静态常量池的一部分,用于存储字符串字面量。字符串常量池具有特殊的重用性,相同的字符串字面量在常量池中只会存在一份副本,这样可以节省内存。
  6. 静态常量池是 Java 虚拟机中用于存储类、方法和接口中使用的常量的内存区域,它提供了共享和重用常量的机制,并在编译期间确定常量的值。

其他链接

java基础:java中的static关键字解析
Java的Static关键字的作用

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

极狐GitLab 如何在 helm 中恢复数据

本文作者:徐晓伟 GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署极狐GitLab。 本文主要讲述了如何在极狐GitLab …

mysql运维知识总结

1. 日志 1.1 错误日志 错误日志是 MySQL 中最重要的日志之一,它记录了当 mysqld 启动和停止时,以及服务器在运行过 程中发生任何严重错误时的相关信息。当数据库出现任何故障导致无法正常使用时,建议首先查看此日志。 该日志是默认开启的&…

Linux: 工具: tshark 抓到了收方向的ESP明文包?

根据这个描述,看着是正常的, 抓到包之后,可以方便的分析问题,省去在wireshark里解码的问题。 经过调查发现是内核将ESP解开之后,如果是tunnel模式,内核又重新将skb丢给了interface去做处理。这样tshark/tcp…

搭建Grafana+Prometheus监控Spring Boot应用

Spring项目改造 maven依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId> </dependency><dependency><groupId>io.micrometer</groupId><artif…

Linux服务器上搭建深度学习环境(安装anaconda、创建虚拟环境、安装pytorch)

Linux服务器的搭配 Linux服务器上安装anaconda创建虚拟环境linux上安装pytorchxshell连接服务器 Linux服务器上安装anaconda 链接 创建虚拟环境 参考教程&#xff1a;此处 linux上安装pytorch 链接 xshell连接服务器 链接

本地项目提交 Github

工具 GitIdeaGithub 账号 步骤 使用注册好的 Github 账号&#xff0c;登陆 Github&#xff1b; 创建 Repositories (存储库)&#xff0c;注意填写图上的红框标注&#xff1b; 创建完成之后&#xff0c;找到存储库的 ssh 地址或 https 地址&#xff0c;这取决于你自己的配置…

JRT判断数据是否存在优化

有一种业务情况类似下图&#xff0c;质控能做的项目是仪器关联的项目。这时候维护质控物时候开通项目时候要求加载仪器项目里面的项目&#xff08;没有开通的子业务数据的部分&#xff09;。对右边已经开通的部分要求加载仪器项目里面的项目&#xff08;有开通业务子数据的部分…

微信小程序使用iconfont

进入iconfont&#xff0c;添加至项目 进入项目&#xff0c;点击生成代码&#xff0c;或更新代码 点击打开样式 复制内容到小程序的style文件夹下 最后引入到app.wxss

鹅厂实习offer

#转眼已经银四了&#xff0c;你收到offer了吗# 本来都打算四月再投实习了&#xff0c;突然三月初被wxg捞了&#xff08;一年前找日常实习投的简历就更新了下&#xff09;&#xff0c;直接冲了&#xff0c;流程持续二十多天&#xff0c;结果是运气还不错&#xff0c;应该是部门比…

C# 之 Task、async和 await 、Thread 的简单整理

1、异步方法(async/await) 在 C# 5.0 中出现的 async 和 await &#xff0c;让异步编程变得更简单。 此方法利用了 .NET Framework 4.5 及更高版本、.NET Core 和 Windows 运行时中的异步支持。 编译器可执行开发人员曾进行的高难度工作&#xff0c;且应用程序保留了一个类似…

CAXA3D实体设计2022版 下载地址及安装教程

CAXA 3D是一款专业的实体设计软件&#xff0c;由中国软件公司CAXA开发。它提供了丰富的功能和工具&#xff0c;用于进行三维实体建模和设计。 CAXA 3D具备强大的建模和绘图功能&#xff0c;使用户能够创建复杂的三维实体模型。它支持多种建模方式&#xff0c;包括实体建模、曲…

智过网:报考中级注册安全工程师需要什么条件?

随着社会的快速发展和科技的日新月异&#xff0c;安全生产问题越来越受到人们的关注。中级注册安全工程师作为专业安全管理人才&#xff0c;其职责与角色日益凸显。那么&#xff0c;想要报考中级注册安全工程师&#xff0c;需要满足哪些条件呢&#xff1f; 首先&#xff0c;报考…

Spring Boot 入门指南:轻松上手图文教程

前言 什么是 Spring Boot&#xff1f; Spring Boot 是由 Pivotal 团队提供的全新框架。Spring Boot 是所有基于 Spring Framework 5.0 开发的项目的起点。Spring Boot 的设计是为了让你尽可能快的跑起来 Spring 应用程序并且尽可能减少你的配置文件。 设计目的&#xff1a; 用…

FreeRtos入门-10 裸机程序的不足

裸机的程序的框架 1&#xff09; 经典单片机程序 // 经典单片机程序 void main() {while (1){任务1();任务2();} } 缺点&#xff1a;任务1和任务2之间的互相影响 2&#xff09;前后台结构&#xff0c;前台&#xff1a;中断处理函数&#xff0c;后台main函数 void main()//后…

Training - 使用 WandB 配置 可视化 模型训练参数

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://blog.csdn.net/caroline_wendy/article/details/137529140 WandB (Weights&Biases) 是轻量级的在线模型训练可视化工具&#xff0c;类似于 TensorBoard&#xff0c;可以帮助用户跟踪…

使用Vivado Design Suite进行功率优化

功率优化是一个可选步骤&#xff0c;它通过使用时钟门控来优化动态功率。它既可以在Project模式下使用&#xff0c;也可以在Non-Project模式下使用&#xff0c;并且可以在逻辑优化之后或布局之后运行&#xff0c;以减少设计中的功率需求。功率优化包括Xilinx的智能时钟门控解决…

STM32F407+FreeRTOS+LWIP UDP组播

开发环境介绍&#xff1a; MCU&#xff1a;STM32F407ZET6 网卡&#xff1a;LAN8720A LWIP版本&#xff1a;V1.1.0 FreeRTOS 版本&#xff1a;V10.2.1 LAN8720A硬件原理图&#xff1a; 硬件连接说明&#xff1a; MII_RX_CLK/RMII_REF_CLK ------>PA1 …

吴恩达2022机器学习专项课程(一) 5.7 检测梯度下降是否收敛

问题预览/关键词 什么是梯度下降收敛&#xff1f;哪些方法可以检测梯度下降是否收敛&#xff1f;什么是学习曲线&#xff1f;曲线上升代表什么&#xff1f;什么原因造成的&#xff1f;如何检测梯度下降是否收敛&#xff1f;多少次迭代&#xff0c;梯度下降会收敛&#xff1f;什…

电商技术揭秘十六:电商中的实时分析与决策支持系统

相关系列文章 电商技术揭秘一&#xff1a;电商架构设计与核心技术 电商技术揭秘二&#xff1a;电商平台推荐系统的实现与优化 电商技术揭秘三&#xff1a;电商平台的支付与结算系统 电商技术揭秘四&#xff1a;电商平台的物流管理系统 电商技术揭秘五&#xff1a;电商平台…

C/C++的前置++、后置++以及前置--、后置--使用的详细讲解

在c/c语言中&#xff0c;变量的自增和自减经常被使用到&#xff0c;所以今天就来个详细讲解。本次讲解用到的语言是c语言&#xff0c;在c中的原理也是一样的。 变量自增自减分为四种情况&#xff0c;每种情况的结果都有所差异&#xff0c;四种情况分别为前置、后置、前置--、后…