final通常是指"不可改变的",例如我们使用的常量

通常可以有三种使用情况:

一、final修饰数据

  如果final修饰数据,也就是通常所说的常量,从字面上看,常量就是不能修改的,和变量是一个对立面

1、定义的时候必须有初始值,否则会编译错误

原因:

  public int i = 123;

  在类加载的准备阶段i的值为0,而不是123。赋值123的过程是在初始化阶段

  但是如果i被final修饰,编译器会生成Constantvalue属性,在准备阶段会根据Constantvalue的设置将i赋值为123

  所以,常量必须有初始值,编译器不会给它零值

空白final:

  声明为final但是没有给定初值,在构造器内进行初始化,能够保证一定的灵活性,而且符合final在使用前被初始化

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Test1 {public int i = 0;
}
public class Test {private final int i;private final Test1 test1;public Test() {i = 0;test1 = new Test1();}public Test(int i) {this.i = i;test1 = new Test1(i);}
}

PS:常量并不是在编译期就能知道它的值,可以在运行时生成的

2、修饰对象引用

  final修改引用的时候和修饰基本数据类型有差别

2.1).修饰基本数据类型:数值不能修改

2.2).修改引用类型:

  final修饰的引用初始化的时候指向一个对象之后,就不会指向别的对象。被指向的对象是可以修改的

public class Test1 {public int i = 0;
}

3、final参数

  和一般修饰数据和引用没有什么区别,主要匿名内部类中使用,会在后面讲

下面的"常量和变量的区别",内容来自:https://www.cnblogs.com/dolphin0520/p/3736238.html,也推荐大家去看,内容更加详细

常量和普通变量的区别?

public class Test {public static void main(String[] args)  {String a = "hello2"; final String b = "hello";String d = "hello";String c = b + 2; String e = d + 2;System.out.println((a == c));System.out.println((a == e));}
}

结果:true,false,这就是区别了

PS:只有在编译期间能确切知道final变量值的情况下,编译器才会进行这样的优化

public class Test {public static void main(String[] args)  {String a = "hello2"; final String b = getHello();String c = b + 2; System.out.println((a == c));}public static String getHello() {return "hello";}
}

结果:false

二、final修饰方法

使用final修饰方法的原因有两个:

1、防止方法被重写

2、效率:早期Java对final方法进行优化

private方法默认也是final,是否加上final都是无所谓的

public class Test {private void f1() {}
}
public class Test1 extends Test{private void f1() {}
}

这种场景并不是重写

三、final修饰类

  如果final修饰类的时候,表示该类无法被继承,某种情况下,这是出于安全考虑,不希望有子类。

所有方法都会被隐式指定为final

转载于:https://www.cnblogs.com/huigelaile/p/11002255.html

Java基础(三)--final关键字相关推荐

  1. 【Java基础】final关键字总结

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

  2. java基础之final关键字,形式参数和返回值问题

    目录 一:final关键字 二:形式参数和返回值问题 1:形式参数 2:返回值类型 3:例子 一:final关键字 1:final关键字是最终的意思,可以修饰类,成员变量,成员方法. 2:修饰类,类不 ...

  3. java基础之final关键字_繁星漫天_新浪博客

    final关键字可以修饰类.变量.方法,它有"这是无法改变的"或者"最终"的含义 因此被final修饰的有以下特性: 1.final修饰的类不能继承 2.fin ...

  4. 浅谈Java中的final关键字

    浅析Java中的final关键字 谈到final关键字,想必很多人都不陌生,在使用匿名内部类的时候可能会经常用到final关键字.另外,Java中的String类就是一个final类,那么今天我们就来 ...

  5. 浅析Java中的final关键字

    浅析Java中的final关键字 谈到final关键字,想必很多人都不陌生,在使用匿名内部类的时候可能会经常用到final关键字.另外,Java中的String类就是一个final类,那么今天我们就来 ...

  6. java final 修改_“无法改变的设计”——浅谈Java中的final关键字

    在Java中,final关键字可以用来修饰类.变量(包括成员变量和局部变量).方法,下面从这三个方面分别说明. final方法 当一个方法被final修饰时,表明这个方法不能被子类重写. 下面程序试图 ...

  7. 【转】浅析Java中的final关键字

    谈到final关键字,想必很多人都不陌生,在使用匿名内部类的时候可能会经常用到final关键字.另外,Java中的String类就是一个final类,那么今天我们就来了解final这个关键字的用法. ...

  8. 详解java中的final关键字

    概述 final 简介 final关键字可用于多个场景,且在不同场景具有不同的作用.首先,final是一个非访问修饰符,仅适用于变量,方法或类.下面是使用final的不同场景: 上面这张图可以概括成: ...

  9. 深入理解Java中的final关键字

    深入理解Java中的final关键字 http://www.importnew.com/7553.html Java中的final关键字非常重要,它可以应用于类.方法以及变量.这篇文章中我将带你看看什 ...

  10. 在Java中使用final关键字可以提高性能吗?

    本文翻译自:Does use of final keyword in Java improve the performance? In Java we see lots of places where ...

最新文章

  1. 功能到位 + 颜值爆表的开源任务管理工具
  2. date类before()方法的主要作用是_黄精的主要作用及中医食疗方法
  3. Check failed: weights_.Size() == num_row_ (38997 vs. 383852) : Size of weights must equal to number.
  4. 两列数据找出相同项自动对应_关于数据核对的6个超级技巧,用过的人都说好...
  5. android隐藏底部栏,Android4.0平板开发之隐藏底部任务栏的方法
  6. 搭建svn,创建svn项目
  7. java生成动态验证码_java动态生成验证码
  8. 0523- 人员定位系统问题随手记
  9. python全栈开发-Day3 字符串
  10. Apache Curator入门实战
  11. 什么是Python解释器?
  12. Cordova入门教程
  13. JAVA WEB毕业设计
  14. 系统分析与设计 HW9
  15. 【操作系统】成组链接法详解
  16. linux系统 ifconfig 命令无法找到
  17. Java分解整型质因数
  18. Android 简单的白天与夜晚模式切换
  19. 2003excel职称计算机,职称计算机考试Excel2003使用技巧:设置技巧
  20. python 三元表达式_Python三元表达式

热门文章

  1. ELK ElasticSearch、Logstash和Kibana的部署
  2. mysql创建用户navicat_14MYSQL创建用户和授权、15Navicat的使用、16-pymysql模块的使用、17-索引...
  3. 游戏开发之测试篇3(C++)
  4. OSPF高级特性(华为设备)
  5. MySQL存储过程(五)——存储过程查看、删除和修改
  6. 软件包管理 之 RPM 基础 《RPM 的介绍和应用》
  7. 对比了6家交易所的下币规则,我们发现……
  8. NIUDAY 七牛美图 AI 共享日 | 大咖云集 邀您共同探索各场景下的 AI 应用与落地...
  9. 通过selenium突破极验验证实现登录
  10. Hibernate最全面试题