关于Java中final的使用

final 本意是“不可变化的”,其修饰的类不能被继承,修饰的变量不能被更改,修饰的方法不能被重载,下面依次进行说明。

修饰的类不能被继承

通常当某个类设计为final时,就表明了该类不希望被继承,final类中,所有的方法都隐式的指明为final修饰。
以String类来举例:
自定义其子类MyString 继承于String,报错:无法继承final类型的的String

public class MyString  extends String{
}//报错:Cannot inherit from final 'java.lang.String'

修饰的变量不能被更改

final一般用来修饰基本类型的变量,如int,char等,其修饰后类型不可再次赋值,通常用于基础变量的声明;

    public static void main(String[] args) {
        final int age=3;
        age=4;//编译报错:Cannot assign a value to final variable 'age'
    }

若修改引用类型变量,则修改后其引用不可被更改,但引用所指向的实例可以被修改(即final只是用来修改该引用),例如:

public class Main {
    public static void main(String[] args) {
        final Cat c=new Cat();
        c=new Cat();//编译报错:Cannot assign a value to final variable 'c'
    }
}
class Cat{
    public String name;
}

但可以修改其实例:

public class Main {
    public static void main(String[] args) {
        final Cat c=new Cat();
        c.name="helloword";
        c.name="hello";
    }
}
class Cat{
    public String name;
}

修饰的方法不能被重载

使用final修改方法后,相当于该方法为private,为该类独占,当子类实现父类的方法时,无法重写父类的final方法,在Java早期时,如果一个方法声明为final,则将同意编译器将该方法的所有调用转为内嵌调用形式,以此来节省内存开销。
现在此操作已由JVM自动处理, 只有该方法设计为禁止重写时才设计成final.

static final

一个既有static又有final修饰的变量只占一段不能被改变的内存空间,通常变量名称用大写字母来表示,并以下划线来分割单词.

空白final

final允许先进行声明而不初始化,但必须保证在使用前前对final进行初始化,此种用法保证了final的灵活性,例如,使用构造器进行final的初始化:

public class Car {
   final String name;
    public Car(){
        name="";
    }
}

加载

类的代码是独立保存在自己的class文件中,只有在初次使用的时候才进行加载,通常是发生在第一个创建类的第一个对象时,但当访问static所修饰的方法或属性时,也会发生加载。
当类加载完毕后 ,开始创建对象,基本类型会置为默认值,引用类型会置为null;
构造器执行,变量进行初始化;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值