博客
关于我
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/

    你可能感兴趣的文章
    mysql 不区分大小写
    查看>>
    mysql 两列互转
    查看>>
    MySQL 中开启二进制日志(Binlog)
    查看>>
    MySQL 中文问题
    查看>>
    MySQL 中日志的面试题总结
    查看>>
    MySQL 中随机抽样:order by rand limit 的替代方案
    查看>>
    MySQL 为什么需要两阶段提交?
    查看>>
    mysql 为某个字段的值加前缀、去掉前缀
    查看>>
    mysql 主从 lock_mysql 主从同步权限mysql 行锁的实现
    查看>>
    mysql 主从互备份_mysql互为主从实战设置详解及自动化备份(Centos7.2)
    查看>>
    mysql 主键重复则覆盖_数据库主键不能重复
    查看>>
    Mysql 优化 or
    查看>>
    mysql 优化器 key_mysql – 选择*和查询优化器
    查看>>
    MySQL 优化:Explain 执行计划详解
    查看>>
    Mysql 会导致锁表的语法
    查看>>
    mysql 使用sql文件恢复数据库
    查看>>
    mysql 修改默认字符集为utf8
    查看>>
    Mysql 共享锁
    查看>>
    MySQL 内核深度优化
    查看>>
    mysql 内连接、自然连接、外连接的区别
    查看>>