在 Java 中,“static”关键字用于高效的内存管理。一旦变量或方法被声明为static,那么 JVM 将只为这些变量分配一次内存。通常静态变量用于声明一个类的公共属性,例如“机构名称”。在下面的示例中,我们将看到如何使用static关键字。
为了演示静态在 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 中,我们没有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"; ^
根据 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. 这是一个静态方法。