JavaSE——final关键字与常量

目录

一、final简述

1.1 final修饰的变量:

   1.1.1 修饰局部变量

   1.1.2 修饰引用:永远指向该对象

   1.1.3 修饰实例变量:必须手动赋值

1.2 final修饰的方法:无法被子类覆盖与重写

1.3 final修饰的类:无法被继承  

二、常量


一、final简述

  • java语言中的关键字
  • 表示最终的,不可变得
  • 可以修饰变量、方法、类等
  • final与abstract不能联合使用

1.1 final修饰的变量:

   1.1.1 修饰局部变量

    下面这段代码是一个错误的例子 ,是不能二次赋值的,k=300出错

    final int k =200;
    k=300;

    但是下面这个例子是正确的

    final int k ;
    k=300;

 综上所述:一旦给final修饰的变量赋值,便不可修改,不可重新修改,

                   简言之,final修饰的变量只能赋一次值

   1.1.2 修饰引用:永远指向该对象

 该引用只能指向一个对象,并且它永远指向该对象,无法再指向其他对象,但是该对象内部的数据可以被修改,说到底只要对象的地址不变即可

 并且在该方法执行过程中,该引用指向该对象之后,该对象不会被垃圾回收器回收,直到当前方法结束才会释放空间

   下面这两段代码都是错误的

   简言之,final修饰的变量只能赋一次值

   final Person p = new Person(30);
   p= new Person(40);
   final Person p = new Person(30);
   p= new Person(30);

 如下图所示,但是指向不能改动,那 int age 能改成其他数么?答案是可以的!

   1.1.3 修饰实例变量:必须手动赋值

  万变不离其宗:final修饰的变量只能赋值一次

  但是当我们不主动赋值的话,系统会赋默认值,那这样后我们还能手动赋值么?

  其实并不是我们想想的那样,就比如下一段代码,我们会出现编译时异常
 

public class User{

   final int age;
}

  

  final修饰的实例变量,系统不管赋默认值,因final修饰的变量只能赋值一次(SUN公司设计)

  当我们使用final修饰实例变量的时候,我们需要手动赋予他一个默认值,否则会出现编译时异常

1.2 final修饰的方法:无法被子类覆盖与重写

使用方式:

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

1.3 final修饰的类:无法被继承  

我们最熟悉的引用数据类型String类,就被final修饰,也就是说String不能被继承

具体的解释在下面这篇博客当中

JavaSE——String类详解(java.lang.String)_我爱布朗熊的博客-CSDN博客

被修饰的类无法被继承,比如 final class A,public final String

二、常量

final修饰的实例变量一般添加static修饰,联合修饰的变量称为常量

常量名建议全部大写,每个单词之间采用下划线连接

常量和静态变量都存储在方法区,并且都是在类加载时初始化

因为final修饰的实例变量一旦改变之后便不可更改,这样的话当我们new100个对象时,这个final修饰的实例变量全是一模一样的,这样很占用内存,不如与static共同修饰实例变量

public  static final double PI =3.1415926;

常量一般是公开的,因为公开之后你也无法修改

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我爱布朗熊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值