Java中的关键字static和final

1. static 关键字

1.1 类变量

类变量也叫静态变量/静态属性,是该类的所有对象共享的变量,任何一个该类的对象去访问它的时候,取到的都是相同的值;同样,任何一个该类的对象去修改它的时候,修改的也是同一个变量。简单来说,就是共享变量

class A{
    public static int num = 10;//	类变量/静态变量/静态属性
}

类变量的一些特性:

  1. 类变量可以通过 类名.类变量名(推荐) 或者 对象名.类变量名 来访问;
  2. 类变量是该类的所有对象共享的,而实例变量(非类变量)是每个对象独享的;
  3. 类变量在类加载的时候就初始化了,即只要加载了类,就可以使用类变量;
  4. 类变量的生命周期是随类的加载开始,随着类消亡而销毁。

1.2 类方法

类方法也叫静态方法.

class B{
    public static void hello(){
        System.out.println("hello");
    }
}

静态方法如何在本类中或在外部类引用:

class C{
    public static void hello(){
        System.out.println("hello");
    }
    public void say(){
        hello();
    }
}

class D{
    public void speak(){
        C.hello();
    }
}
1.2.1 静态方法特性
  1. 类方法和普通方法都是随着类的加载而加载,将结构信息存储在方法区。类方法中没有this的参数,普通方法中隐含着this的参数
  2. 静态方法,只能访问静态的成员;费静态的方法,可以访问静态成员和费静态成员(必须遵守访问权限);
  3. 类方法可以通过类名调用,也可以通过对象名调用;
  4. 普通方法需要通过对象名调用,不可以通过类名调用;

1.3 加载顺序

创建一个子类对象时(继承关系),他们的静态代码块,静态属性初始化,普通代码块,普通属性初始化,构造方法的调用顺序如下:

  1. 父类的静态代码块和静态属性(二者优先级一样,按定义顺序执行);
  2. 子类的静态代码块和静态属性(二者优先级一样,按定义顺序执行);
  3. 父类的普通代码块和普通属性初始化(二者优先级一样,按定义顺序执行);
  4. 父类的构造方法;
  5. 子类的普通代码块和普通属性初始化(二者优先级一样,按定义顺序执行);
  6. 子类的构造方法。

2. final关键字

2.1 final使用场景

  1. 当不希望类被继承时,可以使用 final 修饰;
final class A{}//此时该类不可以被其他类继承
  1. 当不希望父类的某个方法被子类**覆盖/重写(override)**时,可以使用 final 修饰;
class B{
    public final void hello(){}//该方法可以访问,但不可以被重写
}
  1. 当不希望类的某个属性的值被修改,可以使用 final 修饰;
class C{
    public final double TAX_RATE = 0.08;//常量
}
  1. 当不希望某个局部变量被修改,可以使用 final 修饰;
class D{
    public void cry(){
        final double NUM = 0.01;//此时,NUM 被称为局部
    }
}

2.2 使用注意事项

  1. final修饰的属性称为常量,一般用大写字母命名,命名格式为 XX_XX_XX
  2. final修饰的属性必须赋初值,且不能被修改。赋值可以在如下位置之一:
    • 定义时:public final double TAX_RATE = 0.08;
    • 在构造器中
    • 在代码块中
  3. 如果final修饰的属性是静态的,则初始化的位置只能是
    • 定义时
    • 在静态代码块
    • 不能在构造器赋初值
  4. final类不可被继承,但是可以实例化对象
  5. 如果类中含有final方法,则该方法不可被重写,但是可以被继承
  6. 如果一个类已经是final类,则没必要将方法修饰成final方法;
  7. final 和 static 往往搭配使用,效率更高,不会导致类的加载(底层编译器做了优化处理)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值