final, static和static final详解
1,final
final 可以修饰-类,方法,变量,还有对对象的引用
- 修饰 类 -表示类不可变,不可继承,比如 String 具有不可变性
- 修饰 方法 -表示该方法不可重写,比如 模板方法,可以用来固定算法
- 修饰 变量 -表示该变量在编译后成为一个 常量,不可以被修改
- 还可以修饰对象的引用 值 被修饰的引用不可值向其他地址 但是里面的属性可以改变
2.static
变量分为成员变量和局部变量
成员变量又分为静态变量和实例变量
属性 | 修饰变量叫静态变量,可以直接通过类名调用 |
---|---|
方法 | 修饰方法叫静态方法,也可以通过类名直接调用 |
还可以修饰内部类 | |
修饰代码块 | 在类被加载时自动执行,只会被加载一次。只能使用静态变量 |
特点:
- 静态方法和静态属性都是随着类的加载而加载的,静态属性和方法都优先于普通属性和方法,由此可知,在静态方法中不能调用普通方法和普通属性,反之是可以的。
- 在静态方法中不能使用this关键字
区别
static | final |
---|---|
static可以在编译时类加载初始化, | final可以在编译时初始化,也可以在运行时初始化 |
静态 | 常量 |
因为在类加载时完成,所以一个类只能有一个值,在类的内部可修改多次 | 修饰对象、属性、方法,在对象内部只能进行一次初始化,在类的内部值也不再改变 |
3,static final
被这个修饰的变量拥有这两个修饰符的特点!
public class Test { // final修饰实例变量并初始化 private final String A1; private final String A2; // final修饰类变量并初始化 private static final String B1; private static final String B2; { A1 = "a"; // 此处编译报错: B2 = "b"; // The final field FinalField.B2 cannot be assigned // 因为B2是final修饰的类变量 // 又因为在实例化时才会触发代码块内容 // 所以在代码块内部不能初始化静态常量 } static { // 此处编译报错: // Cannot make a static reference to the non-static field A2 // 此处出错是因为在静态代码块中, // 不能有实例变量(包括实例常量) // A2 = "a"; B1 = "b"; B2 = "b"; } public Test() { this.A2 = "4"; this.A1=" 3"; // 与代码块中报错原因相同 // B2 = "b"; } public Test(String A,String B) {//必须在构造函数里给final修饰的实力变量赋值 this.A2 = A; this.A1=B; } public static void a(String A,String B){ //静态方法和静态代码块的区别 //静态代码块:在类被加载时自动执行,只会被加载一次。只能使用静态变量 //静态方法:静态方法为类所有,不需要进行实例化即可通过类名.静态方法调用。静态方法只能调用静态变量。 //静态代码块是自动执行的;静态方法是被调用的时候才执行的 B1="a";//不可赋值 在调用时才执行 B2=B; System.out.println(B1+B2); //java中类加载顺序 //1、虚拟机在首次加载Java类时,会对静态初始化块、静态成员变量、静态方法进行一次初始化 // 2、只有在调用new方法时才会创建类的实例 // 3、类实例创建过程:按照父子继承关系进行初始化,首先执行父类的初始化块部分, // 然后是父类的构造方法;再执行本类继承的子类的初始化块,最后是子类的构造方法 // 4、类实例销毁时候,首先销毁子类部分,再销毁父类部分 } public static void main(String[] args) { Test t=new Test(); System.out.println(t.A1); System.out.println(t.A2);//这里已经初始化常量了 t.a("b2","b1");//这里改不了 } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具