Rumah > Java > javaTutorial > teks badan

Cara menggunakan medan statik dan kaedah statik di Jawa

PHPz
Lepaskan: 2023-04-25 20:43:06
ke hadapan
782 orang telah melayarinya

    Pertama lihat kod berikut:

    public class Main {
        public static void main(String[] args) {
            System.out.println("Hello, WOrld!");
        }
    }
    Salin selepas log masuk

    Kaedah main kami ditandastatic pengubah suai, kemudian apakah maksud pengubah suai statik?

    1. Pembolehubah statik

    Jika medan ditakrifkan sebagai static, maka setiap kelas hanya mempunyai satu medan sedemikian.

    Pertama lihat kelas tanpa traversal statik statik:

    class Student {
      int stuId;
      String name;
      String school = "HY No.1 High School";
    }
    Salin selepas log masuk

    Dengan mengandaikan terdapat 1500 pelajar di sekolah menengah, kod di atas kini mempunyai semua ahli data contoh dalam setiap kelas Memori diperuntukkan apabila objek dicipta.

    Semua pelajar mempunyai stuId dan nama unik mereka, ahli data contoh ini betul dalam kes ini, semuanya unik.

    Walau bagaimanapun, "sekolah" di sini adalah harta bersama semua objek. Jika ia tidak diisytiharkan sebagai pembolehubah statik, ia juga akan menduduki banyak memori. Tetapi jika kita menjadikannya statik, medan ini hanya akan mendapat ingatan sekali.

    Pengisytiharan pembolehubah statik

    class Student {
      int stuId;  // 实例变量
      String name;
      static String school = "HY No.1 High School"; // 静态变量
    }
    Salin selepas log masuk

    Jika anda mengisytiharkan sebarang pembolehubah sebagai statik, ia dipanggil pembolehubah statik.

    • Pembolehubah statik boleh digunakan untuk merujuk kepada sifat biasa kepada semua objek (bukan unik untuk setiap objek), contohnya, nama syarikat pekerja, nama kolej pelajar, dsb.

    • Pembolehubah statik hanya memperoleh memori sekali dalam kawasan kelas apabila kelas dimuatkan.

    Ujian pembolehubah statik

    Ujian kod:

    package com.yuzhou1su.RelearnJava;
    
    class Student {
        int stuId; 
        String name;
        static String school = "HY No.1 High School";
      
        Student(int id, String n) {
            stuId = id;
            name = n;
        }
    
        void display() {
            System.out.println("Student id:" + stuId + ", Name:" + name + " is from " + school);
        }
    }
    
    public class TestVariable {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            Student s1 = new Student(001, "Karsa");
            Student s2 = new Student(002, "Ellen");
    
            s1.display();
            s2.display();
        }
    
    }
    Salin selepas log masuk

    Hasil pelaksanaan:

    ID Pelajar:1, Nama:Karsa berasal dari Sekolah Menengah HY No.1
    ID Pelajar:2, Nama:Ellen dari Sekolah Menengah HY No.1

    <🎜 Pembolehubah statik hanya akan mendapat ingatan sekali, jika mana-mana objek mengubah nilai pembolehubah statik, ia akan mengekalkan nilainya.

    Lihat kod berikut:

    package com.yuzhou1su.RelearnJava;
    
    public class StaticVariableCount {
      
      static int count = 0;
      
      StaticVariableCount() {
        count++;
        System.out.println(count);
      }
    
      public static void main(String[] args) {
        // TODO Auto-generated method stub
        StaticVariableCount svc1 = new StaticVariableCount();
        StaticVariableCount svc2 = new StaticVariableCount();
        StaticVariableCount svc3 = new StaticVariableCount();
        
      }
    }
    Salin selepas log masuk

    Keputusan ujian:

    1

    2
    3

    2. Kaedah statik

    Kaedah statik dalam Java ialah kaedah yang dimiliki oleh kelas, tetapi tidak dianggap sebagai contoh kelas; , kaedah statik dalam Java Boleh dibuat dan dilaksanakan dengan mudah tanpa memerlukan sebarang panggilan contoh. Kaedah statik boleh mengakses mana-mana ahli data dalam kelas, boleh melakukan apa-apa operasi pada ahli data, dan boleh mengambil sebarang nilai sebagai input Walaupun pembolehubah ahli untuk diakses harus mempunyai skop pembolehubah dalam kelas, kaedah itu hanya boleh menjadi statik.

    public static void syntax_ex (String_name) {
        Body of the program for execution.
    }
    Salin selepas log masuk
    • awam. Pengubah suai akses kelas ini adalah awam.

    • statik. Skop kaedah adalah statik, yang bermaksud semua pembolehubah ahli dan jenis pulangan berada dalam skop statik.

    • batal. Kata kunci dalam aliran sintaks ini menunjukkan bahawa tiada jenis pulangan diproses dalam kaedah semasa.

    • syntax_ex. Nama kelas, menunjukkan bahawa kaedah statik adalah sebahagian daripada kelas yang ditakrifkan pada masa ini, diikuti dengan nama rentetan.

    • badan. Ia termasuk keseluruhan logik teras atau logik perniagaan (jika diperlukan dalam mod statik).

    Jika anda menggunakan kata kunci statik pada mana-mana kaedah, ia dipanggil kaedah statik,

    Kaedah statik:

    • Kaedah statik tergolong dalam kelas, bukan objek kelas.

    • Kaedah statik boleh dipanggil tanpa membuat tika kelas.

    • Kaedah statik boleh mengakses ahli data statik dan menukar nilai mereka.

    Ujian kaedah statik

    Bagaimana jika kita mahu menukar operasi nama pembelajaran? Anda boleh mengisytiharkan kaedah statik.

    package com.yuzhou1su.RelearnJava;
    
    class Student {
        int stuId; 
        String name;
        static String school = "HY No.1 High School";
        
        static void changeSchool() {
            school = "HY No.5 High School";
        }
      
        Student(int id, String n) {
            stuId = id;
            name = n;
        }
    
        void display() {
            System.out.println("Student id:" + stuId + ", Name:" + name + " is from " + school);
        }
    }
    
    public class TestVariable {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            
            Student.changeSchool();
            Student s1 = new Student(001, "Karsa");
            Student s2 = new Student(002, "Ellen");
    
            s1.display();
            s2.display();
        }
    
    }
    Salin selepas log masuk

    Keputusan ujian:

    ID pelajar:1, Nama:Karsa dari Sekolah Menengah HY No.5

    ID pelajar:2 , Nama:Ellen berasal dari Sekolah Menengah HY No.5

    Cara kaedah statik berfungsi

    • Kaedah statik dan kaedah contoh ialah dua jenis kaedah dalam kaedah Java , mereka menimbulkan kekeliruan di kalangan pengaturcara, tetapi ini hanyalah salah faham. Terdapat perbezaan besar antara kaedah statik dan kaedah contoh. Mari lihat cara kaedah statik berfungsi di Java. Kaedah statik dalam Java ialah kaedah yang berada dalam kelas dan boleh diakses walaupun objek itu tidak dibuat atau dijadikan instantiated. Anda boleh mengakses mana-mana contoh kelas dengan menambahkan nama kaedah pada nama kelas dan menghantar parameter.

    • Ia boleh dinyatakan sebagai

      (hujah). Tambahan pula, kaedah ini digubah dengan matlamat bahawa kaedah itu harus boleh dikongsi dengan semua pembolehubah ahli dan objek semua orang dalam kelas, dengan skopnya ditakrifkan oleh statik pengubah suai. Kaedah ini tidak mempunyai apa-apa keupayaan beban berlebihan, sebaliknya, ia boleh terlebih beban pada masa penyusunan menggunakan pengikatan statik pengkompil apabila pengaturcara perlu berkongsi sekeping kod biasa antara semua kejadian, objek atau pembolehubah ahli kelas Kaedah statik datang ke penyelamatan kerana mereka membuat peruntukan bersama untuk semua ahli, objek dan pembolehubah dengan mencipta skop statik biasa. ClassName.methodName

    • 一个类的所有静态字段都可以使用静态字段作为一个类的静态方法的一部分进行访问。另外,静态方法也与内存分配功能有关,并且也是可以支持的。它将静态方法字段和变量的一部分与一些永久生成的堆存储在内存中,用于关联值。内存分配不支持对象作为静态方法堆的创建,或者方法本身不支持实例化。但接下来的问题是,静态方法是如何通过共享和创建所有成员的范围作为类的一部分来工作的。

    为什么 Java Main 方法是静态方法

    这是因为对象不需要调用静态方法。如果是非静态方法,JVM 会先创建一个对象,然后调用 main() 方法,这会导致额外内存分配的问题。

    main 方法不对任何对象进行操作,事实上,在启动程序时还没有任何对象。静态的 main 方法将执行并构造程序所需要的对象。

    三、静态常量

    静态变量使用的比较少,但静态常量却很常用。比如 Math 类中定义一个静态常量:

    public class Math {
      public static final double PI = 3.14159265358979;
    }
    Salin selepas log masuk

    然后在程序中,可以用 Math.PI 来访问这个常量。

    四、总结

    Java 中为什么需要静态变量?

    答:每当我们希望为一个类的所有对象拥有一个公共属性时,我们就使用一个类级别的变量,即静态变量。

    在类加载时,此变量仅在内存中加载一次。 由于它不是在Java中按对象定义的,因此可以节省内存。

    为什么用 Java 创建静态变量不是一个好习惯?

    答:静态变量是类的所有对象共有的。 如果创建了新对象,则无需测试静态变量的值。 使用静态变量的任何代码都可以处于任何状态。 它可以在新对象内或在类级别。 因此,静态变量的范围在Java类中是开放式的。

    如果我们希望对范围进行更严格的控制,则变量应在对象创建级别创建。

    同样,定义静态变量也不是一个好习惯,因为它们违反了面向对象编程的原理。

    Java 中静态方法的目的?

    答:Java 提供了静态方法的功能来在类级别创建行为。 静态方法是类的所有对象所共有的。 我们不需要创建类的任何对象来调用静态方法。 因此,它提供了不创建用于调用它的对象的便利。

    静态方法也可以访问和修改静态数据成员。 这也有助于在类级别上保持行为和状态。

    为什么在 Java 中将 main 方法标记为静态方法?

    答:Java 中的 main 方法被标记为静态,因此 JVM 可以调用它来启动程序。 如果 main 方法不是静态的,那么Java进程将调用哪个构造函数?

    因此,在Java中将主要方法标记为静态是众所周知的约定。 但是,如果我们去除static,那将会有歧义。 Java进程可能不知道要调用哪个类的方法来启动程序。

    因此,此约定有助于 Java 进程识别类中作为参数传递给 Java 进程的程序的启动代码。

    在什么情况下我们使用静态块?

    答:有时,有一个具有静态成员变量的类。 这些变量需要一些复杂的初始化。 这时,静态块可作为初始化复杂静态成员变量初始化的工具。静态块甚至在执行main之前执行。有时,我们也可以用静态的类方法替换静态块。

    是否可以在不定义main()方法的情况下执行程序?

    答:不,从Java 7开始,您需要main()方法来执行程序。 在Java的早期版本中,有一种解决方法可用于使用静态块执行。 但是现在这个差距已经缩小。

    当main方法的签名中未提及static修饰符时会发生什么?

    答:根据Java规范,main方法必须标记为静态。 它只需要一个字符串数组的参数即可。

    程序可以使用非静态方法进行编译。 但是在执行时会给出NoSuchMethodError。

    Java中的静态方法和实例方法有什么区别?

    答:通常,需要为不依赖于对象成员变量的类定义行为。 这种行为是通过静态方法捕获的。 如果存在依赖于对象成员变量的行为,则我们不会将其标记为静态,而是将其保留为实例方法。

    要调用为静态方法,我们不需要创建对象。 我们只用类名来称呼它。 但是要调用实例方法,我们需要先创建/获取一个对象。

    实例成员变量不能通过静态方法访问。 但是实例方法可以调用实例变量和静态变量。

    Atas ialah kandungan terperinci Cara menggunakan medan statik dan kaedah statik di Jawa. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

    Label berkaitan:
    sumber:yisu.com
    Kenyataan Laman Web ini
    Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
    Tutorial Popular
    Lagi>
    Muat turun terkini
    Lagi>
    kesan web
    Kod sumber laman web
    Bahan laman web
    Templat hujung hadapan