当前位置: 首页 > 面试题库 >

static关键字在Java中如何工作?

鲁斯伯
2023-03-14
问题内容

我从一开始就阅读Java教程,并且static对字段或变量上的关键字有疑问。如这里Java所说:

Class Variables (Static Fields)
类变量是使用static修饰符声明的任何字段;这告诉编译器,无论该类被实例化了多少次,该变量确实存在一个副本。可以将定义特定类型自行车的齿轮数的字段标记为静态,因为从概念上讲,相同数量的齿轮将应用于所有情况。

这样,我想如果您有一个对象(在这种情况下,该类是一个实例Bicycle),并且在其中有一个字段,static则与您是否喜欢bicycle1or
无关bicycle2,它的静态字段将具有相同的字段值。我是错了还是我很了解?

我的意思是,如果我有:

Bicycle bicycle1 = new Bicycle();
Bicycle bicycle2 = new Bicycle();

在课堂上,Bicycle我有一个static类似的字段:

class Bicycle{
   static int gears;

   //Methods to set and get gears
}

在中,bicycle1我将齿轮的值设置为7:

bicycle1.setGears(7);

那么如果我尝试获取齿轮的值,bicycle2我应该得到与设置的值相同的对bicycle1吧?

System.out.println(bicycle2.getGears()); //7

好吧,这就是我所怀疑的地方,因为正如Java我上面引述中所说:

这告诉编译器该变量确实存在一个副本

此副本存储在哪里?对象如何访问该副本?该副本何时创建?


问题答案:

此副本存储在哪里?

副本(静态变量)存储在“永久生成”部分中,但是如果使用Java8,则“永久生成”部分将不再存在。静态变量和静态方法是反射数据的一部分,它们是与类相关的数据,与实例无关。

对象如何访问该副本?

您创建的类(对象)的每个实例都有对该类的引用。

该副本何时创建?

它是在加载类时在运行时创建的:这是在首次引用该类时由JVM的类加载器完成的。

静态变量属于该类,而不属于该类的实例。 您的直觉是正确的-无论创建多少对象,您只有一个副本。

您可以使用类的名称访问静态变量,如以下示例所示:

class Static {

    static int staticField;

}

public class UseStatic {

    public static void main(String[] args) {

        System.out.println(Static.staticField);

    }
}

静态字段对于创建某种类常量很有用。

最后,要轻松初始化特定类的静态字段,可以使用静态初始化块。

资料来源 :Java大学课程,Java官方文档



 类似资料:
  • 主要内容:静态变量,静态方法,静态代码块在类中,使用 static 修饰符修饰的属性(成员变量)称为静态变量,也可以称为类变量,常量称为静态常量,方法称为静态方法或类方法,它们统称为 静态成员,归整个类所有。 静态成员不依赖于类的特定实例,被类的所有实例共享,就是说 static 修饰的方法或者变量不需要依赖于对象来进行访问,只要这个类被加载, Java 虚拟机就可以根据类名找到它们。 调用静态成员的语法形式如下: 注意: static

  • 本文向大家介绍详解java中的static关键字,包括了详解java中的static关键字的使用技巧和注意事项,需要的朋友参考一下 Java中的static关键字可以用于修饰变量、方法、代码块和类,还可以与import关键字联合使用,使用的方式不同赋予了static关键字不同的作用,且在开发中使用广泛,这里做一下深入了解。 静态资源(静态变量与静态方法) 被static关键字修饰的变量和方法统一属

  • 本文向大家介绍JAVA Static关键字的用法,包括了JAVA Static关键字的用法的使用技巧和注意事项,需要的朋友参考一下 static关键字的作用: 用来修饰成员变量和方法,被修饰的成员是属于类的,而不单单是属于某个对象的,也就是说,可以不靠对象来调用。 首先我们来介绍类变量 当static修饰成员变量时,该变量称为类变量,该类的每个对象都共享同一个类变量的值,任何 对象都可以更改该变量

  • 本文向大家介绍浅谈Java中static关键字的作用,包括了浅谈Java中static关键字的作用的使用技巧和注意事项,需要的朋友参考一下 static关键字主要有两种作用: 第一,为某特定数据类型或对象分配单一的存储空间,而与创建对象的个数无关。 第二,实现某个方法或属性与类而不是对象关联在一起 具体而言,在Java语言中,static主要有4中使用情况:成员变量、成员方法、代码块和内部类 (1

  • 本文向大家介绍java中static关键字用法详解,包括了java中static关键字用法详解的使用技巧和注意事项,需要的朋友参考一下 前言 static对我们来说并不陌生,也是面试经常碰到的问题,今天抽空整理了一篇总结作为笔记保存起来! static用法可以分为三大块:静态变量、静态方法、静态代码块,下面将从这三个方面分析 静态方法 通常在一个类中定义一个方法为static,即为静态方法,无需本

  • 本文向大家介绍“ this”关键字在JavaScript中如何工作?,包括了“ this”关键字在JavaScript中如何工作?的使用技巧和注意事项,需要的朋友参考一下 在JavaScript中,此关键字用作引用,以引用执行的代码的对象或主题。 示例