Java之final的修饰方法和修饰变量

1.final 关键字的概述和使用

  概述:

         表示不可变的意思,翻译过来就是最终的,可以修饰类,方法,变量
  使用:
         修饰类:被final修饰的类不可以被继承
         修饰方法:被final修饰的方法不可以重写
         修饰变量:被final修饰的变量,只能赋值一次(常量)

被final修饰的类不可以被继承

public final class 类名称{}

//Scanner
//String
//Math
// 以上JDK中的API都是final修饰的,目的就是提供给我们使用,而不让我们改变其内容

 被final修饰的类不可以被重写

class Fu{
    public  void method(){

    }
    public final void method1(){

    }
}
class Zi extends Fu{
    @Override
    public void method() {
        super.method();
    }
}

public class Tests {
    public static void main(String[] args) {
        /*
        * 修饰方法:被final修饰的方法不可以重写
        * 格式:   权限修饰符 final 返回值类型 方法名称(参数列表){}
        *
        * */
    }
}

被final修饰的变量,只能赋值一次(常量)

public class Student {
    private String name;
    private int age;

    // 第二种情况
    //被final修饰的成员变量,无法使用set方法
    final String COUNTRY;

    //如果有两个构造方法的话,就会报错
    //因为java文件编译期间,编译器不知道你会使用哪一种构造方式
    //所以无参构造方法中就需要对其进行赋值
    //要求: 该类种所有的构造方法都要能给该常量赋值一次
    public Student(String country){

        COUNTRY = country;
    }
    //如果final修饰符的成员变量没有赋值
    //那么只能通过构造方法创建对象,只要你调用该构造方法,那么COUNTRY就一定有值
    public Student(String name, int age, String country){
        this.name = name ;
        this.age = age;
        COUNTRY = country;
    }

    public void shou(){
        System.out.println(name+","+age+","+COUNTRY);
    }
    //get/set方法
    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

public static void main(String[] args) {
        /*
        * final 修饰局部变量:
        *   修饰变量:是被final修饰的变量,只能赋值一次(常量)
        *   常量:常量名一般都是大写字母(Ctrl+Shift+U)
        *
        * */
        final int NUM = 10;  //定义常量NUM,同时赋值
        //NUM = 20;         //因为被final修饰的变量不可以在被更改
        int num2 = 10;
        num2 = 100;

        // 先定义常量
        final int NUM3;
        // 在给常量赋值
        NUM3 = 20;

        /*
        * 第一种情况:
        * 如果局部变量是引用数据类型
        *   使用final修饰引用数据类型的对象
        *       只能指向一个地址,地址不能再被修改
        *           但是不影响对象内部的成员变量值的修改
        *
        * */
        final Student s = new Student("张三"); //0X666
        //s = new Student("李四",30); //编译报错
        s.setAge(1);
        s.shou();

    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值