JAVA面试题 static关键字详解

JAVA面试题 static关键字详解

在Java中,static是一种关键字(也称为修饰符),它可以修饰类、方法和变量。在这篇文章中,我们将详细讨论关于static关键字的使用、作用以及我们在面试中可能会遇到的相关问题。

一、static关键字的使用

1.1 类和方法

在Java中,我们可以使用static修饰一个类,使其变成静态类。静态类可以不需要实例化就可以直接访问,该类中的所有方法和变量都是静态的,也就是说,所有实例都共享相同的方法和变量,这与普通类不同。

public static class StaticClass {
    public static void staticMethod() {
        System.out.println("This is a static method.");
    }
}

同样,我们也可以使用static修饰一个方法,该方法可以直接使用类名调用,而不需要先实例化一个对象。和静态类一样,所有实例都共享相同的方法。

public class StaticMethod {
    public static void staticMethod() {
        System.out.println("This is a static method.");
    }
}

1.2 变量

在Java中,static修饰的变量也叫做"类变量",也就是说,该变量只有一份空间,在类加载时被分配,所有实例共享。此外,static变量可以在任何实例创建之前被访问。

public class StaticVariable {
    public static int staticVar = 0;
}

二、static关键字的作用

2.1 提高性能

由于静态变量存放在方法区中,在程序运行期间,只要一个静态变量被赋值,该变量的值将一直存在于方法区中,因此,可以通过使用静态变量来减少垃圾回收的次数,从而提高性能。

2.2 共享信息

所有实例通过使用static关键字共享相同的方法和变量,这意味着变量的状态或方法的行为在所有实例之间是相同的,这可以减少代码的复杂性和内存的使用率。

2.3 控制实例的数量

使用静态变量可以达到限制实例数量的目的,因为静态方法和变量可以在使用时被访问,而不需要创建类的实例,它们可以存在于类的定义中,并且在内存中只存在一份。

三、面试问题

3.1 static关键字有什么作用?

作为一个常见的面试问题,这个问题可能会涵盖到static关键字的所有用途,包括提高性能、共享信息以及控制实例的数量等。

3.2 static变量和实例变量的区别是什么?

static变量是一种类变量,因此只有一份空间存储,被所有实例共享。而实例变量需要在每个实例创建时分配空间,每个实例都有自己的实例变量。

例如,在下面的代码中,变量staticVar是静态变量,被所有实例共享,而变量nonStaticVar是实例变量,每个实例都有自己的变量:

public class MyClass {
    public static int staticVar = 0;
    public int nonStaticVar = 0;
}

3.3 static方法可以访问实例变量吗?

静态方法可以访问静态变量,但不能访问实例变量。因为静态方法是在类加载时创建的,它们可以在没有实例的情况下被访问。而实例变量必须在实例化后才能被访问。

例如,在下面的代码中,静态方法staticMethod可以直接访问静态变量staticVar,但不能访问实例变量nonStaticVar

public class MyClass {
    public static int staticVar = 0;
    public int nonStaticVar = 0;
    public static void staticMethod() {
        System.out.println(staticVar); // 可以访问
        System.out.println(nonStaticVar); // 不能访问
    }
}

四、示例说明

4.1 示例1

下面是一个使用static关键字的示例,其中静态变量sharedCount和静态方法incrementCount被用来统计类的实例数量:

public class Example1 {
    public static int sharedCount = 0;
    public Example1() {
        sharedCount++;
    }
    public static void incrementCount() {
        sharedCount++;
    }
}

我们可以通过代码Example1.incrementCount()来增加共享变量sharedCount的值。此外,我们也可以在代码中创建Example1的实例,以便每次创建实例时增加共享变量的值:

Example1 obj1 = new Example1();
Example1 obj2 = new Example1();
Example1 obj3 = new Example1();

在上面的代码中,每次创建Example1的实例时,共享变量sharedCount的值都会加1。

4.2 示例2

下面是一个使用static关键字的示例,其中静态方法loadProperties从一个配置文件中加载属性:

