关于final关键字的基础运用

关于final关键字的基础运用

首先明确final的含义:最终,不可改变的

final的四种基本用法

1.修饰一个类

格式:
权限修饰符 final 类名{
    //***
        }

此时final的含义是声明:当前这个类不能有任何的子类,也就是说该类的所有成员方法均不可以被覆盖重写,但可以对自己所继承父类的方法进行覆盖重写!!!
2.修饰一个方法

格式:
权限修饰符 final 返回值类型 方法名(参数列表){
    //***
        }

此时final的含义是声明:当前这个方法不能被覆盖重写,但不会对所在类其他方法产生影响,即为最终方法
注意:对于类和方法来说,final和abstract不能同时使用,因为矛盾——抽象方法所在类必须是抽象类,其方法没有内容,必须进行重写,而重写就需要子类,与final使用条件矛盾!!!
3.修饰一个成员变量

权限修饰符 final 变量名;

此时final的含义是声明:此变量不能再进行更改,只能赋值一次。

final int a;
       a=30;//正确
final int b=30;//正确

注意:
对于基本类型来说,不可更改是指的是变量的数值不可变;
对于引用类型来说,不可更改是指的是变量的地址值不可变。

//参考代码
class 项目二 {
    public static void main(String[] args) {
    Student one=new Student("友人A");
        System.out.println(one.getName());//输出友人A
        System.out.println(one);//Student@10f87f48
        one=new Student("宫园熏");
        System.out.println(one.getName());//输出宫园熏
        System.out.println(one);//Student@b4c966a
    }
}
class Student{
    private String name;

    public Student() {
    }

    public Student(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

但是

final Student one=new Student("友人A");
        one=new Student("宫园熏");//错误

因为引用变量改变的是地址,地址在此情况中不可改变,但可以直接改变内容

final Student one=new Student("友人A");
        one=one.setName("宫园熏");//错误
        one.setName("宫园熏");//正确
        System.out.println(one.getName());//宫园熏

4.修饰一个局部变量

格式:
权限修饰符 final 变量名=赋值内容;

此时final的含义是声明:变量不可更改。
注意:由于局部变量具有默认值(如string为null,int为0),此默认值相当于对变量进行一次赋值,会导致变量不可用,为了避免错误,必须要进行手动赋值

private final String name1="有马公生";//正确
    private final String name2;//错误,name2的值为null
    name="友人A";//错误

如果变量被final修饰,直接赋值和构造方法赋值二选一

private final String name="有马公生";
/*public Student(String name) {
        this.name = name;
    }*/会报错
private final String name;//正确,必须保证类当中所有的重载
                         //构造方法对final的所有成员变量赋值
    public Student() {
        this.name=赋值内容;
    }
    public Student(String name) {
        this.name = name;
    }
    /* public void setName(String name) {
        this.name = name;
    }*/同时将set方法删去
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值