博客
关于我
java基础--static
阅读量:392 次
发布时间:2019-03-05

本文共 1929 字,大约阅读时间需要 6 分钟。

Java中的Static关键字详解

Static(静态)是Java中一个非常重要的概念,广泛应用于类成员变量、方法、代码块以及修饰修饰符中。以下将从多个维度深入探讨Static的相关知识点。

1. Static的概述

Static是Java中的一个修饰符,表示“静态”或“全局”属性。它用于修饰类成员变量、方法以及代码块。与非静态成员变量、方法不同,Static成员变量和方法可以被类的所有实例共享,不依赖于特定的实例存在。

2. Static代码块

Static代码块在类加载时会被自动执行,仅执行一次,与非静态代码块的执行顺序存在差异。非静态代码块会在每次对象创建时执行,而Static代码块则只在类首次加载时执行一次。

Static代码块与非静态代码块的区别
  • 执行时机:Static代码块在类加载时执行,非静态代码块在每次对象创建时执行。
  • 执行次数:Static代码块只执行一次,非静态代码块每次创建对象都会执行一次。
  • 定义位置:Static代码块可以定义在类中,而非静态代码块通常位于构造方法之前。
  • 使用场景:Static代码块用于初始化静态变量和执行一次性的静态逻辑操作。

3. Static与Final的区别

Static和Final是两个常见的修饰符,但它们的意义和作用截然不同。

Final的含义
  • 类不能被继承:Final类不能有子类,无法被继承。
  • 方法不能被覆盖:Final方法不能被子类方法覆盖。
  • 成员变量不能被改变:Final成员变量只能被赋值一次,赋值后不可变更。
  • 不能用于修饰构造方法:Final不能用于修饰类的构造方法。
  • 默认为Final:在类中定义的非静态方法默认为Final。
  • Static的含义
  • 全局性质:Static表示类成员变量和方法具有全局性,独立于类实例存在。
  • 与类相关:Static成员变量和方法可以通过类名访问,无需依赖特定的对象实例。
  • 多次访问效率高:Static成员变量和方法在类加载后可以多次访问,效率较高。
  • Static和Final的结合使用
    • Static Final:用于修饰那些既不依赖于实例也无法被修改的成员变量和方法。例如,常量字段可以被修饰为Static Final,因为它们在类加载后就被初始化并且不能被修改。

    4. Static变量的特点

  • 存储位置:Static变量存储在JVM的方法区中,与类相关。
  • 访问方式:可以通过类名直接访问,不依赖于对象实例。
  • 初始值要求:类变量需要在定义时进行初始化,否则会导致编译错误。
  • 5. Static方法的特点

  • 调用方式:可以通过类名直接调用,无需创建对象实例。
  • 执行时机:在类加载时会被JVM自动加载,并存储在方法区中以备用。
  • 6. Static方法与非静态方法的区别

    • 调用方式:Static方法可以通过类名调用,非静态方法只能通过对象实例调用。
    • 依赖性:Static方法不依赖于对象实例,非静态方法依赖于对象状态。
    • 执行频率:Static方法在类加载时执行一次,非静态方法每次对象创建时都会执行一次。

    7. Static变量与实例变量的区别

    • 存储位置:Static变量存储在方法区,实例变量存储在堆内存中。
    • 访问方式:Static变量可以通过类名访问,实例变量只能通过对象实例访问。
    • 初始值:Static变量必须在定义时初始化,实例变量可以通过构造器初始化或赋值。

    8. Static和Final的结合使用

    • Static Final:用于修饰那些既不依赖于实例也无法被修改的成员变量和方法。例如,常量字段可以被修饰为Static Final,因为它们在类加载后就被初始化并且不能被修改。

    9. Static代码块与非静态代码块的对比

    • 执行时机:Static代码块在类加载时执行,非静态代码块在每次对象创建时执行。
    • 执行次数:Static代码块只执行一次,非静态代码块每次创建对象都会执行一次。
    • 定义位置:Static代码块可以定义在类中,而非静态代码块通常位于构造方法之前。
    • 使用场景:Static代码块用于初始化静态变量和执行一次性的静态逻辑操作。

    10. Static与Java的内存管理

    • 静态变量的内存分配:Static变量存储在JVM的方法区中,与类相关,不随对象创建销毁。
    • 实例变量的内存分配:实例变量存储在堆内存中,每个对象实例都有自己的 copy。
    • 对象实例的内存分配:对象实例的内存分配由堆内存管理,对象的生命周期由引用决定。

    以上内容涵盖了Static关键字在Java中的核心概念,涵盖了Static代码块、Static变量、Static方法以及与Final修饰的结合使用等多个方面,希望对理解Java中的Static概念有所帮助。

    转载地址:http://spczz.baihongyu.com/

    你可能感兴趣的文章
    MySQL5.7.19-win64安装启动
    查看>>
    mysql5.7.19安装图解_mysql5.7.19 winx64解压缩版安装配置教程
    查看>>
    MySQL5.7.37windows解压版的安装使用
    查看>>
    mysql5.7免费下载地址
    查看>>
    mysql5.7命令总结
    查看>>
    mysql5.7安装
    查看>>
    mysql5.7性能调优my.ini
    查看>>
    MySQL5.7新增Performance Schema表
    查看>>
    Mysql5.7深入学习 1.MySQL 5.7 中的新增功能
    查看>>
    Webpack 之 basic chunk graph
    查看>>
    Mysql5.7版本单机版my.cnf配置文件
    查看>>
    mysql5.7的安装和Navicat的安装
    查看>>
    mysql5.7示例数据库_Linux MySQL5.7多实例数据库配置
    查看>>
    Mysql8 数据库安装及主从配置 | Spring Cloud 2
    查看>>
    mysql8 配置文件配置group 问题 sql语句group不能使用报错解决 mysql8.X版本的my.cnf配置文件 my.cnf文件 能够使用的my.cnf配置文件
    查看>>
    MySQL8.0.29启动报错Different lower_case_table_names settings for server (‘0‘) and data dictionary (‘1‘)
    查看>>
    MYSQL8.0以上忘记root密码
    查看>>
    Mysql8.0以上重置初始密码的方法
    查看>>
    mysql8.0新特性-自增变量的持久化
    查看>>
    Mysql8.0注意url变更写法
    查看>>