一 final变量简介
1 final修饰变量时表示该变量一旦获得初始值之后就不可能改变。
2 final既可修饰成员变量,也可修饰局部变量。
二 final修饰成员变量
1 final修饰成员变量时,必须由程序员显示地指定初始值。
2 类变量:必须在静态初始化块中指定初始值或声明该变量时指定初始值,而且只能在两个地方的其中之一指定。
3 实例变量:必须在非静态初始化块中,声明该实例变量或构造器中指定初始化值,而且只能在三个地方其中之一指定。
4 代码示例一正确用法
public class FinalVariableTest { // 定义成员变量时指定默认值,合法。 final int a = 6; // 下面变量将在构造器或初始化块中分配初始值 final String str; final int c; final static double d; // 既没有指定默认值,又没有在初始化块、构造器中指定初始值, // 下面定义的ch实例变量是不合法的。 // final char ch; // 初始化块,可对没有指定默认值的实例变量指定初始值 { //在初始化块中为实例变量指定初始值,合法 str = "Hello"; // 定义a实例变量时已经指定了默认值, // 不能为a重新赋值,因此下面赋值语句非法 // a = 9; } // 静态初始化块,可对没有指定默认值的类变量指定初始值 static { // 在静态初始化块中为类变量指定初始值,合法 d = 5.6; } // 构造器,可对既没有指定默认值、有没有在初始化块中 // 指定初始值的实例变量指定初始值 public FinalVariableTest() { // 如果在初始化块中已经对str指定了初始化值, // 构造器中不能对final变量重新赋值,下面赋值语句非法 // str = "java"; c = 5; } public void changeFinal() { // 普通方法不能为final修饰的成员变量赋值 // d = 1.2; // 不能在普通方法中为final成员变量指定初始值 // ch = 'a'; } public static void main(String[] args) { FinalVariableTest ft = new FinalVariableTest(); System.out.println(ft.a); System.out.println(ft.c); System.out.println(ft.d); } }
5 运行结果
6
5
5.6
6 结果分析
请参考注释掌握final用法。
7 代码示例一错误用法
public class FinalErrorTest { // 定义一个final修饰的实例变量 // 系统不会对final成员变量进行默认初始化 final int age; { // age没有初始化,所以此处代码将引起错误。 System.out.println(age); age = 6; System.out.println(age); } public static void main(String[] args) { new FinalErrorTest(); } }
8 代码分析
如果打算在构造器,初始化块中对final成员变量进行初始化,则不要在初始化之前就访问成员变量的值。
三 final局部变量
1 使用final修饰局部变量时,既可以在定义时指定默认值,也可以不指定默认值。
2 给局部变量赋初始值时,只能一次,不能重复。
3 代码示例
public class FinalLocalVariableTest { public void test(final int a) { // 不能对final修饰的形参赋值,下面语句非法 // a = 5; } public static void main(String[] args) { // 定义final局部变量时指定默认值,则str变量无法重新赋值 final String str = "hello"; // 下面赋值语句非法 // str = "Java"; // 定义final局部变量时没有指定默认值,则d变量可被赋值一次 final double d; // 第一次赋初始值,成功 d = 5.6; // 对final变量重复赋值,下面语句非法 // d = 3.4; } }
4 代码分析
上面程序还示范了final修饰形参的情形。因为形参在调用该方法时,由系统根据传入参数来完成初始化,困此使用final修饰的形参不能被赋值。
相关推荐
本文章是关于final部分知识所作的自我总结,内容为final对成员变量和局部变量修饰的简要解答,除了对自我java学习的一个小结,也希望能够帮助到在java路上对该内容疑惑的同行
NULL 博文链接:https://1598623317.iteye.com/blog/2029809
final修饰变量时,表示该变量一旦获得了初始值之后就不可被改变,final既可修饰成员变量(包括类变量和实例变量),也可以修饰局部变量,形参。 final修饰成员变量 类变量:当类初始化时,系统会为类变量分配内存,...
012-JavaSE进阶-final修饰局部变量
day11_04_final关键字用于修饰局部变量
4.2.2 final局部变量;4.2.2 final局部变量;4.2.3 final方法;4.2.4 final类;4.2.5 学生实践练习;4.2.5 学生实践练习;4.3 接口;4.3 接口;4.3.1 接口的定义;4.3.2 接口的实现;4.3.2 接口的实现;4.3.2 接口的实现;4.3.2 ...
在Java中变量可以分为成员变量和局部变量 成员变量 通常每个类中成员变量可以分为 类变量(static修饰的变量) 以及 实例变量 针对这两种类型的变量赋初始值的时机是不同的。 类变量可以再声明变量的时候直接赋...
计算机后端-Java-Java核心基础-第15章 面向对象07 26. final修饰局部变量.avi
Java中局部内部类可以访问它所在方法中定义的final修饰的局部变量的合理解释.doc
在知乎上看到了一篇帖子 在这个问题下面大家已经吵得不可开交了,看了很多篇文章,被误导进了很多的坑,发现只有下面两篇文章是写的最好的,解释的很清楚,我把两篇文章简单的总结了一下: ...1.问题的引出 ...
//从阅读角度,这里预期打印a=20,然而只会打印出a=10,会让人误解,因为在Inner的change()中修改的是Inner内部类对象的this.a,它是m
有趣的事实这个 Android 入门项目演示了用于创建文本字段、按钮、toast、简单 if-else、类用法、数组、onclicklistener、成员变量和局部变量之间的区别与使用“final”声明有关的方法局部变量。 有许多行注释掉的...
java核心面试题汇总,包含问题和答案!! 普通类和抽象类有哪些区别?... 成员变量和局部 变量的区别 作用域 成员变量:针对整个类有效。 局部变量:只在某个范围内有效。(一般指的就是方法,语句体内)
在Java中,final关键字可以用来修饰类、方法和变量(包括成员变量和局部变量)。下面就从这三个方面来了解一下final关键字的基本用法。 1.修饰类 当用final修饰一个类时,表明这个类不能被继承。也就是说,...
(1)局部变量 无法为最终变量进行赋值了。 final修饰的变量只能赋一次值。 final修饰的变量一旦赋上值就不能再重新赋值了。 (2)fina修饰的变量如果这个变量是一个”引用”会怎么样? 解析:s2里面最初分配了0x...
Java面试必备,题目非常基础,看看你能做对几道? 题目及详解示例 14. public class Test { ... 如果局部变量没有被初始化,并且在方法中一直没有被使用,编译和运行都会通过。 可以改正为:String s = null ;
(1)掌握利用各种数据类型声明局部变量的方法 (2)掌握为局部变量赋值的两种方法 (3)掌握常用系统函数、运算符和表达式的功能和应用 变量的应用 利用Transact-SQL语句声明一个长度为16的nchar型变量bookname,并...
JavaLearnSummary java学习总结 ...Ø final修饰局部变量:系统不会为局部变量进行初始化,局部变量必须有程序员显示初始化。因此使用final修饰局部变量时,既可以在定义时指定默认值(后面的代码不能再对变
在Java中,final关键字可以用来修饰类、方法和变量(包括成员变量和局部变量),下面通过本篇文章给大家介绍java中的final关键字,对java fina关键字相关知识感兴趣的朋友一起看看吧
通过 this 关键字调用成员方法,解决与局部变量名称冲突问题 package com.wang.demo1; public class Person { int age; //成员变量 age public Person(int age) { //局部变量 age this.age = age; //将局部变量 ...