ใน Java มีการใช้คีย์เวิร์ด "static" เพื่อการจัดการหน่วยความจำอย่างมีประสิทธิภาพ เมื่อตัวแปรหรือเมธอดถูกประกาศเป็น คงที่ จากนั้น JVM จะจัดสรรหน่วยความจำสำหรับตัวแปรเหล่านี้เพียงครั้งเดียว โดยปกติแล้ว ตัวแปรสแตติกจะใช้เพื่อประกาศคุณสมบัติทั่วไปของ คลาส เช่น "ชื่อสถาบัน" ในตัวอย่างต่อไปนี้ เราจะมาดูวิธีการใช้ สแตติก คำสำคัญ
ตัวอย่าง Static ใน Java
เพื่อแสดงให้เห็นว่า คงที่ ทำงานใน Java เราจะเข้าถึงคอมไพเลอร์ Java ออนไลน์ของเรา และเราจะสร้าง การทดสอบ ระดับ. ข้างใน ทดสอบ เราจะพยายามสร้างตัวแปรสแตติกพร้อมกับ สแตติก เมธอด และเราจะเข้าถึงทั้งคู่โดยไม่ต้องสร้าง คลาส . ใดๆ วัตถุ
ตัวอย่าง
public class Test { static int myStaticVariable = 10; // static method static void staticMethod() { System.out.println("www.tutorialspoint.com"); } public static void main(String[] args) { // accessing static method and variable without creating // any object of class Test staticMethod(); System.out.println("Accessing Static variable-"+myStaticVariable); } }
ผลลัพธ์
เมื่อคุณรันโค้ด มันจะสร้างผลลัพธ์ต่อไปนี้ -
$javac Test.java $java -Xmx128M -Xms16M Test www.tutorialspoint.com Accessing Static variable-10
เทียบเท่ากับ Java Static Methods ใน Kotlin
ใน Kotlin เราไม่มี คงที่ คำสำคัญ. ในบทความนี้ เราจะเรียนรู้วิธีที่เราสามารถจัดการหน่วยความจำแบบเดียวกันได้โดยใช้คำสำคัญที่แตกต่างกันในไลบรารี Kotlin วัตถุประสงค์คือการใช้ฟังก์ชันไลบรารี Kotlin ที่แตกต่างกันเพื่อเลือกเงื่อนไขที่หน่วยความจำจะถูกสร้างขึ้นเพียงครั้งเดียวและค่าของหน่วยความจำจะไม่สามารถแก้ไขได้จากส่วนอื่น ๆ ของแอปพลิเคชัน
มีสองวิธีในการใช้ คงที่ ใน Kotlin −
-
การใช้วัตถุที่แสดงร่วม
-
การใช้คลาสอ็อบเจ็กต์และคำอธิบายประกอบ @JvmStatic
มาทำความเข้าใจแต่ละวิธีอย่างละเอียดกัน
การใช้วัตถุที่แสดงร่วม
การเพิ่ม สหาย ในวัตถุจะช่วยให้นักพัฒนาบรรลุ คงที่ ฟังก์ชั่นใน Kotlin มันเก็บอ็อบเจ็กต์ไว้ในไฟล์เดียวกันกับที่เก็บคลาส ดังนั้นมันจึงสามารถเข้าถึงเมธอดและตัวแปรส่วนตัวทั้งหมดภายในคลาสได้ มันได้รับการเริ่มต้นพร้อมกับขั้นตอนการเริ่มต้นคลาส
ตัวอย่าง
เราจะพยายามปรับใช้อ็อบเจ็กต์ที่แสดงร่วม และเราจะเห็นว่าเราสามารถจัดการกับการจัดการหน่วยความจำใน Kotlin ได้อย่างมีประสิทธิภาพเพียงใด
fun main(args: Array<String>) { // Accessing class variable and method //with out creating class object 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 = "This is a Static Variable." fun getStaticFunction(): String { return "This is a static Method." } } }
ผลลัพธ์
เมื่อคุณรันโค้ด มันจะสร้างผลลัพธ์ต่อไปนี้ -
Hello! This an example of accessing class variable without creating object. This is a Static Variable. Hello! This an example of accessing class Method without creating an object. This is a static Method.
ในโค้ดตัวอย่างนี้ หากคุณพยายามแก้ไขค่าของ คงที่ . ใดๆ ตัวแปร คุณจะเห็นว่าคอมไพเลอร์ Kotlin จะเกิดข้อผิดพลาด
ตัวอย่าง
fun main(args: Array) { // Trying to modify the static variable 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 -nowarn main.kt -include-runtime -d main.jar main.kt:5:5: error: val cannot be reassigned MyClass.staticField="Hello Students"; ^
การใช้คลาสอ็อบเจ็กต์และคำอธิบายประกอบ @JvmStatic
ตามเอกสาร Kotlin เมื่อ @JvmStatic มีการใช้คำอธิบายประกอบกับตัวแปรหรือวิธีการใดๆ ซึ่งจะทำงานเป็น คงที่ ฟังก์ชันของคลาสนั้นๆ
ตัวอย่าง
ในตัวอย่างต่อไปนี้ เราจะสร้าง วัตถุ คลาสและในวัตถุ .นั้น class เราจะประกาศตัวแปรและ method โดยใช้ @JvmStatic คำอธิบายประกอบเพื่อใช้งาน คงที่ การทำงานในสภาพแวดล้อม Kotlin
fun main(args: Array) { // Accessing class variable and method //with out creating class object 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 = "This is a Static Variable." @JvmStatic fun getStaticFunction(): String { return "This is a Static Method." } }
ผลลัพธ์
มันจะสร้างผลลัพธ์ต่อไปนี้ในส่วนผลลัพธ์ −
Hello! This an example of accessing a class variable without creating an object. This is a Static Variable. Hello! This an example of accessing a class Method without creating an object. This is a Static Method.