Java中final
final修饰符
1.final可以修饰成员变量,局部变量,形参
2.有的书上说final不能被赋值(错)
严格地说,是final修饰的变量不可被改变,一旦获得了初始值,就不能被重新赋值
final修饰的成员变量
1.Java语法规定:final修饰的成员变量必须有程序员显式的指定初始值,否则final修饰的成员变量一直是系统默认分配的默认值,这就失去了存在的意义
2.final修饰类变量时,必须在静态初始化代码块中或声明该类变量时两者之一指定初始值
final修饰的实例变量必须在非静态初始化块,声明该实例变量或构造器其中之一指定初始值
注:final修饰的变量只能赋值一次,final修饰的成员变量不能再普通方法中指定初始值
final修饰的局部变量
1.同样,final修饰的局部变量也需要程序员显式的指定初始值
2.final修饰形参时,不能对其指定初始值,在后面,会在调用这个方法时由传入的参数对其指定初始值
final修饰引用类型的变量
1.final修饰引用类型变量时,只保证这个引用类型的变量的所引用的地址不会改变,即一直引用同一
对象,对象的地址不会改变,但这个对象的内容完全可以改变
如:final修饰 ArrayList1数组时,只能保证数组的地址不会改变,而数组中的内容可以改变
Array.toString(ArrayList1); //对这个数组排序,合法
ArrayList1[0] = 2; //对数组元素赋值,合法
ArrayList1 = null; //对ArrayList1重新赋值,非法
------------------------------------------------------------------------------
final Person p = new Person(); //Person类中有一个实例变量age
p.setAge(10); //改变Person对象age的实例变量,合法
p = null; //对p重新赋值,非法
final执行“宏替换”
public class FinalTest{ public static void main(String[] args){//定义一个普通局部变量,此时,当使用到a时,a就会被“宏替换”为2final int a = 2; String b = "Java";String c = "学习";String d = b + c;String e = "Java" + "学习";String f = "Java学习";//下面将输出trueSystem.out.println(f == e);//下面将输出falseSystem.out.println(d == f);/*因为在编译阶段无法确定d的值,所以也就无法让d指向常量池里缓存的“Java学习”,所以将输出false*/
//-----------------------------------------------------------------------//如果用final修饰,则不一样final String b1 = "Java";final String c1 = "学习";String d1 = b1 + c1; //(1)String f1 = "Java学习";//下面将输出trueSystem.out.println(d1 == f1);/*final对b1,c1进行了“宏替换”,所以在编译阶段(1)行代码就相当于Sting d1 = "Java" + "学习“;所以在编译阶段d1指向常量池里的”Java学习“*/}
}
注:对于final实例变量而言,只有在定义该变量时指定初始值,才会有”宏变量“的效果
final修饰方法
1.*final修饰的方法不能被重写
*private修饰的方法,别的类访问不到
*final和private同时修饰一个方法时,可以在子类中有同名的方法,
这样不是重写,只是在子类中定义了一个和父类中的一个方法方法名相同的方
法
*但如果用仅final修饰父类中的某个方法,在子类中不能用同名的方法,如果有,会报错
*final修饰的方法可以被重载,仅仅只是不能被重写
final修饰类
嗯。。。。。暂时不懂,以后再说
Java中final相关推荐
- java中final关键字的使用
final 中文翻译为 最终的,在java中也是较为常用的关键字之一. 在java 中 final 关键字可以修饰 类.方法.变量 final 修饰在类上,则表示该类不能被继承,如果里面的成员变量没 ...
- JAVA中Final的用法
JAVA中Final的用法 1. 修饰基础数据成员的final 这是final的主要用途,其含义相当于C/C++的const,即该成员被修饰为常量,意味着不可修改.如java.lang.Math类中的 ...
- java中final的意义
转载自 https://blog.csdn.net/hikvision_java_gyh/article/details/8964541 1.如果一个数据既是static又是final,那么它会拥有一 ...
- 转 Java中final、finally、finalize的区别与用法
Java中final.finally.finalize的区别与用法 1.简单区别: final用于声明属性,方法和类,分别表示属性不可交变,方法不可覆盖,类不可继承. finally是异常处理语句结构 ...
- java中常量final的用法_详解Java中final的用法
本文主要介绍了Java中final的使用方法,final是java的关键字,本文就详细说明一下它的使用方法,需要的朋友可以参考下 概念 final 具有"不可改变的"的含义,可以修 ...
- [转载] java中final,finally,finalize三者的作用和区别
参考链接: Java中final,finally和finalize Final是一个修饰符: 当final修饰一个变量的时候,变量变成一个常量,它不能被二次赋值 当final修饰的变量为静态变量(即由 ...
- [转载] Java中final关键字
参考链接: Java中的final关键字 文章目录 1 final关键字1.1 final修饰类1.2 final修饰方法1.3 final修饰属性---常量1.3.1 final修饰普通数据类型的成 ...
- ACAC java中final关键字
java中final关键字/*1.final关键字:java 中的一个关键字,最终的,不可变的可以修饰变量以及方法,还有类等.1.修饰的方法,修饰的类无法被覆盖,无法被重写,无法被继承写的方法不希望被 ...
- java中final详解_Java中final用法与详解
Java中final用法与详解 final作为Java中经常用到的关键字,了解final的使用方法是非常有必要的.这里从final关键字在数据域.方法和类中三个方面分析final关键字的主要用法. f ...
- java 中final修饰的变量_java中final修饰符的使用方法
本文为大家分享了java中final修饰符的使用,供大家参考,具体内容如下 1.final修饰符的用法: final可以修饰变量,被final修饰的变量被赋初始值之后,不能对它重新赋值. final可 ...
最新文章
- 在linux中怎么重置mysql密码_详解如何在Linux(CentOS)下重置MySQL根(Root)密码
- 【青少年编程】【三级】克隆猫游戏
- FLASH免激活js
- linux32安装pgsql,Linux安装pgsql
- 【STM32】FreeRTOS编码风格
- python学生分布_Python数据分析实战之分布分析
- python之file 方法
- 网际控制报文协议icmp_网络中的ICMP(Internet控制消息协议)
- 【11.18总结】从SAML出发在重定向中发现的XSS漏洞
- 百度关键词抓取工具_阿里巴巴国际站运营关键词抓取工具
- python树的实现
- Python的WSGI
- Maven核心概念(转)
- 查看cp进度,使用watch
- HDU 1573 X问题 [中国剩余定理]
- C#.NET自定义报表数据打印
- HFSS - GSM 900 和 DCS 1800 双频PIFA天线的设计与仿真
- 通讯录_你有多久没翻过通讯录了?
- 锤子pro2 Android8,锤子 坚果Pro2 MIUI10 Android N 快如闪电 指纹支付 完美ROOT
- 剑指offer做题记录