📅  最后修改于: 2023-12-03 15:16:30.444000             🧑  作者: Mango
在Java开发中,有两个关键字static
和final
非常常见。他们可以用来修饰类、属性、方法等,本文将详细介绍他们的意义和用法。
static
是一种修饰符,用来修饰属性、方法、代码块、内部类等。一般用于被整个类所共享的值。我们来看一个简单的例子:
class A {
public static int num;
}
public class Main {
public static void main(String[] args) {
A.num = 10;
System.out.println(A.num); // 输出:10
B b = new B();
b.setNum(20);
System.out.println(A.num); // 输出:20
}
}
class B {
public void setNum(int num) {
A.num = num;
}
}
这个例子中,我们定义了一个类A和一个类B。A中有一个静态变量num,B中有一个方法setNum,该方法将传入的参数设置为A的num值。我们在main
方法中先将A的num值设置为10,然后调用B的setNum方法设置新的num值为20,并在最后输出A的num值。输出结果为20。
我们可以看到,通过静态变量,我们可以在不实例化该类的情况下共享一个值。
静态方法同理,具有相同的语法:
class A {
public static int getNum() {
return 0;
}
}
在其他地方可以使用A.getNum()
来调用该方法。
静态代码块用于在类被加载时执行一次,在实例化对象之前执行。它一般用于初始化静态成员变量:
class A {
public static int num;
static {
num = 10;
}
}
在程序执行期间第一次使用该类时,静态代码块会被执行,num被初始化为10。
静态内部类也非常常见。它和非静态内部类的区别在于静态内部类是和外部类相关联,而非静态内部类是和外部类的每个实例相关联的。
final
也是一种修饰符,用于定义常量,修饰属性、方法、类等。使用final
关键字进行定义的对象只能被赋值一次。
final int value = 10;
在类中定义的final
常量通常用于表示不变的常量。例如:
class MathUtil {
public static final double PI = 3.141592653589793;
public static double circumference(double radius) {
return 2 * PI * radius;
}
}
在这个例子中,我们定义了一个圆周率的常量PI,该常量在本类中的其他方法中被使用。这样定义的好处是,如果我们需要修改圆周率,只需要在该类中修改一次,就可以影响到所有调用该类的代码。
final
还可以用来修饰方法,这样该方法将不能被子类重写:
class A {
public final void print() {
System.out.println("AAA");
}
}
class B extends A {
// 编译错误,无法重写print方法
public void print() {
System.out.println("BBB");
}
}
同样的,final
还可以用于修饰类。这样的类不能被继承:
final class A {
// 类定义
}
// 编译错误,无法继承A类
class B extends A {
// 类定义
}
static
和final
都是Java中常用的关键字,用于修饰属性、方法、代码块、内部类等。static
一般用于被整个类共享的值,而final
用来定义常量或者禁止被子类或其他类修改的方法或类。final
还可以用来修饰类,该类将不能被继承。