JAVA-final关键字

**

final关键字

**

1.final是一个关键字,表示最终的,不变的

2.final修饰的类无法被继承 //例如String类是使用final修饰,不能使用class MyString extends String

//编译报错   java: 无法从最终Hello.FinalTest进行继承
class Test2 extends FinalTest{

}

final class FinalTest
{

}

3.final修饰的方法无法被覆盖

//编译报错 java: Hello.Test2中的mm()无法覆盖Hello.FinalTest中的mm()被覆盖的方法为final

class Test2 extends FinalTest{
    void mm()
    {

    }
}

class FinalTest
{
    final void mm()
    {

    }
}

4.final修饰的变量一旦赋值后,不能被修改

final int k = 10;
k = 20;         //编译报错  java: 无法为最终变量k分配值

final int k;
k = 20;         //可以第一次赋值
k = 20          //编译报错  java: 无法为最终变量k分配值

5.final修饰的实例变量,必须手动赋值,不可二次赋值

class FinalTest
{
    //final int age;  //java: 变量 age 未在默认构造器中初始化
    final int age2 = 10;    //解决方案一

    //*****                 //解决方案二
    final int num;
    public FinalTest()
    {
        num = 1;
    }
    //*****
}

6.final修饰的引用,一旦指向某一个对象,不可以再次指向其他对象,它指向的对象无法被垃圾回收器回收

class Test2 {
    int id;
    public Test2(int id_)
    {
        this.id = id_;
    }
}

class FinalTest
{
    public static void main(String[] args) {
        final Test2 t = new Test2(10);
        //t = null;           //编译出错:java: 无法为最终变量t分配值
        t.id=20;    //正确,虽然final修饰的引用指向某个对象后不可以指向其他对象,但是它指向的对象的内部内存是可以修改的
    }
}

7.final修饰的实例变量,一般和static联合使用,称为常量

class Chinese
{
    //国籍
    //需求:每一个中国人的都是中国,而且国籍无法改变,为了防止国籍被改变,建议加上final修饰
    //final修饰的实例变量是不可变的,这种变量一般和static联合使用,称为常量【如果不加static,每次创建一个对象都会申请一个内存,造成空间浪费】
    //语法格式是: public static final 类型 常量名 = 值;eg:public static final double PI = 3.1415926;
    //JAVA中常量名要求却不大写,单词之间用下划线隔开
    public static final String GUO_JI = "中国";
}

class Math
{
    public static final double PI = 3.1415926;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值