Java 基础 静态 static 和 最终 final

静态 static 和 最终 final

static (静态的)

static可以用来修饰 属性,方法,代码块,内部类

static修饰属性时,该属性变为静态属性

实例变量:该变量属于对应的实例,需要new一个实例之后才能通过相应的方法或是直接调用该属性,每一个实例都有其特有的实例变量值,不同实例修改的属性不会互相影响。

静态变量:该变量属于一整个类,当类被加载的时候,该变量也被加载,可以通过“类名.静态变量”的方式去调用。当有实例改变过静态变量的值的时候,其他变量调用该静态变量时得到的值也是改变过的值。例如Math.PI, System.out

tips:静态变量早于实例对象的创建,并且因为类只加载一次,所以静态变量也只有一份存在静态方法区中。

静态变量实例变量
实例对象可调用可调用
可调用不可调用

总而言之,判断时根据变量的生命周期来判断,晚创建的可以调用早创建的。

static修饰方法时,该属性变为静态方法

非静态方法:当被调用时加载

静态方法:当类生成时就被加载

静态方法非静态方法
实例对象可调用可调用
可调用不可调用

tips:在静态方法中只能调用静态变量,不能调用实例所拥有的非静态变量,而且不能使用this,super等关键字,因为this和super都是基于对象实现的。

什么时候使用static关键字?

修饰属性:当该属性被共同使用,多个对象实例共享的时候

修饰方法:操作静态属性的方法,一般定义为静态方法,工具类中的方法,一般也定义为static,这样就不需要定义工具类的实例,可以直接通过类名调用其方法,例如Math.Random()

优势:使用方便,类内分享

劣势:生命周期过长,占用空间久

final(不变的,最终的)

final 可以修饰类,变量,方法

final修饰类:该类不可被继承 例如String,System类

final修饰方法:该方法不能被重写 例如 getclass()方法

final修饰变量:该变量变为常量

修饰属性(全局变量):全局常量 --- 可以赋值的位置(显式初始化,构造器初始化,代码块初始化)如何去理解呢?因为类创建完成,属性的内存空间就需要被创建完毕,又因为该属性由final修饰不可以改变,所以必须在类创建的时候就给其赋值,类是通过构造器去创建的,所以在赋值顺序在构造器以前的赋值方式,都是可以给final修饰的变量赋值的。变量赋值顺序 代码块

class TestFinal{
    //方式1
    final int i = 1;
​
    //方式2
    final int a;
    public TestFinal(){
        a = 1;
    }
​
    //方式3
    final int b;
    {
        b = 1;
    }
}

修饰局部变量:局部常量 --- 最重要注意修饰方法参数的时候,表明该变量在方法中不能再二次赋值,只能被调用

private static void test(final int a) {
   //a++; 错误的,final修饰不能被修改只能被调用
   System.out.println(a);
}

tips:当final和static结合使用时 用来修饰属性 --- 将该属性变为全局常量

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值