Java全面细致讲解final的使用

 更新时间:2022年05月30日 09:38:20   作者:小老师ir  
关于final关键字,它也是我们一个经常用的关键字,可以修饰在类上、或者修饰在变量、方法上,以此看来定义它的一些不可变性!像我们经常使用的String类中,它便是final来修饰的类,并且它的字符数组也是被final所修饰的。但是一些final的一些细节你真的了解过吗

一、理解

final:最终的

二、作用

final 可以用来修饰的结构:类、方法、变量

1. 修饰-类

final 用来修饰一个类,表示此类不能被其它类所继承,提高安全性,提高程序的可读性。

比如:String类、System类、StringBuffer类…

代码演示:

final class A{
}
class B extends A{ //错误,不能被继承。
}

2. 修饰-方法

final 用来修饰方法:表明此方法不能被子类重写。

比如:Object类中getClass();

代码演示:

class A {
   public final void print() {
     System.out.println("A");
   } 
}
class B extends A {
    public void print() { 
    // 错误,不能被重写。
    } 
}

3. 修饰-变量

final 修饰的变量(成员变量或局部变量)称为常量。名称大写,且只能被赋值一次。

static final 用来修饰属性:全局常量。

代码演示:

class A {
   private final String INFO = "嘻嘻"; //声明常量
     public void print() {     
     //INFO = "哈哈";
     //The final field A.INFO cannot be assigned
     } 
}

3.1 修饰-成员变量(属性)

final 标记的成员变量必须在声明(显式初始化)时或在 每个构造器中或代码块中显式赋值,然后才能使用。

如:final double MY_PI = 3.14;

3.2 修饰-局部变量

使用 final 修饰局部变量时,表明此形参是一个常量。当我们调用此方法时,给常量形参赋一个实参。一旦赋值以后,就只能在方法体内使用此形参,且不能进行重新赋值。

三、经典题目

//题目一:
public class Test1 {    
        public int addOne(final int x) {
         //   return ++x;
         //Cannot assign a value to final variable 'x'
            return x + 1;
        }
}
//题目二:
public class Something {
    public static void main(String[] args) {
       Other o = new Other();
       new Something().addOne(o);
    }
    public void addOne(final Other o) {
       // o = new Other();
       o.i++;
     } 
}
class Other {
   public int i; 
}
//题目三:
class Root{
	static{
		System.out.println("Root的静态初始化块");
	}
	{
		System.out.println("Root的普通初始化块");
	}
	public Root(){
		super();
		System.out.println("Root的无参数的构造器");
	}
}
class Mid extends Root{
	static{
		System.out.println("Mid的静态初始化块");
	}
	{
		System.out.println("Mid的普通初始化块");
	}
	public Mid(){
		super();
		System.out.println("Mid的无参数的构造器");
	}
	public Mid(String msg){
		//通过this调用同一类中重载的构造器
		this();
		System.out.println("Mid的带参数构造器,其参数值:"
			+ msg);
	}
}
class Leaf extends Mid{
	static{
		System.out.println("Leaf的静态初始化块");
	}
	{
		System.out.println("Leaf的普通初始化块");
	}	
	public Leaf(){
		//通过super调用父类中有一个字符串参数的构造器
		super("小老师ir");
		System.out.println("Leaf的构造器");
	}
}
public class LeafTest{
	public static void main(String[] args){
		new Leaf(); 
		System.out.println();
		new Leaf();
	}
}
/*output:
Root的静态初始化块
Mid的静态初始化块
Leaf的静态初始化块
Root的普通初始化块
Root的无参数的构造器
Mid的普通初始化块
Mid的无参数的构造器
Mid的带参数构造器,其参数值:小老师ir
Leaf的普通初始化块
Leaf的构造器
Root的普通初始化块
Root的无参数的构造器
Mid的普通初始化块
Mid的无参数的构造器
Mid的带参数构造器,其参数值:小老师ir
Leaf的普通初始化块
Leaf的构造器
*/

到此这篇关于Java全面细致讲解final的使用的文章就介绍到这了,更多相关Java final内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java的string类为什么是不可变的

    Java的string类为什么是不可变的

    这篇文章主要介绍了Java的string类为什么是不可变的,总结了三个答案,需要的朋友可以参考下
    2014-04-04
  • 基于Java实现Actor模型

    基于Java实现Actor模型

    Actor模型是一种常见的并发模型,与最常见的并发模型—共享内存(同步锁)不同,它将程序分为许多独立的计算单元—Actor,文中有详细的代码示例,感兴趣的同学可以参考阅读
    2023-05-05
  • Java实现音频转文本的示例代码(语音识别)

    Java实现音频转文本的示例代码(语音识别)

    Java中实现音频转文本通常涉及使用专门的语音识别服务,本文主要介绍了Java实现音频转文本的示例代码(语音识别),具有一定的参考价值,感兴趣的可以了解一下
    2024-05-05
  • Java读写txt文件时防止中文乱码问题出现的方法介绍

    Java读写txt文件时防止中文乱码问题出现的方法介绍

    这篇文章主要介绍了Java读写txt文件时防止中文乱码问题出现的方法,同时需要注意系统默认的文本保存编码的设置,需要的朋友可以参考下
    2015-12-12
  • 解决Maven项目加载spring bean的配置xml文件会提示找不到问题

    解决Maven项目加载spring bean的配置xml文件会提示找不到问题

    这篇文章主要介绍了解决Maven项目加载spring bean的配置xml文件会提示找不到问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • obix协议在java中的配置和使用详解

    obix协议在java中的配置和使用详解

    这篇文章主要给大家介绍了关于obix协议在java中的配置和使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-08-08
  • IDEA设置多行展示导航栏方式

    IDEA设置多行展示导航栏方式

    在IDEA中开启多行导航栏可以增加工作效率,具体操作步骤包括访问“File”,进入“Settings”,选择“Editor”后修改“EditorTabs”设置中的“Show tabs in one row”选项,取消勾选后保存即可,这使得在打开多个文件时,导航栏可以显示更多标签,便于管理和查看代码
    2024-09-09
  • Java几种常用JSON库性能比较详解

    Java几种常用JSON库性能比较详解

    这篇文章主要介绍了Java几种常用JSON库性能比较详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-06-06
  • 使用jsoup解析html的table中的文本信息实例

    使用jsoup解析html的table中的文本信息实例

    今天小编就为大家分享一篇使用jsoup解析html的table中的文本信息实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-05-05
  • 为什么SpringBoot的jar可以直接运行

    为什么SpringBoot的jar可以直接运行

    这篇文章主要介绍了为什么SpringBoot的jar可以直接运行,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-05-05

最新评论