1. final

final 主要用在3个地方:变量、方法、类。

  1. final 用在变量上
    ① 这个变量必须在构造对象时就初始化。
    ③ 如果是基本数据类型的变量,那么这个变量的值一旦初始化之后就不能修改了,相当于是一个常量了。
    ④ 如果是引用类型的变量,则其初始化之后,就不能修改它的引用了,不过引用上的对象本身的值还是可以修改的。

  2. final 用在方法上
    ① 表明这个方法不能被子类重写,防止子类修改它的含义。
    ② private 方***被隐式的指定为 final 。

  3. final 用在类上
    ① 表明这个类不能被继承。
    ② final 类中的所有成员方法都会被隐式的指定为 final 方法。

2. static

static 主要用在 5 个地方:静态变量,静态方法,静态代码块,静态内部类,静态导包。(static 不能修饰外部类。)

  1. 静态变量
    静态变量也称为类变量,整个类只有一个这样的变量,该类的所有实例都共享这一个静态变量,可以通过类名来直接访问静态变量(类名.静态变量名)。每个静态变量在内存中只存一份。对于非静态变量,每个对象实例都会有自己单独的一份,随着对象实例一起创建和销毁。

  2. 静态方法
    ① 静态方法是不在对象上执行的方法,比如 Math.pow(x, a); 这个调用不需要 Math 对象,或者说没有隐式参数。
    ② 静态方法在类加载的时候就存在了,不依附于任何对象实例,静态方法中只能访问静态变量和静态方法。

  3. 静态代码块
    静态代码块只在类加载的时候执行一次。 静态代码块及非静态代码块的执行顺序可以看这个:静态代码块相关问题

  4. 静态内部类
    ① 静态内部类的创建不依赖于外部类。也就是说,创建普通内部类之前需要先创建外部类,而创建静态内部类之前不需要先创建外部类,可以直接创建静态内部类。
    ② 静态内部类可以调用外部类的静态变量和非静态方法,但是不能调用外部类的非静态变量和非静态方法。

  5. 静态导包
    import static com.xxx.ClassName.xxx
    静态导包可以简化静态方法和静态变量的使用,简化代码。
    比如静态导包前:
    写输出语句:System.out.println(…);
    当我们先静态导包后:
    import static java.lang.System.out;
    写输出语句语句:out.println(…);

3. static final

static final 用在变量和方法上。

  1. static final 用在变量上
    相当于与是一个“全局常量”,一旦初始化之后,就不能修改了,并且可以通过类名访问,而且整个类共享一个。

  2. static final 用在方法上
    表明这个方法不能被子类继承修改,并且可以直接通过类名来调用这个方法。

  3. static final 与 final static 是一样的。


上面就是关于关于 final、static、static final 的相关总结内容了,如果看完之后,还有相关问题的不知道,可以在评论区留下问题,会及时回答更新。

这里是猿兄,为你分享程序员的世界。

非常感谢各位优秀的程序员们能看到这里,如果觉得文章还不错的话,
求点赞👍 求关注💗 求分享👬
对我来说真的 非常有用!!!

注: 如果猿兄这篇博客有任何错误和建议,欢迎大家留言!