Trong Java, từ khóa "static" được sử dụng để quản lý bộ nhớ hiệu quả. Sau khi một biến hoặc phương thức được khai báo là static , thì JVM sẽ cấp phát bộ nhớ cho các biến này một lần duy nhất. Thông thường, các biến tĩnh được sử dụng để khai báo các thuộc tính chung của một lớp , ví dụ:"Tên của tổ chức". Trong ví dụ sau, chúng ta sẽ thấy cách sử dụng static từ khóa.
Ví dụ về Static khi sử dụng Java
Để chứng minh cách tĩnh hoạt động bằng Java, chúng tôi sẽ truy cập trình biên dịch Java trực tuyến của mình và chúng tôi sẽ tạo Kiểm tra lớp. Bên trong Kiểm tra , chúng tôi sẽ cố gắng tạo một biến tĩnh cùng với tĩnh và chúng tôi sẽ truy cập cả hai mà không cần tạo bất kỳ lớp nào của nó đối tượng.
Ví dụ
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); } }
Đầu ra
Khi bạn thực thi mã, nó sẽ tạo ra kết quả sau -
$javac Test.java $java -Xmx128M -Xms16M Test www.tutorialspoint.com Accessing Static variable-10
Tương đương với các phương thức tĩnh Java trong Kotlin
Trong Kotlin, chúng tôi không có tĩnh từ khóa. Trong bài viết này, chúng ta sẽ tìm hiểu cách chúng ta có thể quản lý bộ nhớ giống nhau bằng cách sử dụng một từ khóa khác có sẵn trong thư viện Kotlin. Mục tiêu là triển khai một hàm thư viện Kotlin khác để chọn điều kiện trong đó bộ nhớ chỉ được tạo một lần và không thể sửa đổi giá trị của nó từ phần khác của ứng dụng.
Có hai cách để sử dụng tĩnh trong Kotlin -
-
Sử dụng đối tượng đồng hành
-
Sử dụng lớp đối tượng và chú thích @JvmStatic
Hãy hiểu chi tiết từng cách này.
Sử dụng Đối tượng Đồng hành
Thêm đồng hành trong đối tượng sẽ giúp các nhà phát triển đạt được tĩnh chức năng trong Kotlin. Nó lưu trữ đối tượng trong cùng một tệp nơi lưu trữ lớp, do đó nó có thể truy cập tất cả các phương thức và biến private bên trong lớp. Nó được khởi tạo cùng với giai đoạn khởi tạo lớp.
Ví dụ
Chúng tôi sẽ cố gắng triển khai một đối tượng đồng hành và chúng tôi sẽ xem chúng tôi có thể xử lý hiệu quả việc quản lý bộ nhớ trong Kotlin như thế nào.
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." } } }
Đầu ra
Khi bạn thực thi mã, nó sẽ tạo ra kết quả sau -
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.
Trong mã mẫu này, nếu bạn cố gắng sửa đổi giá trị của bất kỳ giá trị nào trong số tĩnh biến, bạn sẽ thấy trình biên dịch Kotlin sẽ báo lỗi.
Ví dụ
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" } } }
Đầu ra
Đoạn mã trên sẽ tạo ra lỗi sau -
$kotlinc -nowarn main.kt -include-runtime -d main.jar main.kt:5:5: error: val cannot be reassigned MyClass.staticField="Hello Students"; ^
Sử dụng lớp đối tượng và chú thích @JvmStatic
Theo tài liệu Kotlin, một lần @JvmStatic chú thích được áp dụng cho bất kỳ biến hoặc phương thức nào, nó sẽ hoạt động dưới dạng tĩnh chức năng của lớp đó.
Ví dụ
Trong ví dụ sau, chúng tôi sẽ tạo một đối tượng lớp và trong đối tượng đó lớp, chúng tôi sẽ khai báo các biến và phương thức bằng cách sử dụng @JvmStatic chú thích để triển khai tĩnh chức năng trong môi trường 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." } }
Đầu ra
Nó sẽ tạo ra kết quả sau trong phần kết quả. -
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.