网站首页 > 精选教程 正文
一、final关键字介绍及引入
首先说明一下final关键字的基本用法,final翻译过来就是最终的意思,也就是处于最后的位置,是不可被修改的,final关键字主要用于修饰类、方法和变量
二、final关键字修饰类
final修饰类表明该类不能被继承
1、简单案例分析
- 这里先是定义了一个Animal动物类,并且在其类前加上了final关键字
final class Animal{}
- 然后执行了一步这样的操作,用一个Wolf类去继承这个动物类,但是系统却报出了错误
class Wolf extends Animal{} //不能继承
- 从中可以看出,对于final关键字修饰的类,该类是不可以被继承的,这个我们前面讲static关键字讲到的一个知识点【工具类】可以联系起来,我们知道,工具类是不可以被继承的,只是将一个功能封装成为一个类,然后外界可以通过这个类去很快地实现一些功能,从而提高开发的效率,所以对于工具类,我们就可以给其加上final关键字
2、JDK中的final修饰类【String、System、StringBuilder】
对于JDK【Java开发工具包】中也是有许多我们常见的用final修饰的类,只是我们没有认真地去阅读API文档,所以不太了解
- 首先第一个就是String类
- 然后是System类
- 最后再来一个StringBuilder类
其实在JDK中还要很多我们熟知的类都是用final关键字修饰,表明这些类都是不可以被继承的,是一种Java官方提供给我们的工具类,我们可以直接拿来使用,调用其中的功能即可
三、final关键字修饰方法
final修饰方法表示该方法不能被重写
- 首先我们定义一个Peopel人类
class People{
public final void eat(){ //不能重写
System.out.println("人都要吃东西");
}
}
- 这里要注意,我并没有拿final关键字去修饰这个类,==因此是可以被继承的==,但是我们这个类中的eat()方法前加了一个final关键字,接着就定义一个Teacher老师类去继承它
class Student extends People{
@Override
public void eat() {
System.out.println("学生吃很多");
}
}
- 在继承子类中,我去重写了这个方法,然后就报出了这样的错误:point_down:
- 这就可以看出,被final修饰的方法是不可以被继承的子类所重写的,通俗一点讲就是【子类要老老实实地继承父类的方法,不可以做任何篡改】这点也是要记住哦:point_left:
四、final关键字修饰变量
final修饰成员变量表示该变量在进行声明时只能进行一次赋值,不可在后面修改其值(有且仅能被赋值一次)
- 我们知道,变量分为局部变量和成员变量,而成员变量又分为静态成员变量和实例成员变量,接下来让我们一起来看看吧:runner:
1、局部变量
- 对于局部变量来讲,可以是过程中定义的,也可以是形参变量
//1.局部变量
final double pi = 3.14;
//pi = 9.1; 不能第二次赋值
- 从代码和运行结果来看,应该是一目了然,不可以做二次赋值
public static void buy(final double discount){
//discount = 9.9; 不能第二次赋值
}
buy(7.9); //接值的时候为第一次赋值
- 这里的方法形参也是一样,如果定义成用final关键字修饰,那一定是不可以在方法体中对其进行赋值的,==因为你在调用这个方法的时候系统会让你一定要传入参数==
2、成员变量
接下来我们来看看final修饰的成员变量
public class Test2 {
//2.成员变量 - 静态成员变量(常量)
public static final String SchoolName = "清华大学";
//2.成员变量 - 实例成员变量(几乎不用)
private final String name = "猪刚鬣";
//SchoolName = "ddd"; 无法赋值
Test2 t2 = new Test2();
System.out.println(t2.name);
//t2.name = "猪八戒"; 无法赋值
}
- 好,我们先来看一下这个,在这个Test2类中,声明了一个静态成员变量,一个实例成员变量,都用final关键字对其进行了一个修饰,而且都有了一个初始值
- 所以在下面的代码中,无法对则会两个成员变量再次进行赋值,否则就会出现和上面那些报错一样的情况,算了,还是给出来看一下吧
五、final关键字注意事项
- 这里有些小伙伴可能就有疑惑了,这个final关键字难道真的是一毛不拔吗,无论是修饰类、方法还是变量,完全就不能修改里面的任何东西吗?
- 那倒也不是:point_up:
final修饰的变量是基本类型:那么变量存储的数据值不能发生改变:grin:
final修饰的变量是引用类型,其地址值不能改变,但指向对象的内容可以改变:heart_eyes:
class Teacher{
private String hoppy;
public Teacher(String hoppy) {
this.hoppy = hoppy;
}
public String getHoppy() {
return hoppy;
}
public void setHoppy(String hoppy) {
this.hoppy = hoppy;
}
}
final Teacher t = new Teacher("吃饭,睡觉,打豆豆");
System.out.println(t.getHoppy());
//t = null; //二次赋值
t.setHoppy("游泳");
System.out.println(t.getHoppy());
- 从上述代码可以看出,我通过final修饰的Teacher类型去new了一个对象,然后为其兴趣爱好赋了一个初值,那这个对象的地址能不能被修改呢,答案是【不可以】,这就算是一个二次赋值了,但是这个对象的内容我们是可以修改的,只需要调用这个类中的SetHoppy()方法就可以了,可以看出系统也是没有给我们报错
六、总结与回顾
- 在本文中,我们讲解了Java中的final关键字,知道了用final关键字修饰的类、方法和变量都是很严谨,不能做修改的,但是对于final修饰的引用类型变量,虽然其地址值不能改变,但指向对象的内容可以改变
猜你喜欢
- 2024-10-30 java 你用了这么久,真的明白static和final的区别么?
- 2024-10-30 JAVA笔记(十五)面向对象——关键字abstract、final
- 2024-10-30 「java面试_01」String类为什么是final
- 2024-10-30 Java编程思想:final 关键字 java中finally关键字
- 2024-10-30 Java八股文:final、finally、finalize之间有什么区别
- 2024-10-30 在java中String类为什么要设计成final?Java面试常见问题
- 2024-10-30 lambda中的外部局部变量为什么需要声明final?
- 2024-10-30 java笔记static和final用法 java static与final
- 2024-10-30 Java中为什么String类被定义成final
- 2024-10-30 Java中的final修饰符 java中final可以修饰接口吗
你 发表评论:
欢迎- 04-11Java面试“字符串三兄弟”String、StringBuilder、StringBuffer
- 04-11Java中你知道几种从字符串中找指定的字符的数量
- 04-11探秘Java面试中问的最多的String、StringBuffer、StringBuilder
- 04-11Python字符串详解与示例(python字符串的常见操作)
- 04-11java正则-取出指定字符串之间的内容
- 04-11String s1 = new String("abc");这句话创建了几个字符串对象?
- 04-11java判断字符串中是否包含某个字符
- 04-11关于java开发中正确的发牌逻辑编写规范
- 最近发表
-
- Java面试“字符串三兄弟”String、StringBuilder、StringBuffer
- Java中你知道几种从字符串中找指定的字符的数量
- 探秘Java面试中问的最多的String、StringBuffer、StringBuilder
- Python字符串详解与示例(python字符串的常见操作)
- java正则-取出指定字符串之间的内容
- String s1 = new String("abc");这句话创建了几个字符串对象?
- java判断字符串中是否包含某个字符
- 关于java开发中正确的发牌逻辑编写规范
- windows、linux如何后台运行jar(并且显示进程名)
- 腾讯大佬私人收藏,GitHub上最受欢迎的100个JAVA库,值得学习
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)