一,概述

final关键字代表最终、不可改变的。
常见四种用法:
1. 可以用来修饰一个类
2. 可以用来修饰一个方法
3. 还可以用来修饰一个局部变量
4. 还可以用来修饰一个成员变量

二,final修饰类:太监类,没有儿子

1)当final关键字用来修饰一个类的时候,格式:
public final class 类名称 { // ... }含义:当前这个类不能有任何的子类。(太监类)eg:定义一个final类pubilc final MyClass,继承报错!

2)注意:一个类如果是final的,那么其中所有的成员方法都无法进行覆盖重写(因为没儿子。)

三,final修饰方法

1.含义:

当final关键字用来修饰一个方法的时候,这个方法就是最终方法,也就是不能被覆盖重写。

2.格式:

修饰符 final 返回值类型 方法名称(参数列表) {// 方法体
}

3.注意事项:

对于类、方法来说,abstract关键字和final关键字不能同时使用,因为矛盾。有抽象方法的abstract类被继承时,其中的方法必须被子类Override,而final不能被Override。
public abstract class Fu {public final void method() {System.out.println("父类方法执行!");}public abstract /*final*/ void methodAbs() ; //有final会报红}
public class Zi extends Fu {@Overridepublic void methodAbs() {}// 错误写法!不能覆盖重写父类当中final的方法
//    @Override
//    public void method() {
//        System.out.println("子类覆盖重写父类的方法!");
//    }
}

四,final修饰局部变量

        // 正确写法!只要保证有唯一一次赋值即可final int num3;num3 = 30;
对于基本类型来说,不可变说的是变量当中的数据不可改变
对于引用类型来说,不可变说的是变量当中的地址值不可改变

eg:一个标准类:

public class Student {private String name;public Student() {}public Student(String name) {this.name = name;}public String getName() {return name;}public void setName(String name) {this.name = name;}
}

Main函数里:

1)若无final修饰

        Student stu1 = new Student("赵丽颖");System.out.println(stu1);  // 打印地址System.out.println(stu1.getName()); // 赵丽颖stu1 = new Student("霍建华");System.out.println(stu1);System.out.println(stu1.getName()); // 霍建华

结果输出:地址不同 

2)若用final修饰,地址值不可改变,否则报红

但是,地址值虽然不能变,内容可以变(地址所指向的对象可以变)。

 final Student stu2 = new Student("高圆圆");// 错误写法!final的引用类型变量,其中的地址不可改变
//        stu2 = new Student("赵又廷");System.out.println(stu2.getName()); // 高圆圆stu2.setName("高圆圆圆圆圆圆");System.out.println(stu2.getName()); // 高圆圆圆圆圆圆

五,final修饰成员变量

对于成员变量来说,如果使用final关键字修饰,那么这个变量也照样是不可变。

1)由于成员变量具有默认值,所以用了final之后必须手动赋值,不会再给默认值。

2)对于final的成员变量,要么使用直接赋值,要么通过构造方法赋值。二者选其一。

3)必须保证类当中所有重载的构造方法,都最终会对final的成员变量进行赋值。

如果选择在构造方法中赋值,则要把setname( )函数取消掉

public class Person {private final String name/* = "鹿晗"*/;public Person() {name = "关晓彤";}public Person(String name) {this.name = name;}public String getName() {return name;}//    public void setName(String name) {
//        this.name = name;
//    }
}

