Java小白入门200例75之final修饰符详解
Posted 编程界明世隐
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java小白入门200例75之final修饰符详解相关的知识,希望对你有一定的参考价值。
作者简介
作者名:编程界明世隐
简介:CSDN博客专家,从事软件开发多年,精通Java、javascript,博主也是从零开始一步步把学习成长、深知学习和积累的重要性,喜欢跟广大ADC一起打野升级,欢迎您关注,期待与您一起学习、成长、起飞!
引言
很多Java初学者问我,新手明明很用心、很努力学习的Java知识,转头又忘记了,很让人犯愁,小白如何能够快速成长、成为大牛呢?
其实要成为大神的技巧只有一个:“多学多练”,于是明哥就整理了比较典型的练习实例,通过练习能够快速提升编码技巧和熟练度,让你在成为大佬的路上一去不复返(切记要亲手练习哦)!
导航
✪ Java小白入门200例系列目录索引
◄上一篇 74.static关键字(静态变量和静态方法)
►下一篇 76.main方法
概述
final 在 Java 中的意思是最终,表示对象是最终形态的,不可改变的意思。final 应用于类、方法和变量。
应用于 | 说明 |
---|---|
变量 | final 用在变量的前面表示变量的值不可以改变, 此时该变量可以被称为常量。 |
方法 | final 用在方法的前面表示方法不可以被重写。 |
类 | final 用在类的前面表示该类不能有子类, 即该类不可以被继承。 |
修饰变量
final 修饰的变量即成为常量,只能赋值一次,但是 final 所修饰局部变量和成员变量有所不同:
类型 | 说明 |
---|---|
局部变量 | final 修饰的局部变量必须使用之前被赋值一次才能使用。 |
成员变量 | final 修饰的成员变量在声明时没有赋值的叫 “空白 final 变量”。空白 final 变量必须 在构造方法或静态代码块中初始化。 |
局部变量
实例1
声明的同时赋值使用
package demo.demo75;
public class Final1 {
public static void main(String[] args) {
//定义final变量,并赋值
final int a = 10;
System.out.println(a);
}
}
如果我试图修改变量 a ,可以吗?答案是不可以,编译器会报错哦。
实例2
先声明,再赋值使用
package demo.demo75;
public class Final1 {
public static void main(String[] args) {
//定义final变量
final int a ;
//赋值
a = 10;
System.out.println(a);
}
}
同样的,如果想再次修改也是不可以的。
实例3
不赋值,直接使用的话(报错)
成员变量
实例1
定义并直接赋值
package demo.demo75;
public class Final2 {
//定义final成员变量,并直接赋值
final int a =10 ;
public void print() {
System.out.println(a);
}
public static void main(String[] args) {
new Final2().print();
}
}
实例2
定义空白final变量,然后用静态代码块赋值,这里要注意的是定义的时候要加上 static
package demo.demo75;
public class Final2 {
//定义final成员变量,并直接赋值
final static int a ;
static{
a = 10;
}
public void print() {
System.out.println(Final2.a);
}
public static void main(String[] args) {
new Final2().print();
}
}
实例3
定义空白final变量,然后用构造函数赋值,定义时不加 static
package demo.demo75;
public class Final2 {
//定义final成员变量,并直接赋值
final int a ;
public Final2() {
a = 10;
}
public void print() {
System.out.println(a);
}
public static void main(String[] args) {
new Final2().print();
}
}
引用类型
实例1
比如用定义一个fina数组,更改其元素
package demo.demo75;
public class Final3 {
public static void main(String[] args) {
final int[] arr={1,3,5,7,9};
// 对arr数组进行循环遍历
System.out.println("处理前数组内容如下:");
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + "\\t");
}
// 对数组元素进行修改
arr[3]=10;
System.out.println("\\n处理后的数组内容如下:");
// 遍历排序后的数组
for (int j = 0; j < arr.length; j++) {
System.out.print(arr[j] + "\\t");
}
}
}
运行结果:
处理前数组内容如下:
1 3 5 7 9
处理后的数组内容如下:
1 3 5 10 9
从上例可以看到是可以更改引用类型的内容,当然我们也可以自己定义对象。
实例2
自己定义对象
package demo.demo75;
public class Final4 {
public static void main(String[] args) {
final Student student ;
//实例化变量student
student = new Student("张三");
System.out.println(student.getName());
//更新名字
student.setName("王五");
System.out.println(student.getName());
}
}
//学生类
class Student{
private String name;//名字
public Student (String name){
this.name=name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
运行结果:
张三
王五
以上2例说明引用类型是可以被修改的,但只是修改其引用对象的内容,但引用地址是不可以修改的,看下面实例,我尝试将student指向其他对象。
实例3
我尝试将student对象指向null对象,编译器会提示报错,final类型的引用地址无法被修改。
修饰方法
final 修饰的方法不可被重写。
实例1
尝试重写final方法,提示不允许重写。
实例2
不可以重写,但是可以重载的。
package demo.demo75;
public class FinalMethod {
public final void test() {
}
}
class child extends FinalMethod{
//重载1
public void test(String name) {
}
//重载2
public void test(String name,String age) {
}
}
有人可能会说了,我就想在子类中定义一个方法,就跟父类的final一样的,行不行?答案是可以,但这就不是重写了,把父类的public改成private即可。
实例3
package demo.demo75;
public class FinalMethod {
private final void test() {
}
}
class child extends FinalMethod{
//定义test方法,但这不是重写了,因为父类的test是private的,子类无法看到
public void test() {
}
}
修饰类
final 修饰的类不能被继承,如果尝试这么做会提示编译错误。
小结
这节总结了“ final修饰符详解 ”,希望能对大家有所帮助,请各位小伙伴帮忙 【点赞】+【收藏】+ 【评论区打卡】, 如果有兴趣跟小明哥一起学习Java的,【关注一波】不迷路哦。
评论区打卡一波让我知道你,明哥会持续关注你的学习进度哦!
导航
✪ Java小白入门200例系列目录索引
◄上一篇 74.static关键字(静态变量和静态方法)
►下一篇 76.main方法
热门专栏推荐
1.Java小游戏系列(俄罗斯方块、飞机大战、植物大战僵尸等)
2.JavaWeb项目实战(图书管理、在线考试、宿舍管理系统等)
3.JavaScript精彩实例(飞机大战、扫雷、贪吃蛇、验证码等)
4.Java小白入门200例
5.从零学Java、趣学Java、以王者荣耀角度学Java
以上是关于Java小白入门200例75之final修饰符详解的主要内容,如果未能解决你的问题,请参考以下文章