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修饰的 ...
随机推荐
- vector、deque、stack、queue、list以及set的使用
注意:以下测试案例都要加上相应的头文件,必要时要加上algorithm文件. 1.vector 连续存储结构,每个元素在内存上是连续的:支持高效的随机访问和在尾端插入/删除操作,但其他位置的插入/删除 ...
- zabbix 监控基础
一.监控系统基础概念 1.监控系统的工作内容 数据采集 --> 数据存储 --> 数据展示 --> 报警 传感器 时间序列数据 趋势图 采集到的数据超出阈(yu)值 2 ...
- Storm 性能优化
目录 场景假设 调优步骤和方法 Storm 的部分特性 Storm 并行度 Storm 消息机制 Storm UI 解析 性能优化 场景假设 在介绍 Storm 的性能调优方法之前,假设一个场景:项目 ...
- SpringBoot JPA + H2增删改查示例
下面的例子是基于SpringBoot JPA以及H2数据库来实现的,下面就开始搭建项目吧. 首先看下项目的整体结构: 具体操作步骤: 打开IDEA,创建一个新的Spring Initializr项目, ...
- nginx配置指南
nginx(读作engine x)是一款设计优秀的Http服务器, 其占用内存少, 负载能力强且稳定性高, 正在被越来越多的用户所采用. nginx可以为HTTP, HTTPS, SMTP, POP3 ...
- [NOI 2015]品酒大会
Description 题库链接 \(n\) 杯鸡尾酒排成一行,其中第 \(i\) 杯酒 (\(1 \leq i \leq n\)) 被贴上了一个标签 \(s_i\),每个标签都是 \(26\) 个小 ...
- Oracle入门《Oracle介绍》第一章1-1
1.Oracle 简介 a.对象关系型的数据库管理系统 (ORDBMS) b.在管理信息系统.企业数据处理.因特网及电子商务等领域使用非常广泛 c.在数据安全性与数据完整性控制方面性能优越 d.跨操作 ...
- 在C语言结构体中添加成员函数
我们在使用C语言的结构体时,经常都是只定义几个成员变量,而学过面向对象的人应该知道,我们定义类时,不只是定义了成员变量,还定义了成员方法,而类的结构和结构体非常的相似,所以,为什么不想想如何在C语言结 ...
- html页面边框的简单设置方法
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- JavaScript 把字符串类型转换成日期类型
今天在写习题时,遇到些小问题,在这里把答案分享给大家,希望能帮助到大家! 一.把字符串转换成日期类型 var str = "1997-3-12"; var d = new Date ...