public class Example2 {
    private static Properties properties = null;
    static {
        loadProperties();
    }
    public static void loadProperties() {
        properties = new Properties();
        try {
            FileInputStream in = new FileInputStream("config.properties");
            properties.load(in);
            in.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

在上面的代码中,loadProperties方法在类加载时通过静态代码块调用,从配置文件中加载属性。

我们可以通过代码Example2.properties.getProperty("myProperty")来获取加载的属性。

五、总结

本文介绍了static关键字及其用法,包括静态类、静态方法和静态变量。我们一起讨论了静态关键字的作用,包括提高性能、共享信息和控制实例的数量。最后,我们讨论了可能在面试中遇到的问题以及两个示例,以帮助您更好地理解静态关键字及其用法。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JAVA面试题 static关键字详解 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • js实现用户离开页面前提示是否离开此页面的方法(包括浏览器按钮事件)

    实现用户离开页面前提示是否离开此页面的方法通常使用beforeunload事件。该事件会在用户关闭或离开页面前触发。在这个事件中,你可以弹出一个提示框,询问用户是否确认离开页面。下面是具体的实现步骤: 1. 监听beforeunload事件 首先,在 JavaScript 代码中添加如下代码来监听beforeunload事件: window.addEvent…

    JavaScript 2023年6月11日
    00
  • JavaScript中this函数使用实例解析

    JavaScript中this函数使用实例解析 简介 JavaScript中this关键字是一个很重要的概念,因为它能够让我们在函数中引用当前对象,从而处理一些复杂的逻辑。但是,由于JavaScript的this关键字的指向并不总是我们想象中的那样,因此在使用时需要仔细考虑。本文结合示例代码,详细讲解this的使用。 this关键字的指向 在JavaScri…

    JavaScript 2023年6月11日
    00
  • 自己写一个uniapp全局弹窗(APP端)

    下面是详细讲解如何自己写一个uniapp全局弹窗(APP端)的完整攻略。 1. 准备工作 在开始之前,需要先确定以下几点: 确定弹窗的样式和内容,包括弹窗的尺寸、背景色、字体等; 确定弹窗的触发方式,比如是否需要点击按钮或者触发特定事件; 确定弹窗的位置,比如是否需要固定在屏幕底部或者居中展现。 2. 实现步骤 实现全局弹窗的基本步骤如下: 在 App.vu…

    JavaScript 2023年6月11日
    00
  • JS hasOwnProperty()方法检测一个属性是否是对象的自有属性的方法

    JS中的hasOwnProperty()方法是用来检测一个属性是否是某个对象的自有属性的方法。它是基于原型链的继承机制的,只有当所查询的属性是对象本身的属性时才会返回true。 语法: object.hasOwnProperty(prop) 其中object是必需的,表示要检查属性的对象,prop参数也是必需的,表示要检查的属性名称,传入的参数是字符串类型。…

    JavaScript 2023年6月10日
    00
  • javascript使用中为什么10..toString()正常而10.toString()出错呢

    这是一个有趣的问题,事实上,10..toString() 和 10.toString() 演示的两种方法是不同的。 在 JavaScript 中,要调用对象的方法,我们通常使用点符号将对象与方法名称连接,例如 object.method()。然而,数字直接量(例如 10)之后的点符号(”.”) 会被 JavaScript 解释为带有小数的数字,因此解释器会尝…

    JavaScript 2023年5月18日
    00
  • javascript题目,重写函数让其无限相加

    当我们看到“重写函数让其无限相加”这个题目时,第一时间想到的就是递归。递归是指函数直接或间接地调用自身。使用递归可以很方便地实现一个无限相加的函数。 下面是一个实现步骤的完整攻略: 1. 定义函数 首先,我们需要定义一个函数,函数名为add,参数为无限个数字,返回值为一个函数。 function add() { let args = Array.protot…

    JavaScript 2023年6月11日
    00
  • javascript计算对象长度的方法

    当我们需要计算JavaScript对象的长度时,可能会遇到一些困惑。在JavaScript中,通常使用对象字面量(例如{})或构造函数创建对象。计算对象字面量和构造函数对象长度的方法略有不同。 计算对象字面量数量的方法 计算对象字面量数量的一种常见方法是使用Object.keys()方法。它会返回对象中属性名称的数组。通过计算该数组的长度,我们可以得知对象字…

    JavaScript 2023年5月27日
    00
  • JS文件中加载jquery.js的实例代码

    加载jQuery库之前,必须先安装jQuery文件。jQuery可以从官网 https://jquery.com/download/ 下载。我们下载完jquery.js文件之后,需要在HTML的标签内引用这个jquery.js文件。下面是详细操作步骤: 步骤1:从官网下载jQuery文件 打开 https://jquery.com/download/ 网站,…

    JavaScript 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部