`

JAVA 使用final参数的原因

    博客分类:
  • java
 
阅读更多

先介绍一些基本概念。

 

final是java里面的一个很重要的关键字。

 

 

final变量

  1. 如果变量时基本类型,那么这个变量一旦初始化之后就不能更改
  2. 如果变量时引用类型,那么这个变量的引用不能变,但是引用所指定的对象可以变

其初始化可以在两个地方,一是其定义处,也就是说在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
      }

 

 

 

 

 

分享到:
评论

相关推荐

    Java关键字final、static使用总结

    使用 final 方法的原因有二:一是把方法锁定,防止任何继承类修改它的意义和实现;二是高效,编译器在遇到调用 final 方法时候会转入内嵌机制,大大提高执行效率。 3、final 变量(常量) final 变量表示常量,值...

    Java中的final关键字

    5. **final参数** - `final`修饰的形参表示该参数的值在方法体内不能改变,增强了代码的可读性和防止意外的副作用。 6. **final和多线程** - 在多线程环境下,`final`字段具有特殊的含义,它们可以被JVM保证初始...

    java中final和static的总结

    总之,`final`和`static`是Java中不可或缺的关键字,它们各自有其特定的使用场景。理解并正确使用它们可以提高代码的可读性、安全性和效率。在设计类和接口时,明智地使用`final`和`static`可以帮助实现更好的设计...

    java中final和static的区别

    Java 中 final 和 static 的区别 final 关键字在 Java 中有多种用法,包括修饰变量、方法、类等。下面是 final 关键字的各种用法: 1. final 修饰变量:表示该变量一旦被初始化,程序无法修改变量的值,该变量变成...

    Java final关键字

    在Java编程语言中,`final`关键字扮演着一个至关重要的角色...通过合理使用`final`,我们可以提高代码的可读性、可维护性和安全性。在实际开发中,应根据需求灵活运用`final`关键字,以实现更清晰、更稳定的代码设计。

    Java中final的用法.doc

    【Java中的final关键字】 在Java编程语言中,`final`关键字有着重要的作用,它用于标记一个变量、方法或类,表示不可变性。这个特性在多个方面都有应用,包括创建常量、确保引用不可变以及在多线程环境中提供安全。...

    【Java编程教程】详解Java final 关键字.pdf

    ## final参数 在方法签名中,可以将参数声明为`final`,这样在方法体内就不能修改该参数的值。这提供了一种方式来明确表达参数不应在方法内部被修改的意图。例如: ```java void someMethod(final int num) { num...

    浅析Java中的final关键字Java开发Java经验技

    本篇文章将深入探讨`final`关键字在Java中的使用和重要性,帮助开发者更好地理解和应用这一关键特性。 首先,`final`关键字用于声明变量。当一个变量被声明为`final`时,它的值一旦被初始化,就不能再改变。这在...

    java filter打印请求返回参数

    ### Java Filter 打印请求返回参数详解 #### 一、背景与目的 在Web开发过程中,经常需要在请求处理流程中增加一些通用的功能,比如日志记录、性能监控、安全控制等。Java Servlet规范提供了Filter机制来实现这些...

    Java中final作用于变量、参数、方法及类该如何处理

    Java中的`final`关键字在编程中扮演着至关重要的角色,它用于确保代码的不可变性和确定性。在本文中,我们将深入探讨`final`在变量、参数、方法和类中的应用及其作用。 **1. `final`关键字用于变量** - **final...

    Java常见笔试、面试题目深度剖析 final详解

    5. **final参数** - `final`关键字也可以用于方法参数,表示参数在方法体内不能被重新赋值。这有助于代码的可读性和避免意外的修改,特别是在长方法或多线程环境中。 6. **final与效率** - Java虚拟机(JVM)可能...

    JAVA(static、finalの使用).doc

    ### JAVA中的`final`关键字详解 在JAVA编程中,`final`关键字扮演着至关重要的角色,它赋予程序员控制代码的可变性和可继承性的能力。本文将深入探讨`final`关键字在不同场景下的应用,包括如何使用`final`定义常量...

    Java中static、this、super、final用法

    在Java编程语言中,`static`, `this`, `super`, 和 `final` 是四个非常重要的关键字,它们分别代表不同的概念并具有特殊的用法。 一、`static` `static` 关键字用于声明类级别的成员(变量或方法),这意味着它们...

    Java 多线程与并发(6-26)-关键字- final详解.pdf

    * final修饰参数:final参数在方法中不能被修改。 二、final域重排序规则 final域重排序规则是指final域的访问顺序问题。在Java语言中,final域的访问顺序是:首先访问final域,然后访问非final域。 * final域为...

    Java中final关键字的用法总结

    final参数主要用于防止方法内部无意中改变参数值,但不影响方法外部的变量。 以下是一个示例程序的分析: ```java public class Test { public static void main(String[] args) { String a = "hello2"; final ...

    Java this、final等关键字总结

    Java中的关键字this、final以及super在编程中扮演着至关重要的角色。下面我们将深入探讨这些关键字的用法和意义。 首先,`this`关键字是Java中一个非常基础且实用的元素,它代表当前对象的引用。当类的成员变量与...

    JAVA使用线程池查询大批量数据

    本文将深入探讨如何在Java中使用线程池来查询大量数据,以及这样做的好处和实现方法。 首先,理解线程池的概念至关重要。线程池是一种多线程处理形式,预先创建了若干个线程,当有任务需要执行时,会从线程池中取出...

    java面向对象之final修饰符.docx

    final修饰的形参在方法调用时根据传入的参数自动初始化,不能在方法内部再赋值。 ```java public class FinalLocalVariable { public void test(final int a) { // final形参不能在方法内赋值 // a = 5; // 非法 ...

    java提高篇之关键字final编程开发技术共5页.pdf

    6. **final参数**: 在方法签名中,可以声明参数为`final`,这意味着在方法体内不能改变参数的值。这是一种良好的编程实践,可以防止意外修改。 7. **final局部变量**: 有时,我们可能希望确保在循环或其他复杂...

    java中final与finally的使用介绍

    在Java编程语言中,`final` 和 `finally` 是两个重要的关键字,它们分别有不同的用途和含义。下面将详细解释这两个关键字的功能以及它们在Java中的应用。 1. `final` 关键字: - **修饰成员变量**:`final` 可以...

Global site tag (gtag.js) - Google Analytics