my java note------------final
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了my java note------------final相关的知识,希望对你有一定的参考价值。
java final 关键字:
1 final数据
1.1常数常见于两种情况:
1. 编译期间的常数
例如: final int i1 = 0;
2. 运行期间初始化的一个值,但不希望它发生变化
例如: final int i2 = (int)(Math.random()*20);
象上面这样,对基本数据类型使用final,使得其值不变。
但是如果对一个对象句柄使用final,含义就不一样了。final会将句柄值变成一个常数,即句柄指向的对象不能发生变化,但是对象本身的只是可变的。
需要注意的是:声明final 句柄时必须将句柄初始化到一个对象。
1.2 空白final
java 允许创建空白的final,如: final int i1; 但是,i1 需要在构造器中初始化,这并不违反final 必须要有值的要求。
要么在定义时初始化,要么在构造器中初始化。这样可以保证final 字段在使用时获得正确的初始化。而且使用构造器初始化,带来了很大的灵活性
1.3 final 自变量
我们可以将自变量设成 final 属性,方法是在自变量列表中对它们进行适当的声明,如: public void test (final String str)。这意味着在一个方法的内部,我们不能改变自变量句柄指向的东西。
注意: 此时仍然能为 final 自变量分配一个 null(空)句柄。这与我们对非 final 自变量采取的操作是一样的。
package mytest; class Value { int i = 1; } public class TestFinal { final int i0 = 8; final int i1; Value v1 = new Value(); final Value v2 = new Value(); static final Value v3 = new Value(); final Value v4; final int[] a = { 1, 2, 3, 4, 5, 6 }; public TestFinal(){ i1 = 9; v4 = new Value(); v4.i = 9; } final int i4 = (int)(Math.random()*20); static final int i5 = (int)(Math.random()*20); public void print(final String id) { // id can be null //! id = "hello"; //Error: can‘t change handle System.out.println( id + ": " + "i4 = " + i4 + ", i5 = " + i5); } public static void main(String[] args) { TestFinal fd1 = new TestFinal(); //! fd1.i0++; // Error: can‘t change value //! fd1.i1++; // Error: can‘t change value fd1.v1 = new Value(); // OK -- not final fd1.v2.i++; // Object isn‘t constant! for(int i = 0; i < fd1.a.length; i++) fd1.a[i]++; // Object isn‘t constant! //! fd1.v2 = new Value(); // Error: Can‘t change handle //! fd1.v3 = new Value(); // Error: Can‘t change handle //! fd1.a = new int[3]; // Error: Can‘t change handle fd1.print("fd1"); System.out.println("Creating new FinalData"); TestFinal fd2 = new TestFinal(); fd1.print("fd1"); fd2.print("fd2"); fd2.print(null); } } ===================== OUTPUT ========================= fd1: i4 = 6, i5 = 10 Creating new FinalData fd1: i4 = 6, i5 = 10 fd2: i4 = 15, i5 = 10 null: i4 = 15, i5 = 10
2. final 方法
final + 方法 一般表示方法不能被子类继承,重写
3. final 类
final + Class 表示此类不能被继承
以上是关于my java note------------final的主要内容,如果未能解决你的问题,请参考以下文章
我的 Python/Java/Spring/Go/Whatever Client Won’t Connect to My Apache Kafka Cluster in Docker/AWS/My B
How Will Java Technology Change My Life?
java.lang.SecurityException-不允许启动活动 Intent flg=0x4000000 cmp=[MY_ACTIVITY] (has extras)
嵌套异常是 java.io.FileNotFoundException:类路径资源 [my-config.xml] 无法打开,因为它不存在