Java中final关键字相关推荐

  1. java中final关键字的使用

    final 中文翻译为 最终的,在java中也是较为常用的关键字之一. 在java 中 final 关键字可以修饰  类.方法.变量 final 修饰在类上,则表示该类不能被继承,如果里面的成员变量没 ...

  2. ACAC java中final关键字

    java中final关键字/*1.final关键字:java 中的一个关键字,最终的,不可变的可以修饰变量以及方法,还有类等.1.修饰的方法,修饰的类无法被覆盖,无法被重写,无法被继承写的方法不希望被 ...

  3. Java中final关键字的简介说明

    下文笔者讲述java中final关键字的功能简介说明,如下所示 final关键字功能 final关键字修饰的类.方法.变量都会产生特殊的意义 如:final关键字修饰过后的类不能被子类继承final关 ...

  4. [转载] Java中final关键字

    参考链接: Java中的final关键字 文章目录 1 final关键字1.1 final修饰类1.2 final修饰方法1.3 final修饰属性---常量1.3.1 final修饰普通数据类型的成 ...

  5. 关于Java中final关键字的详细介绍

    Java中的final关键字非常重要,它可以应用于类.方法以及变量.这篇文章中我将带你看看什么是final关键字?将变量,方法和类声明为final代表了什么?使用final的好处是什么?最后也有一些使 ...

  6. Java中final关键字的几种用法

    在java的关键字中,static和final是两个我们必须掌握的关键字.不同于其他关键字,他们都有多种用法,而且在一定环境下使用,可以提高程序的运行性能,优化程序的结构.下面大家跟随动力节点java ...

  7. java中final关键字、权限修饰符、内部类(成员内部类、局部内部类、匿名内部类)

    final关键字: final表示最终的不可变的,在java中可以用来修饰类或方法.局部变量.成员变量. // 1.final关键字修饰类需要放在class关键字前面,表示不可变的类,需要注意,这里表 ...

  8. final关键字_夯实基础:Java中final关键字的几种用法

    导语 在java的关键字中,static和final是两个我们必须掌握的关键字.不同于其他关键字,他们都有多种用法,而且在一定环境下使用,可以提高程序的运行性能,优化程序的结构. 关于static请查 ...

  9. Java中final关键字的作用与用法

    一.特点 1.final从字面上理解含义为"最后的,最终的". 2.final可以用来修饰变量(包括类属性.对象属性.局部变量.形参),方法(包括类方法和对象方法)以及类. 二.用 ...

  10. Java中final关键字的作用

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

最新文章

  1. angular 打印 lodop 引入css样式
  2. Matlab2018a求解一元二次方程
  3. cocos ScrollView(滚动容器)加载大量item导致的卡顿问题解决方案
  4. python中文字体怎么设置_python matplotlib 中文字体设置
  5. js java传参乱码_【技术贴】解决前台js传参中文乱码
  6. 运行github上的Vue项目
  7. 将 Java 作为入门编程语言有错吗?
  8. php中三元运算符用法
  9. qt写的在ok6410上的密码锁
  10. MQL5中的错误处理和日志记录
  11. 《晨间日记的奇迹》读书笔记
  12. 解决chrome(谷歌)浏览器打开文件选择框响应速度慢的问题-小白实操记录
  13. 栈:后进先出的线性表
  14. android跳转谷歌地图导航,Android使用intent调取导航或者地图
  15. matlab高斯型隶属函数,图高斯型隶属函数.PPT
  16. 为什么建议大家使用 Linux 开发?爽!!!
  17. AN IMAGE IS WORTH 16X16 WORDS: TRANSFORMERS FOR IMAGE RECOGNITION AT SCALE——ViT全文翻译
  18. 打靶法c语言程序,打靶法求解一维Schrodinger方程程序示例
  19. 复制移动文件时对于目标文件系统过大的问题解决
  20. DevOps工程师技术栈

热门文章

  1. Docker进入容器命令
  2. element-ui 点击dialog右上角关闭图标不关闭的问题
  3. 软件测试架构师究竟干哪些工作?
  4. python多线程之setDaemon和join
  5. live555源码分析(一)live555初体验
  6. 【贪心】防晒霜Sunscreen
  7. MT6580芯片处理器资料介绍
  8. 简析JavaScript异步编程
  9. android 全面屏手机 getDisplayMetrics() 获取高度不对,未包含底部非全宽的弧形下巴区域
  10. 用openpyxl库批量修改excel格式小工具