- 浏览: 933435 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (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 1231在项目中使用一些比较新的库总会给你带来很多快乐,在这篇文章中 ... -
Java NIO 系列教程
2014-03-05 21:18 2090http://ifeve.com/java-nio-all/ ... -
JSON与JAVA数据的相互转换
2014-01-08 16:42 1115import net.sf.json.JSONArray ... -
Hash算法大全(java实现)
2013-11-01 18:29 6220https://weblogs.java.net/blog ... -
Java获取客户端真实IP地址的两种方法
2013-10-31 16:35 10514http://dpn525.iteye.com/blog/ ... -
告别无止境的增删改查:Java代码生成器
2013-08-08 10:04 1276有感于马上要做个比较大的业务系统,想到那无止境的增删改查、粘 ... -
ClassLoader原理
2013-07-10 12:39 882JVM规范定义了两种类 ... -
java classLoader 体系结构
2013-07-10 11:44 798原文出处:http://blog.chenlb.com/20 ... -
Java NIO 详解
2013-05-15 11:50 1469http://vaporz.blog.51cto.com/3 ... -
POI.HSSF.util.HSSFColor中所有颜色索引
2013-05-06 14:33 3896FileInputStream fileInputStr ... -
JAVA实现实用的ZIP压缩与解压
2013-04-07 22:40 920程序实现了ZIP压缩。共分为2部分 : 压缩(compres ... -
java解析获取Excel中的数据--同时兼容2003及2007
2013-04-02 16:06 6749java解析Excel(兼容2003 ... -
改善异常处理的 6 个技巧
2013-01-28 23:23 1093在软件开发过程中,往往会出现一些不可预知的错误,这些错误有可 ... -
POI API整理
2012-10-31 15:48 1862POI API整理 l 创建一个Exce ... -
POI导出EXCEL经典实现 .
2012-10-30 16:57 1494在web开发中,有一个经典的功能,就是数据的导入导出。特别 ... -
运用El表达式截取字符串/获取list的长度
2012-04-27 16:58 1654头部加入标签库 <%@ taglib prefix=& ... -
JVM原理_内存篇
2011-12-15 21:45 1344JVM是Java Virtual Machine(Java虚拟 ... -
关于java 中double型数据的四舍五入与加减乘除
2011-06-09 17:28 2108java中用DecimalFormat df = new D ...
相关推荐
今天小编就为大家分享一篇关于Java为什么匿名内部类参数引用需要用final进行修饰?,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
特别是String对象的使用中,出现字符串连接情况时应使用StringBuffer代替,由于系统不仅要花时间生成对象,以后可能还需要花时间对这些对象进行垃圾回收和处理。因此生成过多的对象将会给程序的性能带来很大的影响...
在Java中, 可以使用final关键字修饰类、方法以及成员变量。 (1).final标记的类不能被继承; (2).final标记的方法不能被子类复写; (3).final标记的变量即成为常量,只能被赋值一次. 注意: 如果使用final来...
在Java中,多态性通过方法重写和方法重载来实现。方法重写是指子类重新定义父类的方法,而方法重载是指在同一个类中定义多个同名但参数列表不同的方法。 3.什么是Java的静态关键字? 静态关键字用于修饰类的成员...
在Java中,final可以别用来修饰类、修饰方法、修饰变量和修饰参数等,这里就来简单作一个Java中final关键字的用法总结:
方法的参数被final修饰表示在方法体内,该参数的值不可以被修改。 finally在异常处理时提供finally块来执行任何清除操作。无论有没有异常被抛出、捕捉,finally块都会被执行。 finalize是方法名。Java技术允许使用...
示例 4 方法重写 2-1 方法重写 2-2 访问修饰符 3-1 信息隐藏是 OOP 最重要的功能之一,也是使用访问修饰符的原因 信息隐藏的原因包括: 对任何实现细节所作的更改不会影响使用该类的代码 防止用户意外删除数据 此类...
此外,PowerMock还支持模拟普通方法、私有方法、静态方法和final修饰的方法,这极大地丰富了其在各种不同场景下的应用可能性。在实际应用中,为了引入PowerMock包,需要在项目的pom.xml文件中添加相应的Maven依赖。
11.4.6 使用final修饰成员变量 325 11.4.7 静态成员变量 326 11.4.8 局部变量的修饰符 326 11.4.9 当final遇到引用类型成员变量 327 11.5 小结:修饰符作用大 328 11.6 习题 330 第12章 接口 331 教学视频:...
用,变量和方法可以通过设定一定的访问权限(见下面的例子)来允许或禁止其它对象对它的 访问。 我们先定义一个类 Point。 例子: class Point{ int x,y; String name = "a point"; Point(){ x = 0; y = 0; } Point( ...
当在内存形成类的信息绑定的时候不会出现多个交叉点,结构的清晰程度较高.Java本身的运行效率较低,只能达到C语言的五分之一.Java语言舍弃效率的完美要求,换来学习和使用的简单. 属性的遮盖: Father f = new Son...
11.4.6 使用final修饰成员变量 325 11.4.7 静态成员变量 326 11.4.8 局部变量的修饰符 326 11.4.9 当final遇到引用类型成员变量 327 11.5 小结:修饰符作用大 328 11.6 习题 330 第12章 接口 331 教学视频:...
10.final类中的属性和方法都必须被final修饰符修饰。 二 选择题 (共 30分) 1 按命令行:java Test Red Green Blue执行下面的程序后,bar的值是( ) public class Test { public static void main(String[] ...
· 用protected修饰的属性和方法,父类和子类不在同一包下不能继承 子类又称派生类,父类又称基类和超类 super:关键字,对父类对象的引用,可以调用本类的属性和方法 super(); 对父类对象构造的调用,如果...
1>对于基本类型前加以final修饰,表示被修饰的变量为常数,不可以修改。一个既是static有是final的字段表示只占据一段不能改变的存储空间。 2>final用于对象应用时,final使应用恒定不变。一旦引用被初始化指向一个...
用关键字final修饰一个类或者方法时,有何意义? 48.掌握类和对象的概念,掌握面向对象编程的本质 49.静态变量和静态方法的意义,如何引用一个类的静态变量或者静态方法? 50.JAVA语言如何进行异常处理,关键字:...
C abstract类中可以有非abstract方法,但该方法不可以用final修饰 D 不可以同时用final和abstract修饰一个方法 9、假设D类有如下定义,设d是D类的一个实例对象,下列语句调用错误的是 ( )。 class D{ int i; ...
成员方法的声明格式: [<修饰符>]<返回类型> <方法名> ([<参数表列>]) [throws <异常类>] { 方法体 } 修饰符: 方法的访问权限(缺省的、public、protected和private) static: 类方法(静态方法); abstract: 抽象...
如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。 15、error和exception有什么区别? error 表示恢复不是...
在JAVA中使用关键字extends 3.调用子类的构造方法时,会先调用父类的构造方法。默认隐式调用父类无参数的构造方法 4.如果要在子类的构造方法中显式调用父类的构造方法。使用super(参数列表),但是这行代码必须是在 ...