Java关键字static和final

面试题1:为什么接口当中的成员变量都是public static final?
答案:
public:接口可以被不同包的不同类实现,是公有的。
static:保证一个类继承多个接口时,即使存在同名变量也不会混淆。如果每个接口都含有一个名为a的成员变量,那么在该类中可以通过接口1.a,接口2.a,接口3.a来调用a。让接口写起来更加便捷,不用在命名上顾虑太多。
final:接口是一种协议,协议是所有实现接口的类都必须遵守的。如果变量不是final,那么每个实现接口的类就可以更改这个变量的值,也就违反了OCP原则。
(OCP原则:一个软件应该对扩展开放,对修改关闭。)

面试题2:static 和 final 的区别
答案:

static是静态修饰关键字,可以修饰变量和程序块以及类方法:
1、当定义一个static的变量的时候jvm会将将其分配在内存堆上,所有程序对它的引用都会指向这一个地址而不会重新分配内存。
2、当static修饰一个程序块的时候(也就是直接将代码写在static{…}中)时候,虚拟机就会优先加载静态块中代码,这主要用于系统初始化。
3、当static修饰一个类方法时候你就可以直接通过类来调用而不需要新建对象。

final可以修饰变量、方法及类:
1、当定义一个final变量时,jvm会将其分配到常量池中,程序不可改变其值;
2、当修饰一个方法时,该方法在子类中将不能被重写;
3、当修饰一个类时,该类不能被继承。

static变量:
被static修饰的变量,叫静态变量或类变量;没有被static修饰的变量,叫实例变量。

对于静态变量在内存中只有一个拷贝(节省内存),JVM只为静态分配一次内存,在加载类的过程中完成静态变量的内存分配,可用类名直接访问(方便),当然也可以通过对象来访问(但是这是不推荐的)。

对于实例变量,没创建一个实例,就会为实例变量分配一次内存,实例变量可以在内存中有多个拷贝,互不影响(灵活)。

static方法:
静态方法可以直接通过类名调用,任何的实例也都可以调用,因此静态方法中不能用this和super关键字,不能直接访问所属类的实例变量和实例方法(就是不带static的成员变量和成员方法),只能访问所属类的静态成员变量和成员方法。
因为static方法独立于任何实例,因此static方法必须被实现,而不能是抽象的abstract!

static和final的对比:
1、static 强调只有一份,final 说明是一个常量,final定义的基本类型的值是不可改变的,但是fianl定义的引用对象的值是可以改变的
2、在方法中将参数指明为final时,在使用该方法时,可以读参数但是无法使用该参数。

static加载类的动作只发生一次,发生在类加载时加载静态变量和静态方法时。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值