来源:FreeCodeCamp static关键字可以用在 Java 代码的不同部分,例如变量、方法和静态块。今天我们就来具体了解如何将其应用到实践中。 Java中使用static关键字的主要目的是节省内存。当我们在一个类中创建一个将被其他类访问的变量时,我们必须首先创建该类的一个实例,然后为该变量的每个实例分配一个新值。这是必要的,以便所有新类/对象的新变量的值都相同。但是当我们创建静态变量时,它们的值在所有其他类中保持不变,并且我们不需要创建实例来使用该变量。这样我们就创建了一次变量,因此内存只分配了一次。通过本文中的一些示例,您将更好地理解这一点。
如何在Java中创建静态变量
为了了解如何在创建变量时使用static关键字,让我们看看创建由类的每个实例共享的变量的常用方法。class Student {
String studentName;
String course;
String school;
public static void main(String[] args) {
Student Student1 = new Student();
Student Student2 = new Student();
Student1.studentName = "Ihechikara";
Student1.course = "Data Visualization";
Student1.school = "freeCodeCamp";
Student2.studentName = "John";
Student2.course = "Data Analysis with Python";
Student2.school = "freeCodeCamp";
System.out.println(Student1.studentName + " " + Student1.course + " " + Student1.school + "\n");
// Ihechikara Data Visualization freeCodeCamp
System.out.println(Student2.studentName + " " + Student2.course + " " + Student2.school);
// John Data Analysis with Python freeCodeCamp
}
}
我将逐步解释上面代码中发生的事情。我们创建了一个包含三个变量的Student类——studentName、course和school。然后我们创建了Student类的两个实例:
Student Student1 = new Student();
Student Student2 = new Student();
第一个实例是Student1,它可以访问在其类中创建的变量,具有以下值:
Student1.studentName = "Ihechikara";
Student1.course = "Data Visualization";
Student1.school = "freeCodeCamp";
第二个实例的含义如下:
Student2.studentName = "John";
Student2.course = "Data Analysis with Python";
Student2.school = "freeCodeCamp";
如果你仔细观察,你会发现两个学生都有相同的学校名称——“freeCodeCamp”。但如果我们必须为同一所学校创建 100 名学生怎么办?这意味着我们将使用相同的值初始化变量 100 次,每次都分配新的内存。对于某些人来说这可能不是问题,但在大型代码库中它会显着减慢程序速度。为了解决这个问题,我们将使用 static 关键字来创建school变量。此后,该类的所有实例都可以使用该变量。像这样的东西:
class Student {
String studentName;
String course;
static String school;
public static void main(String[] args) {
Student Student1 = new Student();
Student Student2 = new Student();
Student1.studentName = "Ihechikara";
Student1.course = "Data Visualization";
Student1.school = "freeCodeCamp";
Student2.studentName = "John";
Student2.course = "Data Analysis with Python";
System.out.println(Student1.studentName + " " + Student1.course + " " + Student1.school + "\n");
// Ihechikara Data Visualization freeCodeCamp
System.out.println(Student2.studentName + " " + Student2.course + " " + Student2.school);
// John Data Analysis with Python freeCodeCamp
}
}
在此代码中,我们创建了一个名为school的静态变量。请注意,static 关键字位于数据类型和变量名称之前:static String school = "freeCodeCamp"; 。现在,当我们创建类的新实例时,我们不需要为每个实例初始化school变量。在我们的代码中,我们仅在第一个实例中为变量赋值,然后它被下一个实例继承。请注意,在代码中任何位置更改静态变量的值都会覆盖之前声明它的代码其他部分中的值。因此,您应该只对要在程序中保持不变的变量使用static关键字。您还可以在创建变量时为变量赋值,这样实例化类时就不必再次声明它:static String school = "freeCodeCamp"; 。如果您使用此方法,您将得到以下结果:
class Student {
String studentName;
String course;
static String school = "freeCodeCamp";
public static void main(String[] args) {
Student Student1 = new Student();
Student Student2 = new Student();
Student1.studentName = "Ihechikara";
Student1.course = "Data Visualization";
Student2.studentName = "John";
Student2.course = "Data Analysis with Python";
System.out.println(Student1.studentName + " " + Student1.course + " " + Student1.school + "\n");
// Ihechikara Data Visualization freeCodeCamp
System.out.println(Student2.studentName + " " + Student2.course + " " + Student2.school);
// John Data Analysis with Python freeCodeCamp
}
}
现在您将了解如何使用静态块初始化静态变量。
如何在Java中创建静态方法
在查看示例之前,您需要了解有关 Java 中静态方法的一些知识:- 静态方法只能访问和修改静态变量。
- 无需创建类的实例即可调用/使用静态方法。
class EvenNumber {
static int evenNumber;
static void incrementBy2(){
evenNumber = evenNumber + 2;
System.out.println(evenNumber);
}
public static void main(String[] args) {
incrementBy2(); // 2
incrementBy2(); // 4
incrementBy2(); // 6
incrementBy2(); // 8
}
}
在上面的代码中,我们在名为EvenNumber的类中 创建了一个整数 ( EvenNumber ) 。我们的静态方法称为incrementBy2()。此方法增加整数EvenNumber的值并打印其值。无需创建该类的实例,我们就可以在程序的main方法中调用incrementBy2()方法。每次调用该方法时,evenNumber都会增加 2 并打印出来。您还可以在调用方法时使用点表示法将类名附加到方法中:EvenNumber.incrementBy2(); 。每个静态方法都属于该类,而不属于该类的实例。
如何在Java中创建静态块
Java 中的静态块类似于构造函数。我们可以使用它们来初始化静态变量,它们由编译器在main方法之前执行。class Block {
static int year;
static {
year = 2022;
System.out.println("This code block got executed first");
}
public static void main(String[] args) {
System.out.println("Hello World");
System.out.println(year);
}
}
在上面的代码中,我们创建了一个静态整数变量year。然后我们在静态块中初始化它:
static {
year = 2022;
System.out.println("This code block got executed first");
}
正如您所看到的,可以使用 static 关键字后跟大括号来创建静态块。在代码的静态块中,我们用值 2022初始化了年份变量。我们还打印了一些文本 - “此代码块首先执行。” 在main方法中,我们打印了“Hello World”和一个静态变量year。在控制台中,代码将按以下顺序执行:
该代码块首先执行 Hello World 2022
这清楚地演示了静态块中的代码如何在main方法之前首先执行。
GO TO FULL VERSION