java中final用法

1.修饰基础数据成员

这是final的主要用途,其含义相当于C/C++的const,即该成员被修饰成常量,不可修改。

2.修饰类或者对象的引用的final

在java中我们无法让对象被修饰为final,只能修饰对象的引用。这意味着即使你写了public final A a = new A();事实上a指向的对象的数据依然可以被修改,不能修改的是a的引用值,即你不能再对a进行重赋值。同样的情况出现在数据组,比如 public final int[] a={1,2,3,4,5},事实上a的数值是可修改的,即可以a[0] = 6;。

3.修饰方法的final

修饰方法的final与C/C++中修饰成员对象的const大不相同。首先,修饰方法的final含义不是“不可修改”,而是指该方法不可以被继承成员重新定义。(这里的不能被重新定义,并不是指子类一定不能定义同名方法,如果父类的方法是私有类型,子类是允许定义该方法的,这里指的不能重新定义是指不能通过改写方法来使得方法重写的多态性得以实现,如不希望A a = new B(),a.f()这样的重写方法出现。)

 1 public class A {
 2
 3     // final方法f
 4
 5     public final void f() {
 6
 7        System.out.println("类A中的final方法f被调用了");
 8
 9     }
10
11 }
12
13 public class B extends A {
14
15     // 编译错误!父类的f方法是final类型,不可重写!
16
17     //! public void f() {
18
19     //!     System.out.println("类B中的方法f被调用了");
20
21     //! }
22
23 }

此外,当一个方法被修饰为final方法时,意味着编译器可能将该方法用内联方式载入。所谓内联方式是指编译器不用像平常调用函数那样的方式来调用,而是直接将方法内的代码通过一定的修改后copy到源代码中(将方法主体直接插入到调用处,而不是调用方法),这样可以更快的执行

4.修饰类的final

当一个类被修饰为final时,它含义很明确,不允许该类被继承。

1 public final class A {
2
3 }
4
5 // 编译错误!A是final类型,不可被继承!
6
7 //!public class B extends A{
8
9 //!}

5.参数final

对对象参数做final修饰,对象变量传递的是其引用,为防止调用过程中无意的更改而修饰。

6.static加final一块用

这两者放到一块可以简单理解为“全局常量”,对于变量,表示一旦给值就不能修改,可通过类名访问。对于方法,表示不可覆盖且可通过类名直接访问。

时间: 2024-08-27 23:40:16

java中final用法的相关文章

关于Java中final关键字的用法总结

用于数据 永不改变的编译时常量,必须是基本类型,static final常量定义时必须赋值 一个运行时被初始化却又不希望被改变的值 空白final,确保使用前必须被初始化,但有更大的灵活性 final参数,用于对象引用,对象不可改变,用于基本类型,值不可以改变 用于方法 防止方法的行为被改变,不可覆盖 private方法默认为final的 曾经使用final方法可以提高效率,现已不提倡 用于类 表示该类不可以被继承 final类方法默认指定为final的 关于Java中final关键字的用法总结

Java中final、finally、finalize的区别(转)

Java中final.finally.finalize的区别与用法,困扰了不少学习者,下面我们就这个问题进行一些探讨,希望对大家的学习有所帮助. 方法/步骤 1 简单区别: final用于声明属性,方法和类,分别表示属性不可交变,方法不可覆盖,类不可继承. finally是异常处理语句结构的一部分,表示总是执行. finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,供垃圾收集时的其他资源回收,例如关闭文件等. END 方法/步骤2 1 中等区别: 虽然这三

Java中final修饰符深入研究

一.开篇 本博客来自:http://www.cnblogs.com/yuananyun/ final修饰符是Java中比较简单常用的修饰符,同时也是一个被"误解"较多的修饰符.对很多Java程序员来说,他们大都只是草草看了一下各种书本上的介绍,然后背下来,什么时候想起 来有这东西就用一下.对于何时使用final修饰符.使用final修饰符对程序有什么影响,这些其实他们并不知道,当然在这篇文章之前,我也是一知半解的. 我们书本上对final的描述大概有三种用法: final可以修饰变量,

[面试题]java中final finally finalized 的区别是什么?

final 是修饰符,可以用于修饰变量.方法和类.修饰变量时,代表变量不可以修改,也就是常量了,常量需要在定义时赋值或通过构造函数赋值,两者只能选其一:修饰方法时,代表方法只能调用,不能被 override ;修饰类时,代表类不能够派生出子类,所以一个类不能既是 final 又是 abstract; finally 是异常处理机制中的 try 的从句,用于处理必要的清理工作,那怕执行的 catch 中有 return 语句 finally 也会在 return 之前执行: finalized 是

java中final注意的问题

public class Test{ public static void main(String[] args){ Person p = new Person(); } } /* 4.修饰的变量是一个常量(所有字符都大些 XXX 或者 XXX_XXX),只能赋值一次! final 固化的都是显示初始化的值(定义并初始化)(或者构造函数中的特定初始化的值, 但二者不能同时出现), 而不是默认的初始化值! 为什么要用final修饰变量.其实在程序中如果一个数据是固定的,那么直接使用这个数据就可以了

JAVA中ArrayList用法

JAVA中ArrayList用法 2011-07-20 15:02:03|  分类: 计算机专业 |  标签:java  arraylist用法  |举报|字号 订阅 Java学习过程中做题时,用到ArrayList,在网上寻找到的学习资料.   摘自:     http://www.cnblogs.com/skylaugh/archive/2006/09/15/505346.html System.Collections.ArrayList类是一个特殊的数组.通过添加和删除元素,就可以动态改变

深刻理解Java中final的作用(一):从final的作用剖析String被设计成不可变类的深层原因

声明:本博客为原创博客,未经同意,不得转载!小伙伴们假设是在别的地方看到的话,建议还是来csdn上看吧(原文链接为http://blog.csdn.net/bettarwang/article/details/26744661),看代码和提问.讨论都更方便. Java中final的作用主要表如今三方面:修饰变量.修饰方法和修饰类.以下就从这两个方面来解说final的作用.在文末从final及类的设计安全性出发,论述了Java中String为何要被设计成不可变类. 1.final修饰变量 fina

java中final的意义

1.如果一个数据既是static又是final,那么它会拥有一块无法改变的存储空间. 2.final data: 当final用于基本数据类型时,final让其值(value)保持不变,但是当用于object reference时,final仅让reference保持不变.也就是说当reference一旦被初始化用于代表某个对象时,便再也不能改变指向另一个对象,但对象本身的内容确实可以改变的.final对array的作用和对reference的作用一样.参考以下例子: public class

Java中final的作用

Java中Final可以被用于变量,方法,类.具体来说: 1, Final 变量 修饰主类型时,制定变量为常数,不希望被改变 修饰类类型时,表示变量的句柄不变,不能被指定指向新的变量 修饰参数时,参数不可变 2,Final方法 表示在继承期间保持不变,而且不可以被覆盖或者改写.同时,Final方法会被做inline处理 3, Final类 表示该类不希望被继承