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修饰符详解的主要内容,如果未能解决你的问题,请参考以下文章

Java小白入门200例109之Java Map集合详解

Java小白入门200例111之Collections类操作集合详解

Java小白入门200例69之构造方法详解

Java小白入门200例45之 for 语句详解

Java小白入门200例48之 continue语句详解

Java小白入门200例47之 break语句详解