📜  java中的static和final(1)

📅  最后修改于: 2023-12-03 15:16:30.444000             🧑  作者: Mango

Java中的static和final

在Java开发中,有两个关键字staticfinal非常常见。他们可以用来修饰类、属性、方法等,本文将详细介绍他们的意义和用法。

static

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关键字进行定义的对象只能被赋值一次。

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 {
    // 类定义
}
总结
  • staticfinal都是Java中常用的关键字,用于修饰属性、方法、代码块、内部类等。
  • static一般用于被整个类共享的值,而final用来定义常量或者禁止被子类或其他类修改的方法或类。
  • final还可以用来修饰类,该类将不能被继承。