- 浏览: 950791 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (423)
- mysql (37)
- hibernate (3)
- struts (9)
- spring (33)
- dom4j (2)
- junit (0)
- exception (1)
- 随笔杂谈 (12)
- google app engine (1)
- XMPP (1)
- OAuth安全授权 (1)
- 版本控制 (8)
- 心情感悟 (0)
- core java (19)
- log4j (7)
- jquery (12)
- javascript (10)
- 网站性能优化及工具 (11)
- 服务器架设配置等 (38)
- EXT (4)
- 正则表达式 (5)
- 日志统计分析 (2)
- htmlparse (4)
- httpclient (5)
- java随笔 (5)
- dhtmlxtree (1)
- freemarke (5)
- memcached (6)
- javamail (5)
- Linux命令 (10)
- 应用监控cpu web jdbc等 (4)
- jmagick (9)
- 第三方缓存策略 (9)
- ORM (2)
- hadoop (2)
- 大数据量处理 (8)
- 经典 (1)
- 权限设计 (1)
- andriod (1)
- mybatis (12)
- redis (24)
- 数据结构_算法 (5)
- 分布式系统 (1)
- php (1)
- 网络编程 (3)
- 服务器部署 (3)
- ios (2)
- IM (23)
- mina (1)
- 视讯和语音 (1)
- 代码生成 (1)
- 架构 (4)
- 建模工具 (1)
- oracle (4)
- solr (10)
- 构建工具 (7)
- html5 (1)
- nginx (5)
- css (1)
- 大数据-分布式 (2)
- 设计模式 (2)
- mq (2)
- jvm调优 (8)
- 并发编程 (2)
- 搜索引擎 (1)
- UML (2)
最新评论
-
天使建站:
jquery获取网页里多选框checkbox选中项的值的方法及 ...
JS jQuery分别获取选中的复选框值 -
abao1:
发现一个小问题 sortAndSave方法中的for循环 第二 ...
完整java实现外部排序 -
西巴拉古呀那:
Kafka分布式消息系统实战(与JavaScalaHadoop ...
消息系统kafka介绍 -
kafodaote:
Kafka分布式消息系统实战(与JavaScalaHadoop ...
消息系统kafka介绍 -
成大大的:
Kafka分布式消息系统实 ...
消息系统kafka介绍
很多人都说在
JAVA
中用
final
来修饰方法参数的原因是防止方法参数在调用时被篡改,其实也就是这个原因,但理解起来可能会有歧义,有的人认为是调用语句的地方的变量的实际值不会被修改,另一种理解就是仅在调用方法内部不能被修改。
实际上第一种理解是错误的,对于基本类型来说,用不用
final
来修饰都是一样的效果,如下面的代码:
publicstaticvoid main(String hh[]) { int i = 1; System.out.println(i); checkInt(i); System.out.println(i); } publicstaticvoid checkInt(finalint i) { i += 200; }
你把checkInt()方法中的参数设成final和非final的效果是一样子的。
对于引用类型来说也是一样子的,用不用修饰都不会改变引用地址,而都可以改变引用变量的属性值。如下:
publicstaticvoid main(String hh[]) { LoginInfo login = new LoginInfo(); login.setPassword("1235"); login.setUserName("mygod"); System.out.println("username:"+login.getUserName()+",password:"+login.getPassword()); checkLoginInfo(login); System.out.println("username:"+login.getUserName()+",password:"+login.getPassword()); } publicstaticvoid checkLoginInfo(final LoginInfo login) { login.setUserName("yun"); }
对于第二种说法,是这个样子的,我给了这个参数,你只能用这个参数的值,你不能修改它,对于基本类型和引用类型是一样的,如下:
//如果不是final 的话,我可以在checkInt方法内部把i的值改变(有意或无意的, //虽然不会改变实际调用处的值),特别是无意的,可能会引用一些难以发现的BUG publicstaticvoid checkInt(int i) { i = 200;//这样是可以的,不会编译出错的 //do something } //如果是final 的话,我可以在checkInt方法内部就没办法把i的值改变 //可以完全避免上面的问题 publicstaticvoid checkInt(finalint i) { i = 200;//这样是不可以的,会编译出错的 //do something } //final 的引用类型方法参数 publicstaticvoid checkLoginInfo(final LoginInfo login) { login = new LoginInfo();//error,编译不过去 //do something } //非final的引用类型方法参数 publicstaticvoid checkLoginInfo(LoginInfo login) { //没有任何问题,但是肯定不符合此参数存在的初衷 login = new LoginInfo(); //do something }
匿名内部类的方法中使用final 就是这个道理
这是匿名内部类的规定,防止你在类里修改参数。
评论
2 楼
wo371980755
2013-07-25
xnzhao196 写道
public static void checkInt(finalint i)
{
i += 200;
}
这段代码是错的吧 ,你列举的第一个例子 ??求解答
{
i += 200;
}
这段代码是错的吧 ,你列举的第一个例子 ??求解答
是的。是错的
1 楼
xnzhao196
2011-08-08
public static void checkInt(finalint i)
{
i += 200;
}
这段代码是错的吧 ,你列举的第一个例子 ??求解答
{
i += 200;
}
这段代码是错的吧 ,你列举的第一个例子 ??求解答
发表评论
-
使用Apache Commons Configuration读取配置信息
2016-11-04 09:53 1279在项目中使用一些比较新的库总会给你带来很多快乐,在这篇文章中 ... -
Java NIO 系列教程
2014-03-05 21:18 2119http://ifeve.com/java-nio-all/ ... -
JSON与JAVA数据的相互转换
2014-01-08 16:42 1151import net.sf.json.JSONArray ... -
Hash算法大全(java实现)
2013-11-01 18:29 6311https://weblogs.java.net/blog ... -
Java获取客户端真实IP地址的两种方法
2013-10-31 16:35 10575http://dpn525.iteye.com/blog/ ... -
告别无止境的增删改查:Java代码生成器
2013-08-08 10:04 1306有感于马上要做个比较大的业务系统,想到那无止境的增删改查、粘 ... -
ClassLoader原理
2013-07-10 12:39 922JVM规范定义了两种类 ... -
java classLoader 体系结构
2013-07-10 11:44 830原文出处:http://blog.chenlb.com/20 ... -
Java NIO 详解
2013-05-15 11:50 1507http://vaporz.blog.51cto.com/3 ... -
POI.HSSF.util.HSSFColor中所有颜色索引
2013-05-06 14:33 3956FileInputStream fileInputStr ... -
JAVA实现实用的ZIP压缩与解压
2013-04-07 22:40 961程序实现了ZIP压缩。共分为2部分 : 压缩(compres ... -
java解析获取Excel中的数据--同时兼容2003及2007
2013-04-02 16:06 6828java解析Excel(兼容2003 ... -
改善异常处理的 6 个技巧
2013-01-28 23:23 1136在软件开发过程中,往往会出现一些不可预知的错误,这些错误有可 ... -
POI API整理
2012-10-31 15:48 1901POI API整理 l 创建一个Exce ... -
POI导出EXCEL经典实现 .
2012-10-30 16:57 1548在web开发中,有一个经典的功能,就是数据的导入导出。特别 ... -
运用El表达式截取字符串/获取list的长度
2012-04-27 16:58 1692头部加入标签库 <%@ taglib prefix=& ... -
JVM原理_内存篇
2011-12-15 21:45 1379JVM是Java Virtual Machine(Java虚拟 ... -
关于java 中double型数据的四舍五入与加减乘除
2011-06-09 17:28 2179java中用DecimalFormat df = new D ...
相关推荐
在Java编程语言中,`final`关键字有着重要的作用,它能用于修饰类、方法和变量,以限制它们的使用方式。下面将详细解释`final`修饰类、方法和变量的具体含义及其应用场景。 **final 修饰类** `final`修饰类的作用...
4. 用 private 修饰的 static 成员变量和成员方法,表示这个变量可以在类的静态代码块中,或者类的其他静态成员方法中使用(当然也可以在非静态成员方法中使用),但是不能在其他类中通过类名来直接引用,这一点很...
- 类级(静态)常量通常也用`final`修饰,例如`public static final`,这样的变量被称为常量,如数学中的圆周率π。一旦赋值,就不能更改,常用于定义程序中的固定值。 - `final`修饰的实例变量(非静态)意味着它...
### Java中局部内部类可以访问它所在方法中定义的final修饰的局部变量的合理解释 #### 背景介绍 在Java编程语言中,局部内部类(Local Inner Class)是一种特殊的内部类形式,它被定义在某个方法或构造器的内部。...
final修饰的形参在方法调用时根据传入的参数自动初始化,不能在方法内部再赋值。 ```java public class FinalLocalVariable { public void test(final int a) { // final形参不能在方法内赋值 // a = 5; // 非法 ...
在 Java 编程语言中,final 和 static 是两个非常重要的关键字,它们可以用来修饰类、方法、变量等,了解它们的使用方法和限制非常重要。本文将详细总结 final 和 static 的使用方法和限制。 一、final 关键字 ...
在Java编程语言中,`final`关键字是一种非常重要的修饰符,它可以用来限制变量、方法和类的可变性。理解并正确使用`final`对于编写安全、稳定的代码至关重要。下面我们将详细探讨`final`修饰符的用法及其背后的原理...
在Java编程语言中,`final`关键字扮演着一个至关重要的角色,它被用来声明一个变量、方法或类为不可变的。在这个学习demo中,我们将深入理解`final`关键字的各种用法及其背后的原理。 首先,`final`关键字用于变量...
3. **方法参数**:如果方法参数标记为`final`,则在方法体内部无法改变该参数的值。这有助于防止意外修改。 4. **匿名内部类**:`final`可以应用于局部变量,以便在匿名内部类中使用。这是因为内部类会捕获封闭作用...
在Java编程语言中,`static`, `this`, `super`, 和 `final` 是四个非常重要的关键字,它们分别代表不同的概念并具有特殊的用法。 一、`static` `static` 关键字用于声明类级别的成员(变量或方法),这意味着它们...
Java匿名内部类参数引用需要用final进行修饰的原因分析 Java中的匿名内部类参数引用需要用final进行修饰,这是因为内部类中使用的外部变量需要延长其生命周期,以便在回调时能够找到该变量。下面是详细的分析: ...
**二、final修饰方法** 1. **方法重写**:当父类的一个方法被`final`修饰,子类不能重写这个方法。例如,`Object`类中的`getClass()`方法就是`final`的,无法重写。而像`hashCode()`方法未被`final`修饰,可以被...
在Java中,可以使用final关键字修饰方法参数,确保该参数在方法内部不可修改。这对于防止意外修改参数值和提高代码可读性非常有用: ```java public void useFinalParam(final int num) { num = 10; // 编译错误,...
例如,Java中的`String`类就是`final`的,因此我们不能创建一个新的`String`子类来扩展其功能。 2. **final修饰方法** `final`修饰的方法表明该方法不能被子类重写,但可以重载。这意味着,尽管子类可以有相同名称...
在Java编程语言中,`final`关键字是一个非常重要的概念,它在多个方面有着广泛的应用,包括变量、方法和类的修饰。本篇文章将深入剖析`final`关键字在Java中的使用和意义,帮助读者理解其在面试和实际开发中的重要性...
总的来说,`final`关键字在Java中起到了关键的约束和保护作用,保证了代码的稳定性和可预测性。理解并正确使用`final`,可以帮助开发者编写出更加安全、高效的Java程序。无论是定义常量、防止方法重写、阻止类继承...
总结来说,`final`关键字在Java中扮演了多种角色,包括创建不可变变量、常量、对象和数组,确保方法和类的不可覆盖性,以及在多线程环境中的安全性。正确使用`final`能够提高代码的清晰度、稳定性和性能。
* final修饰参数:final参数在方法中不能被修改。 二、final域重排序规则 final域重排序规则是指final域的访问顺序问题。在Java语言中,final域的访问顺序是:首先访问final域,然后访问非final域。 * final域为...
在 Java 中,成员方法可以被修饰符修饰,常见的修饰符有 public、private、protected、static、final 和 abstract。其中,final 修饰符用于声明最终方法,不能被子类覆盖;abstract 修饰符用于声明抽象方法,不能被...