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 关键字的作用及应用案例的更多相关文章

  1. java中final 关键字的作用

    final 关键字的作用 java中的final关键字可以用来声明成员变量.本地变量.类.方法,并且经常和static一起使用声明常量. final关键字的含义: final在Java中是一个保留的关 ...

  2. JAVA中final关键字的作用

    一.final关键字的功能概述 final关键字可以用来修饰引用.方法和类. 1.用来修饰一个引用 如果引用为基本数据类型,则该引用为常量,该值无法修改: 如果引用为引用数据类型,比如对象.数组,则该 ...

  3. final关键字的作用

    final 可以修饰类.方法.变量. (1):final修饰的变量是一个常量,只能被赋值一次. 常量一般使用final声明,如: public static final String CHINA = ...

  4. java中的this、super、static、final、abstract关键字的作用

    this关键字的作用 1.this是对象内部指代自身的引用,同时也是解决成员变量和局部变量同名问题: 2.this可以调用成员变量,不能调用局部变量: 3.this也可以调用成员方法,但在普通方法中可 ...

  5. Java基础(三)-final关键字分析

    今天来谈谈final关键字的作用, 虽然有很多博文关于final进行了很深的研究,但还是要去记录下谈谈自己的见解加深下印象.下面直接进入主题: 一.final关键字的作用 1.被final修饰的类不能 ...

  6. PHP的final关键字、static关键字、const关键字

    在PHP5中新增加了final关键字,它可以加载类或类中方法前.但不能使用final标识成员属性,虽然final有常量的意思,但在php中定义常量是使用define()函数来完成的. final关键字 ...

  7. final关键字总结

    参考文章[https://www.cnblogs.com/xrq730/p/4820296.html] 前言:在Java中final作为最常见的一个关键字,平常用到的地方也很多,接下来就来看看什么是f ...

  8. final关键字的用法

    final关键字的作用 1.被final修饰的类不能被继承 报错信息:cannot inherit from final 'com.dajia.test.Animal' 2.被final修饰的方法不能 ...

  9. final和abstract关键字的作用

    final和abstract关键字的作用 final和abstract是功能相反的两个关键字,可以对比记忆 abstract可以用来修饰类和方法,不能用来修饰属性和构造方法:使用abstract修饰的 ...

随机推荐

  1. leetcode — generate-parentheses

    import java.util.ArrayList; import java.util.Arrays; import java.util.List; /** * Source : https://o ...

  2. maven package,clean,install,compile命令

    1.Ideal中显示 2.各个阶段干嘛的? compile,编译命令,会在项目路径下生成一个target目录,在该目录中包含一个classes文件夹,里面全是生成的class文件及字节码文件 pack ...

  3. PHP 正则表达式资料

    正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串.将匹配的子串做替换或者从某个串中取出符合某个条件的子串等. 举例来说,正则表达式的一个 ...

  4. C语言指针基本操作

    C语言指针基本操作 指针  指针介绍 如果说C语言最有魅力的地方在哪,那么毋庸置疑,非指针莫属了. 众所周知,C语言中每个变量都有一个内存地址,可以通过&进行访问.指针是一个变量,它的值是一个 ...

  5. C++ 输入、输出运算符重载

    C++ 能够使用流提取运算符 >> 和流插入运算符 << 来输入和输出内置的数据类型.我们可以重载流提取运算符和流插入运算符来操作对象等用户自定义的数据类型. 在这里,有一点很 ...

  6. C 语言精髓之变参函数

    我们以 printf 这个 very 熟悉的函数为例,来分析一下变参函数.先看下 printf 函数的定义: int printf(const char *fmt, ...) { int i; int ...

  7. 简要描述 JavaScript 中定义函数的几种方式

    JavaScript 中,有三种定义函数的方式: 1.函数语句:即使用 function 关键字显式定义函数.如: function f(x){ return x+1; }  2.函数定义表达式:也称 ...

  8. windows 安装 keras

    pip install keras 报错了,看报错信息是卡在scipy上了,查了一下 https://stackoverflow.com/questions/42240720/python-scipy ...

  9. [PHP]算法- 判断是否为二叉搜索树的后序遍历序列的PHP实现

    二叉搜索树的后序遍历序列: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. 思路: 1.后序遍历是 左右中 ...

  10. springMVC 拦截器源码解析

    前言:这两天学习了代理模式,自然想到了 springmvc 的 aop 使用的就是动态代理,拦截器使用的就是 jdk 的动态代理.今天看了看源码,记录一下.转载请注明出处:https://www.cn ...