先介绍一些基本概念。
final是java里面的一个很重要的关键字。
final变量
- 如果变量时基本类型,那么这个变量一旦初始化之后就不能更改
- 如果变量时引用类型,那么这个变量的引用不能变,但是引用所指定的对象可以变
其初始化可以在两个地方,一是其定义处,也就是说在final变量定义时直接给其赋值,二是在构造函数中。这两个地方只能选其一,要么在定义时给值,要么在构造函数中给值,不能同时既在定义时给了值,又在构造函数中给另外的值。
final方法
将方法声明为final,那就说明你已经知道这个方法提供的功能已经满足你要求,不需要进行扩展,并且也不允许任何
从此类继承的类来覆写这个方法,但是继承仍然可以继承这个方法,也就是说可以直接使用。另外有一种被称为inline的机制,它会使你在调用final方
法时,直接将方法主体插入到调用处,而不是进行例行的方法调用,例如保存断点,压栈等,这样可能会使你的程序效率有所提高,然而当你的方法主体非常庞大
时,或你在多处调用此方法,那么你的调用主体代码便会迅速膨胀,可能反而会影响效率,所以你要慎用final进行方法定义。
final类
当
你将final用于类身上时,你就需要仔细考虑,因为一个final类是无法被任何人继承的,那也就意味着此类在一个继承树中是一个叶子类,并且此类的设
计已被认为很完美而不需要进行修改或扩展。对于final类中的成员,你可以定义其为final,也可以不是final。而对于方法,由于所属类为
final的关系,自然也就成了final型的。你也可以明确的给final类中的方法加上一个final,但这显然没有意义。
下面说重点:为什么要把传入的参数用final修饰?
使用final参数主要是为了防止该参数在函数内部被修改,简单的说,就是我给了你这个参数,你不能修改它的值
//
如果不是
final
的话,我可以在
checkInt
方法内部把
i
的值改变(有意或无意的,
//
虽然不会改变实际调用处的值),特别是无意的,可能会引用一些难以发现的
BUG
public
static
void
checkInt(
int
i)
{
i = 200;//
这样是可以的,不会编译出错的
//do something
}
//
如果是
final
的话,我可以在
checkInt
方法内部就没办法把
i
的值改变
//
可以完全避免上面的问题
public
static
void
checkInt(
final
int
i)
{
i = 200;//
这样是不可以的,会编译出错的
//do something
}
//final
的引用类型方法参数
public
static
void
checkLoginInfo(
final
LoginInfo
login)
{
login =
new
LoginInfo();//error,
编译不过去
//do something
}
//
非
final
的引用类型方法参数
public
static
void
checkLoginInfo(LoginInfo
login)
{
//
没有任何问题,但是肯定不符合此参数存在的初衷
login =
new
LoginInfo();
//do something
}
分享到:
相关推荐
使用 final 方法的原因有二:一是把方法锁定,防止任何继承类修改它的意义和实现;二是高效,编译器在遇到调用 final 方法时候会转入内嵌机制,大大提高执行效率。 3、final 变量(常量) final 变量表示常量,值...
5. **final参数** - `final`修饰的形参表示该参数的值在方法体内不能改变,增强了代码的可读性和防止意外的副作用。 6. **final和多线程** - 在多线程环境下,`final`字段具有特殊的含义,它们可以被JVM保证初始...
总之,`final`和`static`是Java中不可或缺的关键字,它们各自有其特定的使用场景。理解并正确使用它们可以提高代码的可读性、安全性和效率。在设计类和接口时,明智地使用`final`和`static`可以帮助实现更好的设计...
Java 中 final 和 static 的区别 final 关键字在 Java 中有多种用法,包括修饰变量、方法、类等。下面是 final 关键字的各种用法: 1. final 修饰变量:表示该变量一旦被初始化,程序无法修改变量的值,该变量变成...
在Java编程语言中,`final`关键字扮演着一个至关重要的角色...通过合理使用`final`,我们可以提高代码的可读性、可维护性和安全性。在实际开发中,应根据需求灵活运用`final`关键字,以实现更清晰、更稳定的代码设计。
【Java中的final关键字】 在Java编程语言中,`final`关键字有着重要的作用,它用于标记一个变量、方法或类,表示不可变性。这个特性在多个方面都有应用,包括创建常量、确保引用不可变以及在多线程环境中提供安全。...
## final参数 在方法签名中,可以将参数声明为`final`,这样在方法体内就不能修改该参数的值。这提供了一种方式来明确表达参数不应在方法内部被修改的意图。例如: ```java void someMethod(final int num) { num...
本篇文章将深入探讨`final`关键字在Java中的使用和重要性,帮助开发者更好地理解和应用这一关键特性。 首先,`final`关键字用于声明变量。当一个变量被声明为`final`时,它的值一旦被初始化,就不能再改变。这在...
### Java Filter 打印请求返回参数详解 #### 一、背景与目的 在Web开发过程中,经常需要在请求处理流程中增加一些通用的功能,比如日志记录、性能监控、安全控制等。Java Servlet规范提供了Filter机制来实现这些...
Java中的`final`关键字在编程中扮演着至关重要的角色,它用于确保代码的不可变性和确定性。在本文中,我们将深入探讨`final`在变量、参数、方法和类中的应用及其作用。 **1. `final`关键字用于变量** - **final...
5. **final参数** - `final`关键字也可以用于方法参数,表示参数在方法体内不能被重新赋值。这有助于代码的可读性和避免意外的修改,特别是在长方法或多线程环境中。 6. **final与效率** - Java虚拟机(JVM)可能...
### JAVA中的`final`关键字详解 在JAVA编程中,`final`关键字扮演着至关重要的角色,它赋予程序员控制代码的可变性和可继承性的能力。本文将深入探讨`final`关键字在不同场景下的应用,包括如何使用`final`定义常量...
在Java编程语言中,`static`, `this`, `super`, 和 `final` 是四个非常重要的关键字,它们分别代表不同的概念并具有特殊的用法。 一、`static` `static` 关键字用于声明类级别的成员(变量或方法),这意味着它们...
* final修饰参数:final参数在方法中不能被修改。 二、final域重排序规则 final域重排序规则是指final域的访问顺序问题。在Java语言中,final域的访问顺序是:首先访问final域,然后访问非final域。 * final域为...
final参数主要用于防止方法内部无意中改变参数值,但不影响方法外部的变量。 以下是一个示例程序的分析: ```java public class Test { public static void main(String[] args) { String a = "hello2"; final ...
Java中的关键字this、final以及super在编程中扮演着至关重要的角色。下面我们将深入探讨这些关键字的用法和意义。 首先,`this`关键字是Java中一个非常基础且实用的元素,它代表当前对象的引用。当类的成员变量与...
本文将深入探讨如何在Java中使用线程池来查询大量数据,以及这样做的好处和实现方法。 首先,理解线程池的概念至关重要。线程池是一种多线程处理形式,预先创建了若干个线程,当有任务需要执行时,会从线程池中取出...
final修饰的形参在方法调用时根据传入的参数自动初始化,不能在方法内部再赋值。 ```java public class FinalLocalVariable { public void test(final int a) { // final形参不能在方法内赋值 // a = 5; // 非法 ...
6. **final参数**: 在方法签名中,可以声明参数为`final`,这意味着在方法体内不能改变参数的值。这是一种良好的编程实践,可以防止意外修改。 7. **final局部变量**: 有时,我们可能希望确保在循环或其他复杂...
在Java编程语言中,`final` 和 `finally` 是两个重要的关键字,它们分别有不同的用途和含义。下面将详细解释这两个关键字的功能以及它们在Java中的应用。 1. `final` 关键字: - **修饰成员变量**:`final` 可以...