博客
关于我
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 in 太多过慢的 3 种解决方案
    查看>>
    Mysql Innodb 锁机制
    查看>>
    MySQL InnoDB中意向锁的作用及原理探
    查看>>
    MySQL InnoDB事务隔离级别与锁机制深入解析
    查看>>
    Mysql InnoDB存储引擎 —— 数据页
    查看>>
    Mysql InnoDB存储引擎中的checkpoint技术
    查看>>
    Mysql InnoDB存储引擎中缓冲池Buffer Pool、Redo Log、Bin Log、Undo Log、Channge Buffer
    查看>>
    MySQL InnoDB引擎的锁机制详解
    查看>>
    Mysql INNODB引擎行锁的3种算法 Record Lock Next-Key Lock Grap Lock
    查看>>
    mysql InnoDB数据存储引擎 的B+树索引原理
    查看>>
    mysql innodb通过使用mvcc来实现可重复读
    查看>>
    mysql interval显示条件值_MySQL INTERVAL关键字可以使用哪些不同的单位值?
    查看>>
    Mysql join原理
    查看>>
    mysql order by多个字段排序
    查看>>
    MySQL Order By实现原理分析和Filesort优化
    查看>>
    mysql problems
    查看>>
    mysql replace first,MySQL中处理各种重复的一些方法
    查看>>
    MySQL replace函数替换字符串语句的用法(mysql字符串替换)
    查看>>
    Mysql Row_Format 参数讲解
    查看>>
    mysql select, from ,join ,on ,where groupby,having ,order by limit的执行顺序和书写顺序
    查看>>