Kotlin 中的 Java 静态方法等价物是什么?

在 Java 中,“static”关键字用于高效的内存管理。一旦变量或方法被声明为static,那么 JVM 将只为这些变量分配一次内存。通常静态变量用于声明一个的公共属性,例如“机构名称”。在下面的示例中,我们将看到如何使用static关键字。

使用 Java 的静态示例

为了演示静态在 Java 中的工作原理,我们将访问我们的在线 Java 编译器并创建一个测试类。在Test内部,我们将尝试创建一个静态变量和一个静态方法,我们将访问它们而不创建任何对象。

示例

public class Test
{
   static int myStaticVariable = 10;
   //静态方法
   static void staticMethod()
   {
      System.out.println("www.nhooo.com");
   }

   public static void main(String[] args)
   {

      //在不创建的情况下访问静态方法和变量
      //Test 类的任何对象
      staticMethod();
      System.out.println("Accessing Static variable-"+myStaticVariable);
   }
}
输出结果

执行代码后,它将生成以下输出 -

$javac Test.java
$java -Xmx128M -Xms16M Test
www.nhooo.com
Accessing Static variable-10

Kotlin 中 Java 静态方法的等价物

在 Kotlin 中,我们没有static关键字。在本文中,我们将学习如何使用 Kotlin 库中可用的不同关键字来实现相同的内存管理。目标是实现一个不同的 Kotlin 库函数来选择一个条件,即只创建一次内存并且它的值不能从应用程序的其他部分修改。

在 Kotlin中有两种使用静态的方法 -

  • 使用伴随对象

  • 使用对象类和@JvmStatic 注解

让我们详细了解这些方式。

使用伴随对象

在对象中添加伴侣将有助于开发人员在 Kotlin中实现静态功能。它将对象存储在存储类的同一文件中,因此它可以访问类中的所有私有方法和变量。它与类初始化阶段一起被初始化。

示例

我们将尝试实现一个伴生对象,我们将看到在 Kotlin 中处理内存管理的效率有多高。

fun main(args: Array<String>) {
   //访问类变量和方法
   //没有创建类对象
   println("Hello!"+'\n' + "This an example of accessing class variable without creating object." + MyClass.staticField+'\n')
   println("Hello!"+'\n' + "This an example of accessing class Method without creating an object." + MyClass.getStaticFunction()+'\n');

}

class MyClass{
   companion object {
      val staticField = "这是一个静态变量。"
      fun getStaticFunction(): String {
         return "这是一个静态方法。"
      }
   }
}
输出结果

执行代码后,它将生成以下输出 -

Hello!
This an example of accessing class variable without creating
object. 这是一个静态变量。

Hello!
This an example of accessing class Method without creating an
object. 这是一个静态方法。

在此示例代码中,如果您尝试修改任何静态变量的值,您将看到 Kotlin 编译器会抛出错误。

示例

fun main(args: Array) {

   //试图修改静态变量

   MyClass.staticField="Hello Students";
   println("Hello!"+'\n'+"This an example of accessing class variable with out creating object-"+MyClass.staticField+'\n')

}
class MyClass{
   companion object {
      val staticField = "This is an Static Variable"
      fun getStaticFunction(): String {
         return "This is a static Method"
      }
   }
}
输出结果

上面的代码将产生以下错误 -

$kotlinc -nowarnmain.kt-include-runtime -d main.jar
main.kt:5:5: error: val cannot be reassigned
MyClass.staticField="Hello Students";
^

使用对象类和@JvmStatic 注解

根据 Kotlin 文档,一旦将 @JvmStatic注释应用于任何变量或方法,它将作为该类的静态功能工作。

示例

在下面的示例中,我们将创建一个对象类,在该对象类中,我们将使用@JvmStatic注解声明变量和方法,以便在 Kotlin 环境中实现静态功能。

fun main(args: Array) {
   //访问类变量和方法
   //没有创建类对象
   println("Hello!"+'\n' + "This an example of accessing a class variable without creating an object." +MyClass.staticField+'\n')
   println("Hello!"+'\n' + "This an example of accessing a class Method without creating an object. " +MyClass.getStaticFunction()+'\n');

}
object MyClass{
   @JvmStatic
   val staticField = "这是一个静态变量。"
   @JvmStatic
   fun getStaticFunction(): String {
      return "这是一个静态方法。"
   }
}
输出结果

它将在结果部分生成以下输出。-

Hello!
This an example of accessing a class variable without creating an
object. 这是一个静态变量。

Hello!
This an example of accessing a class Method without creating an
object. 这是一个静态方法。