JAVA-final关键字

final

  1. final是java语言中的一个关键字
  2. fianl表示最终的,不可变的。
  3. final可以修饰变量以及方法,还有类等。
  4. final修饰的类无法继承。
  5. final修饰的方法无法被覆盖,被重写。
  6. final修饰的局部变量只能被赋值一次。
  7. final控制不了调用问题,final修饰的表示最后的,不能改变的。

final修饰的类

final class A{
    //final修饰的A类没有子孙
}

/*
class B extends A{ //编译报错
	  
      B类继承A类,相当于对于A类的功能进行扩展。如果你不希望别人对A类进行扩展,
  可以给A类加final关键字,这样的话A类就无法被继承了。

}
 */

final修饰的方法

class C{
    public final void doSome(){
        System.out.println("C");
    }
}

class D extends C{
    /*
    覆盖父类C中的doSome方法

    public void doSome(){
        System.out.println("D");
    }

    编译报错,覆盖的方法为final
     */
}

final修饰的变量

注意:final修饰的变量只能赋一次值

final修饰的局部变量

public static void main(String[] args) {
        //fianl修饰的局部变量
        final int k=100;
        /*
        k=200;重新赋值
        错误
         */

        final int m;
        m=200;
        //m=300;第二次赋值失败,编译报错
    }

final修饰的引用

public class Test {
    /*
    final修饰的变量只能赋一次值,“引用”也一样是变量

    final修饰的引用:该引用只能指向一个对象,并且它只能永远指向该对象,无法再指向其他对象。
并且在该方法执行过程中,该引用指向该对象之后,该对象不会被垃圾回收器回收,直到当前方法结束,才会释放空间。

    虽然final的引用指向对象A后,不能再重新指向对象B,但是对象A内部的数据可以被修改。
     */
    public static void main(String[] args) {

        //A a始终是一个变量,不过这里他有一个特殊的名字:引用
        final A a=new A(20);
        System.out.println(a.i);
        //a=new A(30); 编译报错
        //如果给a一个null:a=null; 不行,依然编译报错

        /*
        就如同final修饰的局部变量一般,只不过基本数据类型变成了引用数据类型
        final int i=20;
        i=30; 编译报错
         */
    }
}

class A2{
    int i;
    public A2(){

    }

    public A2(int i){
        this.i=i;
    }
}

final修饰的实例变量

public class Test {
    /*
    final修饰的变量只能赋值一次。
    
    注:实例变量如果没有手动赋值系统会默认赋值。
    
    final修饰的实例变量,要求必须手动赋值,系统不负责赋默认值。
    
    手动赋值可以在变量后面赋值,也可以在构造方法中赋值。
     */
    public static void main(String[] args) {

    }
}

class A {
    //final int a; 编译错误,final修饰的实例变量,系统不会赋默认值
    final int a = 0;

    //以下代码全部联合起来,b变量也只赋值了一次
    final int b;
    /*
    手动写出构造方法。如果不手动提供无参构造方法,系统将默认提供,且给b初始化,
但是b是final修饰的实例变量,系统不赋默认值,所以编译错误。
     */
    public A() {
        //实例变量是在构造方法执行的时候赋默认值
        this.b = 80;//在系统赋默认值之前给b赋默认值
    }
}
final修饰的实例变量一般添加static修饰
public class Test {
    public static void main(String[] args) {
        System.out.println(Chinese.COUNTRY);
    }
}

class Chinese{

    /*
    final修饰的实例变量一般添加static修饰。

    static final联合修饰的变量称之为“常量”。
    常量名建议全部大写,每个单词之间采用下划线衔接。

    常量:实际上常量和静态变量一样区别在于常量的值不能变。

    常量和静态变量,都是存储于方法区,并且都是在类加载时初始化。
    常量一般都是公共的,public修饰的。
     */
  String idCard;//身份证号码,每个人都不一样,对象级别的
    String name;//姓名,不同对象姓名不同。
    /*
    国家的值是一个固定值:“中国”
    实例变量在堆中,一个对象一份,一百个对象一百份
    实例变量既然使用final修饰了,说明该实例变量值不会随着对象的编号而变化。
    该实例变量面前应该添加:static关键字,变为静态的,存储在方法区。
     */
    static final String COUNTRY="中国";

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值