Final主要应用场合:数据、方法以及类。
final数据:
(1) 编译期常数,它永远不会改变。
(2) 在运行期初始化的一个值,我们不希望它发生变化。
对于编译期的常数,编译器(程序)可将常数值“封装”到需要的计算过程里。也就是说,计算可在编译期间提前执行,从而节省运行时的一些开销。在Java 中,这些形式的常数必须属于基本数据类型。
无论static 还是final 字段,都只能存储一个数据,而且不得改变。
(1)对于基本数据类型,final 会将值变成一个常数。
(2)对于对象,final 会将句柄变成一个常数。进行声明时,必须将句柄初始化到一个具体的对象。而且永远不能将引用变成指向另一个对象。然而,对象本身是可以修改的。
1、final数值常量:
public static final double PI = 3.14
final 属性的基本数据类型,并含有编译期的值,所以它们除了能作为编译期的常数
使用外,在任何导入方式中也不会出现任何不同。Static 强调它们只有一个;而final 表明它是一个常数。
final static表示编译期的常数。
2、空白final:
private final List list;
private final Sudent sudent;
尽管被声明成final,但却未得到一个初始值。无论在哪种情况下,空白final 都必须在实际使用前得到正确的初始化。而且编译器会主动保证这一规定得以贯彻。然而,对于final 关键字的各种应用,空白final 具有最大的灵活性。位于类内部的一个final 字段现在对每个对象都可以有所不同,同时依然保持其“不变”的本质。
3、final自变量:
public int getNext(final int index) {}
只能读取自变量,不可改变它,对象只能读取该对象,对象的值还是可以改变的。
总结:final变量,其实声明为final表示指向对象的引用就不能改变了,如果是指向基本类型,基本就是常量,如果是对象,从头到尾都表示只是一个对象,对象的属性内容可以改变。
final方法:
public final String getMethodName() {};
声明为final的方法条件
1、设计足够完美,防止任何继承类改变它的本来含义。
2、效率的考虑。只要编译器发现一个final方法调用,就会忽略为执行方法调用机制而采取的常规代码插入方法(将自变量压入堆栈;跳至方法代码并执行它;跳回来;清除堆栈自变量;最后对返回值进行处理)。相反,它会用方法主体内实际代码的一个副本来替换方法调用。这
样做可避免方法调用时的系统开销。
private是之后自己才能使用,继承不了,声明为final,子类还是可以调用的,只是不能重写。
final类:
final class TestFinalClass{}。
典型的有String Integer Long等。
如果说整个类都是final,就表明自己不希望从这个类继承,或者不允许其他任何人采取这种操作。换言之,出于这样或那样的原因,我们的类肯定不需要进行任何改变;或者出
于安全方面的理由,我们不希望进行子类化(子类处理)。
数据成员既可以是final,也可以不是,final的规则同样适用于数据成员,无论类是否被定义成final,类定义成final 后,结果只是禁止进行继承——没有更多的限制。然而,由于它禁止了继承,所以一个final 类中的所有方法都默认为final。因为此时再也无法覆盖它们。所以与我们将一个方法明确声明为final一样,编译器此时有相同的效率选择。
import java.util.ArrayList; import java.util.List; /** * 功能描述:JAVA Final测试 * Date: 13-1-28 Time:下午7:37 */ public class TestFinal { /** * final常量 */ public static final double PI = 3.14; /** * final类变量 */ public static final String DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss"; /** * final数值,空白final */ final String className; final TestFinalMethod testFinalMethod; final List list; /** * 传入参数初始化final * @param className * @param testFinalMethod * @param list */ public TestFinal(String className, TestFinalMethod testFinalMethod, List list) { this.className = className; this.testFinalMethod = testFinalMethod; this.list = list; } /** * 构造初始化空白final */ public TestFinal() { className = TestFinal.class.getName(); testFinalMethod = new TestFinalMethod(); list = new ArrayList(); } /** * final变量参数 * @param index * @return */ public int getFinalCount(final int index) { int num = 0; for (int i = 0; i < 100; i++) { // index ++; num = num + index; } return num; } /** * 修改final变量参数 */ public void modifyFinalParams() { list.add("abc"); list.add(10); testFinalMethod.setKey("key"); testFinalMethod.setValue(100); } } /** * 测试Final方法 */ //class TestFinalMethod extends TestFinalClass { class TestFinalMethod { private String key; private int value; /** * final方法 */ public final String getTestFinalMethodName() { return TestFinalMethod.class.getName(); } public String getKey() { return key; } public void setKey(String key) { this.key = key; } public int getValue() { return value; } public void setValue(int value) { this.value = value; } } /** * 测试Final类 */ final class TestFinalClass { private String className; public String simpleName; public final String getTestFinalClassName() { return TestFinalMethod.class.getName(); } }
相关推荐
深入理解 `final` 关键字可以帮助开发者写出更加安全、高效的代码。 首先,`final` 关键字可以用于声明变量。当一个变量被声明为 `final` 时,它的值一旦被赋值后就不能再改变。这适用于成员变量、局部变量以及静态...
理解并熟练应用`final`关键字对于编写高效、安全的Java代码至关重要。 总的来说,`final`关键字是Java中一种非常有用的特性,它可以用于防止变量的意外修改,保证方法不被重写,以及防止类被继承。通过合理使用`...
在Java编程语言中,`final`关键字扮演着一个至关重要的角色,它被...理解并适当地使用`final`可以帮助编写出更加安全、高效且易于维护的代码。在实际开发中,应根据需求灵活运用`final`,确保代码的清晰性和正确性。
Java中的`final`和`static`关键字是编程中非常重要的两个修饰符,它们分别用于不同的场景,以确保代码的稳定性和高效性。...理解和熟练运用这两个关键字是Java编程的基础,也是写出高质量代码的关键。
Java中的`final`关键字是一个非常重要的概念,它用于在编程中实现不可变性。...理解并正确使用`final`关键字对于编写安全、可维护的代码至关重要。通过深入学习和实践,开发者可以更好地利用这一特性来提高代码质量。
在Java编程语言中,`final` 和 `static` 是两个非常重要的关键字,它们分别具有不同的含义和用法,但都对代码的结构和行为产生深远影响。本文将深入探讨这两个关键字,并结合实际示例来解释它们的应用场景。 首先,...
ClassFinal正是为解决这些问题而设计的一款Java类文件安全加密工具。这款工具能够对编译后的`.class`文件进行加密处理,使得未经授权的用户无法轻易读取或反编译代码,从而提高代码的安全性。 ClassFinal的特点在于...
在Java编程语言中,`final`与`static`是两个非常关键且常用的关键字,它们各自具有独特的功能和用途,可以极大地增强代码的稳定性和可维护性。下面将详细解析这两个关键字的用法及其在Java中的重要性。 ### 一、`...
Java编程中的`final`、`finally`和`finalize`关键字对于理解Java程序的运行机制至关重要。它们各自有独特的用途和特点。 首先,`final`关键字是Java中的一个多面手,它可以用于修饰类、方法和变量。当`final`用于...
### Java中的final关键字详解 #### 一、final的概述与应用场景 在Java语言中,`final`关键字具有非常重要的地位,它通常用来表示某种“不可...正确地理解和使用`final`关键字对于成为一名合格的Java开发者至关重要。
ClassFinal通过特定的加密算法和混淆技术,对Java类文件进行处理,使得未经授权的人难以理解或修改加密后的代码。 Java安全涉及到多个层面,包括数据安全、代码安全、网络安全等。ClassFinal主要关注的是代码安全,...
在Java编程语言中,`final...理解并熟练运用`final`,可以帮助开发者编写更安全、更易于维护的代码。在实际编程中,合理利用`final`可以提高代码的清晰度,减少不必要的错误,并有助于优化性能,尤其是在多线程环境下。
本篇文章将深入探讨`final`关键字在Java中的使用和重要性,帮助开发者更好地理解和应用这一关键特性。 首先,`final`关键字用于声明变量。当一个变量被声明为`final`时,它的值一旦被初始化,就不能再改变。这在...
【Java中的final关键字】 在Java编程语言中,`final`关键字有着重要的作用,它用于标记一个变量、方法或类,表示不可变性。这个特性在多个方面都有应用,包括创建常量、确保引用不可变以及在多线程环境中提供安全。...
Java中的`final`关键字是一个...理解并恰当使用`final`可以帮助我们编写更加清晰、可预测的代码,避免意外的修改和副作用。在设计面向对象的系统时,`final`是一个强大的工具,可以用来保护类和接口的完整性和一致性。
Java中的`final`关键字是一个非常重要的概念,它用于表示不可变性或终结状态。下面我们将详细探讨`final`关键字在修饰变量、方法和类时的不同...理解并恰当使用`final`关键字对于编写健壮、高效的Java代码至关重要。
根据提供的文件信息,我们可以从中提炼出以下几个关键知识点: ### 1. Java中的字符编码:UTF-16 #### 1.1 UTF-16BE (Big Endian) ...通过对这些知识点的学习,可以帮助我们更好地理解和应用Java语言的相关特性。
本篇文章将深入剖析`final`关键字在Java中的使用和意义,帮助读者理解其在面试和实际开发中的重要性。 1. **final变量** - `final`修饰的变量一旦赋值后,就不能再改变。这可以确保变量的值在整个程序运行期间保持...
### Java零基础-final关键字 #### 内容概要 ...通过上述内容的学习和实践,读者不仅能够熟练掌握final关键字的使用方法,还能深刻理解其背后的原理和重要性,从而写出更安全、更高效的Java代码。
理解这些关键字的用法对于编写高质量的 Java 代码至关重要。在实际编程中,合理使用它们可以提高代码的可读性和维护性。例如,静态方法和变量常用于工具类,`this` 和 `super` 在对象实例化和继承中起到关键作用,而...