final 关键字的作用及应用案例
final关键字的作用如下:
1、可以修饰成员变量,但不能对该成员变量进行修改;
2、可以修饰局部变量,但不能地该局部变量进行修改;
3、可以修饰成员方法(继承),但不能对父类成员方法进行重写;
4、可以修饰引用类型,不能对该引用类型进行修改,但可以对该引用类型下的值进行修改
下面对上面4个作用一一举例进行演示:
第一个作用的代码案例如下: 可以修饰成员变量,但不能对该成员变量进行修改
package cn.finall.com;
class Fu{
final int x = 10;
public void show() {
System.out.println("这是父类");
}
}
class Zi extends Fu{
}
public class DemoTest {
public static void main(String[] args) {
Zi z = new Zi();
z.x = 100;
System.out.println(z.x);
}
}
报错如下:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
The final field Fu.x cannot be assigned
at cn.finall.com.DemoTest.main(DemoTest.java:20)
简单说明:在Fu类中的成员变量 x 定义为 final 类型,但在第20行时,通过对象访问成员 x 并试图进行修改,所以就报错了。
第二个作用的代码案例如下:可以修饰局部变量,但不能地该局部变量进行修改
package cn.finall.com;
class Fu{
final int x = 10;
public void show() {
System.out.println("这是父类");
}
}
class Zi extends Fu{
}
public class DemoTest {
public static void main(String[] args) {
final int y=100;
System.out.println(y);
y = 1000;
System.out.println(y);
}
}
运行错误如下:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
The final local variable y cannot be assigned. It must be blank and not using a compound assignment
at cn.finall.com.DemoTest.main(DemoTest.java:20)
简单说明:在 main 方法中,定义了一个局部变量 y 为 final 类型,但在第20行时又对该局部变量进行修改,所以就报错了。
第三个作用的代码案例如下:可以修饰成员方法(继承),但不能对父类成员方法进行重写
package cn.finall.com;
class Fu{
final int x = 10;
final public void show() {
System.out.println("这是父类");
}
}
class Zi extends Fu{
public void show() {
System.out.println("这是子类");
}
}
public class DemoTest {
public static void main(String[] args) {
Zi z = new Zi();
z.show();
}
}
报错如下:
Exception in thread "main" java.lang.VerifyError: class cn.finall.com.Zi overrides final method show.()V
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at cn.finall.com.DemoTest.main(DemoTest.java:20)
简单说明:在 Fu 类中有 show()成员方法,但该方法的类型为 final 类型,在 Zi 类中也有 show() 方法,这样就涉及到对父类方法进行重写,但父类中为 final 类型,所以子类进行重写时就会报错了
第四个作用的代码案例如下:可以修饰引用类型,不能对该引用类型进行修改,但可以对该引用类型下的值进行修改
package cn.finall.com;
class Fu{
int x = 10;
public void show() {
System.out.println("这是父类");
}
}
class Zi extends Fu{
public void show() {
System.out.println("这是子类");
}
}
public class DemoTest {
public static void main(String[] args) {
// 定义引用类型为 final
final Fu f= new Fu();
System.out.println(f.x); //输出10
//可以为 final的引用类型的值进行改变,实际上只是该对象所对应的地址值不能被改变
f.x = 100;
System.out.println(f.x); //输出100
//但不能对该 final 类型的引用对象的地址值进行改变,下面的就会报错
f = new Fu();
}
}
报错如下:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
The final local variable f cannot be assigned. It must be blank and not using a compound assignment
at cn.finall.com.DemoTest.main(DemoTest.java:29)
简单说明:由于第20行中定义的引用类型为 final类型,说明该引用类型的地址值不能改变,那什么情况下该地址值为改变呢,就是对该引用变量重新创建一次对象,那么这时地址值就会发生变化,就是第29行的代码,所以就会报错了
final 关键字的作用及应用案例的更多相关文章
- java中final 关键字的作用
final 关键字的作用 java中的final关键字可以用来声明成员变量.本地变量.类.方法,并且经常和static一起使用声明常量. final关键字的含义: final在Java中是一个保留的关 ...
- JAVA中final关键字的作用
一.final关键字的功能概述 final关键字可以用来修饰引用.方法和类. 1.用来修饰一个引用 如果引用为基本数据类型,则该引用为常量,该值无法修改: 如果引用为引用数据类型,比如对象.数组,则该 ...
- final关键字的作用
final 可以修饰类.方法.变量. (1):final修饰的变量是一个常量,只能被赋值一次. 常量一般使用final声明,如: public static final String CHINA = ...
- java中的this、super、static、final、abstract关键字的作用
this关键字的作用 1.this是对象内部指代自身的引用,同时也是解决成员变量和局部变量同名问题: 2.this可以调用成员变量,不能调用局部变量: 3.this也可以调用成员方法,但在普通方法中可 ...
- Java基础(三)-final关键字分析
今天来谈谈final关键字的作用, 虽然有很多博文关于final进行了很深的研究,但还是要去记录下谈谈自己的见解加深下印象.下面直接进入主题: 一.final关键字的作用 1.被final修饰的类不能 ...
- PHP的final关键字、static关键字、const关键字
在PHP5中新增加了final关键字,它可以加载类或类中方法前.但不能使用final标识成员属性,虽然final有常量的意思,但在php中定义常量是使用define()函数来完成的. final关键字 ...
- final关键字总结
参考文章[https://www.cnblogs.com/xrq730/p/4820296.html] 前言:在Java中final作为最常见的一个关键字,平常用到的地方也很多,接下来就来看看什么是f ...
- final关键字的用法
final关键字的作用 1.被final修饰的类不能被继承 报错信息:cannot inherit from final 'com.dajia.test.Animal' 2.被final修饰的方法不能 ...
- final和abstract关键字的作用
final和abstract关键字的作用 final和abstract是功能相反的两个关键字,可以对比记忆 abstract可以用来修饰类和方法,不能用来修饰属性和构造方法:使用abstract修饰的 ...
随机推荐
- SOA&微服务&服务网格&高可用
SOA 架构 SOA 全称是:Service Oriented Architecture,“面向服务的架构”. 它是一种设计理念,其中包含多个服务,服务之间通过相互依赖最终提供一系列完整的功能. 各个 ...
- 微信公众平台.net HttpClient 异步客户端
微信公众平台.net HttpClient 异步客户端 该客户端实现了对微信公众平台的后台管理,包括获取Token,发生客服消息(文本,图片,语音,视频),自定义菜单的创建,查询,删除,查询订阅用户, ...
- 详解 Java NIO
文件的抽象化表示,字节流以及字符流的文件操作等属于传统 IO 的相关内容,我们已经在前面的文章进行了较为深刻的学习了. 但是传统的 IO 流还是有很多缺陷的,尤其它的阻塞性加上磁盘读写本来就慢,会导致 ...
- RockChip RK3326 系统编译问题总结
1. 序言 本文主要记录了RK3326平台系统编译过程中遇到的各种问题,并加以解决! 环境: 宿主Linux:Ubuntu 16.04 目标机:RK3326 (64bit) Toolchain:gcc ...
- Shell 实例:备份最后一天内所有修改过的文件
在一个"tarball"中(经过 tar 和 gzip 处理过的文件)备份最后 24 小时之内当前目录下所有修改的文件. 程序代码如下: #!/bin/bash BACKUPFIL ...
- C++的静态联编和动态联编
联编的概念 联编是指一个计算机程序自身彼此关联的过程,在这个联编过程中,需要确定程序中的操作调用(函数调用)与执行该操作(函数)的代码段之间的映射关系. 意思就是这个函数的实现有多种,联编就是把调用和 ...
- 数据库内连接GROUP BY查询外键表数据行的总数
最近看了看SQL,刚好遇到这个问题. INNER JOIN [外键表] ON [主键表] 内链接,用 GROUP BY 分组外键数据,COUNT(*)计算该外键数据总行数,最后用 ORDER BY 排 ...
- MVC 获取控制器名称和Action名称(转载)
MVC在filter中如何获取控制器名称和Action名称 使用ActionExecutingContext对象可以获取控制器名称.Action名称.参数名称以及参数值.路由和Action返回值不 ...
- repository和repertory
在研究.net core的时候知道了仓储这个概念,并发现两个单词repository和repertory 两者都有仓库,储藏所,储藏的意思,repository还指知识渊博的人,repertory除了 ...
- NULL 和 0
Question: What is the difference from NULL and "0"? Example: return NULL; return 0; Answer ...