java筑基--final,static可以有何作用?

final,static可以有何作用?

1. static

static 关键字是 Java 中一个非常重要的关键字,用于修饰类、字段、方法和代码块等元素。在不同的元素上使用 static 关键字,其作用也略有不同。

下面是 static 关键字可以修饰的元素及其作用:

1.1 类

在 Java 中,可以使用 static 修饰一个类,这样的类就成为了静态内部类,它只能访问外部类的静态变量和方法,不能访问外部类的普通变量和方法。静态内部类可以用于代码分组,使得程序结构更加清晰。

下面是一个使用 static 修饰类的示例:

public class OuterClass {
    
    
    private static int x = 10;
    static class InnerClass {
    
    
        public void printX() {
    
    
            System.out.println("x = " + x);
        }
    }
}

1.2 字段

在 Java 中,可以使用 static 修饰一个字段,这样的字段就成为了静态字段,它属于类本身而不是对象,所有实例共享该字段的值。静态字段通常用于存储全局状态或常量。

下面是一个使用 static 修饰字段的示例:

public class MyClass {
    
    
    public static final int MAX_VALUE = 100;
    private static int count = 0;
    public MyClass() {
    
    
        count++;
    }
    public static int getCount() {
    
    
        return count;
    }
}

static 变量也称作静态变量,静态变量和非静态变量的区别是:静态变量被所有的对象所共享,在内存中只有一个副本,它当且仅当在类初次加载时会被初始化。而非静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响.

1.3 方法

在 Java 中,可以使用 static 修饰一个方法,这样的方法就成为了静态方法,它属于类本身而不是对象,可以通过类名直接调用。静态方法不能访问非静态字段和方法,因为在调用静态方法时,可能还没有创建对象。

下面是一个使用 static 修饰方法的示例:

public class MathUtils {
    
    
    public static int add(int a, int b) {
    
    
        return a + b;
    }
    public static int sub(int a, int b) {
    
    
        return a - b;
    }
}

由于静态方法不依赖于任何对象就可以进行访问,因此对于静态方法来说,是没有this 的,因为它不依附于任何对象,既然都没有对象,就谈不上 this了。

1.4 代码块

在 Java 中,可以使用 static 修饰一个代码块,也称为静态初始化块,该代码块在类加载时执行,用于对静态变量进行初始化操作。

下面是一个使用 static 修饰代码块的示例:

public class MyClass {
    
    
    private static int x;
    static {
    
    
        x = 10;
    }
    public static int getX() {
    
    
        return x;
    }
}

static关键字还有一个比较关键的作用就是 用来形成静态代码块以优化程序性能。static 块可以置于类中的任何地方,类中可以有多个 static 块。在类初次被加载的时候,会按照 static块的顺序来执行每个static块,并且只会执行一次。

2. final

2.1 修饰类

在 Java 中,可以使用 final 修饰一个类,这样的类就称为 final 类。final 类不能被继承,因此其某些特定行为是在编译期就已知并固定的,所以 final 类通常用于安全和性能等方面的考虑。

下面是一个使用 final 修饰类的示例:

final class MyClass {
    
    
    // 类的成员和方法
}

使用 final 来修饰的类叫作 final类。final 类通常功能是完整的,它们不能被继承。Java 中有许多类是 final的,譬如 String,Interger 以及其他包装类。

2.2 修饰方法

在 Java 中,可以使用 final 修饰一个方法,这样的方法不能在子类中被覆盖(override),即不能被子类重新实现或修改。final 方法可以提高程序的安全性和效率。

下面是一个使用 final 修饰方法的示例:

class MyClass {
    
    
    public final void myMethod() {
    
    
        // 方法体
    }
}

代表这个方法不可以被子类的方法重写。如果你认为一个方法的功能已经足够完整了,子类中不需要改变的话,你可以声明此方法为 final。final 方法比非 final 方法要快,因为在编译的时候已经静态绑定了,不需要在运行时再动态绑定。

3.3 修饰变量

在 Java 中,可以使用 final 修饰一个变量,这样的变量被称为 final 变量,它的值只能被赋值一次,之后就不能再修改了。final 变量通常用于存储常量或者不希望被修改的变量。

下面是一个使用 final 修饰变量的示例:

class MyClass {
    
    
    public static final int MAX_VALUE = 100;
    public final String name;
    public MyClass(String name) {
    
    
        this.name = name;
    }
}

可以通过以下代码进行测试:

public class Test {
    
    
    public static void main(String[] args) {
    
    
        MyClass myObj = new MyClass("John");
        System.out.println(myObj.name); // 输出 John
        // myObj.name = "Mike"; // 编译错误,无法修改 final 变量的值
    }
}

凡是对成员变量或者本地变量(在方法中的或者代码块中的变量称为本地变量)声明为 final的都叫作 final变量final 变量经常和 static 关键字一起使用,作为常量。

猜你喜欢

转载自blog.csdn.net/weixin_46039528/article/details/130519663