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修饰的 ...
随机推荐
- cvte前端笔试后的js原型总结
最近实习生招聘已经开始了,昨天晚上也终于迎来了第一场笔试,笔试的公司是cvte,笔试题总共27题,25道不定项还有2道编程题,虽然出的都是前端题,但是因为之前没有好好准备,还是很多做的不是很好o(╥﹏ ...
- tensorflow实现循环神经网络
包括卷积神经网络(CNN)在内的各种前馈神经网络模型, 其一次前馈过程的输出只与当前输入有关与历史输入无关. 递归神经网络(Recurrent Neural Network, RNN)充分挖掘了序列数 ...
- epoll的高效实现原理
epoll的高效实现原理 原文地址:http://blog.chinaunix.net/space.php?uid=26423908&do=blog&id=3058905 开发高性能网 ...
- eclipse4.6.1安装SpringSource Tool Suite(sts-eclipse)插件
1. Spring Tool Suite(sts)简介 Spring Tool Suite(sts)就是一个基于Eclipse的开发环境, 用于开发Spring应用程序.它提供了一个现成的使用环境来实 ...
- DataTable不能通过已删除的行访问该行的信息解决方法
使用dt.Rows[0]["name", DataRowVersion.Original]可以获取
- Bootstrap学习记录-1.Navigation
Bootstrap中的导航栏功能需要添加bootstrap.css.jquery.js.bootstrap.js,其中,jquery.js文件是bootstrap.js文件中必须的,否则就会抛出异常信 ...
- AJAX 基本结构 数据加载
AJAX -- 网页数据异步加载 .ashx 一般处理程序 json 数据格式,在不同的语言之间传递数据 对象格式: "{"key":"value& ...
- 【HttpWeb】Post和GET请求基本封装
别的不多少了直接代码就行了: using System; using System.Collections.Generic; using System.Linq; using System.Text; ...
- HTTP 错误 500 调用loadlibraryex失败
HTTP 错误 500.0 - Internal Server Error 调用 LoadLibraryEx 失败,在 ISAPI 筛选器 C:\Windows\Microsoft.NET\Frame ...
- When should you use a class vs a struct in C++?
Question: In what scenarios is it better to use a struct vs a class in C++? Answer: The only differe ...