java中final修饰方法传入参数的影响

最近在看spring 源码深度解析 看到了许多方法中的参数被final修饰符修饰 什么作用自己蒙了 难道在方法中不允许修改参数么

网上查了查 恍然大悟

final类型修饰的参数分为两种类型 基本类型 与引用类型

final修饰基本类型如下

<span style="white-space:pre">	</span>public void getValue(final int a){
   <span style="white-space:pre">		</span>....
<span style="white-space:pre">	</span>}

如果在方法中修改上述方法的参数则会报错如下图

final 修饰引用类型

     public void getValue(final Integer a){
         .........
     }

相同的 如果修改所引用的对象也是会提示上述错误的

但是换种方式

	public void getValue(final Contract c){
		 c.hourSpanName="aa";
	}

就没有任何问题

我总结了下 1、在调用的参数内部 无论是基本类型还是引用类型 其值不可改变(引用类型指的引用对象不变)

2、引用类型中属性可变

3、

时间: 2024-08-02 22:39:08

java中final修饰方法传入参数的影响的相关文章

Java中final修饰符深入研究

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

java中final修饰参数的作用

在方法参数前面加final关键字就是为了防止数据在方法体中被修改. 主要分两种情况:第一,用final修饰基本数据类型:第二,用final修饰引用类型. 第一种情况,修饰基本类型(非引用类型).这时参数的值在方法体内是不能被修改的,即不能被重新赋值.否则编译就通不过.例如: 1 public static void valid(final int ag){2         ag=9;3         ag=10;4 } 错误提示: 第二种情况,修饰引用类型.这时参数变量所引用的对象是不能被改

JAVA中final修饰符小结

一.final关键字可以用来修饰类.方法.变量.各有不同. A.修饰类(class).      1.该类不能被继承.      2.类中的方法不会被覆盖,因此默认都是final的.      3.用途:设计类时,如果该类不需要有子类,不必要被扩展,类的实现细节不允许被改变,那么就设计成final类 B.修饰方法(method)      1.该方法可以被继承,但是不能被覆盖.      2.用途:一个类不允许子类覆盖该方法,则用final来修饰      3.好处:可以防止继承它的子类修改该方

java中final修饰符的使用

1.final修饰符的用法: final可以修饰变量,被final修饰的变量被赋初始值之后,不能对它重新赋值. final可以修饰方法,被final修饰的方法不能被重写. final可以修饰类,被final修饰的类不能够被继承. 上面的这些"语法口诀"对真正掌握final修饰符的用法依然是不够的. 2.final修饰的变量:被final修饰的实例变量必须显示指定初始值,而且只能在如下三个位置指定初始值: 定义final实例变量时指定初始值. 在非静态初始化块中为final实例变量指定初

java中为什么一些方法带参数

一个很有趣的例子: 比如工厂要造一辆车,需要先设计图纸,然后技工师傅拿到图纸,就要设计,我需要一个椅子,一个方向盘,一块底盘.再然后,仓库就把这些东西给技工师傅,最后车组装完成.1.设计图纸就是需求分析,就是脑子里的思路:这个方法要有什么样的功能?要做些什么事.2.技工师傅需要方向盘.底盘.椅子,就是参数!需要这几样才能把汽车做出来,同理,需要这几个参数这个方法才能完成!这样的参数叫形参,只是一个形式,确定参数的类型!比如要椭圆形的底盘,正方形的轮胎……确定之后,就只能按照既定的类型传递参数,否

java学习笔记(三)java中的修饰符abstract、static与final

一.四种访问级别的访问范围 访问级别 访问修饰符 同类 同包 子类 不同的包 公开 public 受保护 protected 默认 没有访问修饰符 私有的 private 二.使用abstract修饰符需要遵守的语法规则 1.抽象类中可以没有抽象方法,但是包含抽象方法的类必须定义为抽象类,即用abstract修饰: 2.抽象类跟抽象方法不能被final修饰符修饰: 3.抽象类中可以有非抽象方法,因为继承抽象类的子类必须重写父类中所有的抽象方法,因此抽象类中不能有抽象构造方法和抽象静态方法: 4.

Java反射机制可以动态修改实例中final修饰的成员变量吗?

问题:Java反射机制可以动态修改实例中final修饰的成员变量吗? 回答是分两种情况的. 1. 当final修饰的成员变量在定义的时候就初始化了值,那么java反射机制就已经不能动态修改它的值了. 2. 当final修饰的成员变量在定义的时候并没有初始化值的话,那么就还能通过java反射机制来动态修改它的值. 实验: 1. 当final修饰的成员变量在定义的时候就初始化了值 1 public Class Person { 2 private final String name = "damon

java中final的使用方法

1 final用于修饰变量 final变量只能赋值一次,赋值的方式有三种: 1)声明变量时直接赋值: 2)非静态成员变量在{}块中赋值,静态成员变量在static{}块中赋值: 3)非静态成员变量在构造方法中赋值. 三种赋值方式的顺序是1).2).3),若有一种方式先行赋值了,则后面的方式就不能再赋值,否则就会编译错误. public class FinalTest { private final int a; private static final int b; private final

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

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