java中final和static关键字总结

一.final总结

 


1.final修饰类:表示该类不可继承,final不能修饰interface接口

2.final修饰方法:表示该方法不能被子类覆盖(即子类不能重写父类的final方法,可以继承),final不能修饰构造函数

3.final修饰字段属性:表示属性值第一次初始化后不能被修改,final属性可以直接初始化或在构造函数中初始化,如果属性是直接初始化,则其值不能被其它函数(包括构造函数)修改

4.final修饰函数参数,参数值不能被函数修改

5.final修饰函数中的局部变量

局部变量被第一次初始化后不能被修改

public void hello() {
final String name;
name = "hi";       //ok
name = "hello";    //error
}
使用final的意义:
第一,为方法“上锁”,防止任何继承类改变它的本来含义和实现。设计程序时,若希望一个方法的行为在继承期间保持不变,而且不可被覆盖或改写,就可以采取这种做法。

第二,提高程序执行的效率,将一个方法设成final后,编译器就可以把对那个方法的所有调用都置入“嵌入”调用里(内嵌机制)。

注:
        如果一个方法前有修饰词private或static,则系统会自动在前面加上final。即private和static方法默认均为final方法。
        final并不涉及继承,继承取决于类的修饰符是否为private、default、protected还是public。也就是说,是否继承取决于这个方法对于子类是否可见。

 

二.static总结

 


1.static修饰成员函数:该成员函数不能使用this对象

   static不能修饰构造函数

   static不能修饰函数参数

   static不能修饰局部成员变量

2.static修饰成员字段

   当类被虚拟机加载时,首先按照字段声明的先后顺序对static成员字段进行初始化

3.static修饰语句块

    当类被虚拟机加载时,按照声明顺序先后初始化static成员字段和static语句块

   static所修饰的方法和字段是只属于类,所有对象共享。

   在static所修饰的函数和语句块中不能使用非static成员字段。

   在Java不能直接定义全局变量,是通过static来实现的

   在Java中没有const,不能直接定义常量,通过static final来实现

 注:
       1. main 方法为什么是static 的?
     因为main方法是程序的入口,在起动程序时尚未建立对象,所以main方法必须是static 的才能被调用,程序才能起动.当执行java calssname 时,classname自动调用静态main方法,相当于classname.main()。
       2. 静态方法不体现多态性,编译器只看编译时类型。

class A{
static void eat(){System.out.println(“this is static A.eat()”);}
}
class B extends A{
static void eat(){System.out.println(“this is static B.eat()”);}
}
class Test{
A a=new B(); a.eat();
//输出为:this is static A.eat()。
}
     3.当static修饰代码块时(注:此代码块要在此类的任何一个方法之外):
     static { }静态初始化块
     静态代码块在代码被装载进虚拟机时被执行。一般静态代码块被用来初始化静态成员。
     { }动态初始化块。
     创建对象时才执行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

那些年的代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值