final、static说明

一、static

1、static修饰的字段,所有对象共用一个空间(在perm中)。

       非static修饰的字段,所有对象都有自己的空间(在heap中)。

2、static修饰的字段有两种调用方法。

       a、通过new一个对象去调用

       b、通过类名.字段去调用

 

二、final

1、对于final修饰的成员变量来讲,必须在声明时或构造方法中对其赋值------>在使用前总是被初始化的原因。

2、不能因为是final修饰的变量就认为在编译时可以知道他的值。

       例:final int i = rand.nextInt(20);

3、类中所有private方法都隐式地指定为final的。

 

三、final与static

1、定义为final说明它是一个常量,定义为static则强调只有一份。

2、static修饰的变量赋值发生在类加载阶段(static赋值发生在初始化阶段、static fianl 修饰发生在准备阶段,这两个阶段都属于类加载阶段),类加载只发生一次,class对象也只有一个。

3、常量在编译阶段会存入调用类的常量池中(注:javap -verbose xx.class 查看字节码)

例:

    class 被调用类 {

        static int a = 123;

        static final int b = 123;

    }

    class 调用类 {

        被调用类  被调用类 = new 被调用类();    //调用类的常量池中有被调用类的符号引用

        被调用类.a;    //a不是常量,所以调用类的常量池中有被调用类的符号引用,没有“123”。被调用类会被初始化

        被调用类.b;    //b是常量,所以调用类的常量池中没有被调用类的符号引用,有“123”。被调用类不会被初始化

    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值