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");//这里改不了
}
}
posted @   为往生继绝学  阅读(204)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示