首页 \ 问答 \ 使java方法参数为final(Making java method arguments as final)

使java方法参数为final(Making java method arguments as final)

最终在下面的代码之间有什么区别。 在将参数声明为final时有什么好处吗?

public String changeTimezone( Timestamp stamp, Timezone fTz, Timezone toTz){  
    return ....
}

public String changeTimezone(final Timestamp stamp, final Timezone fTz, 
        final Timezone toTz){
    return ....
}

What difference that final makes between the code below. Is there any advantage in declaring the arguments as final.

public String changeTimezone( Timestamp stamp, Timezone fTz, Timezone toTz){  
    return ....
}

public String changeTimezone(final Timestamp stamp, final Timezone fTz, 
        final Timezone toTz){
    return ....
}

原文:https://stackoverflow.com/questions/4162531
更新时间:2019-07-02 03:24

最满意答案

作为一个正式的方法参数是局部变量,只有当它们被声明为final时,才能从内部匿名类访问它们。

这将节省您在方法体中声明另一个局部最终变量:

 void m(final int param) {
        new Thread(new Runnable() {
            public void run() {
                System.err.println(param);
            }
        }).start();
    }

As a formal method parameter is a local variable, you can access them from inner anonymous classes only if they are declared as final.

This saves you from declaring another local final variable in the method body:

 void m(final int param) {
        new Thread(new Runnable() {
            public void run() {
                System.err.println(param);
            }
        }).start();
    }
2014-03-13

相关问答

更多

求问java中final的作用

final关键字: 1修饰类 如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。 2.修饰方法和变量 将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载. 3.修饰对象句柄 声明为final的对象句柄,声明时必须具体初始化到一个具体的对象,而且不能将句柄指向另外 ...

宣布最终的静态方法是一个坏主意吗?(Is it a bad idea to declare a final static method?)

我认为将static方法标记为final是不好的做法。 正如你发现的那样, final会阻止该方法被非常好消息imho的子类隐藏。 我对你的发言感到非常惊讶: 在Foo中将方法()重新定义为final将禁用Bar隐藏它的能力,并重新运行main()将输出: 在Foo 在Foo 不,将该方法标记为Foo final方法将阻止Bar编译。 至少在Eclipse中我得到: 线程“main”中的异常java.lang.Error:未解决的编译问题:无法覆盖Foo的最终方法 另外,我认为人们应该总是调用st ...

在任何地方使用`final`修饰符的开源Java项目(Open source Java projects that use `final` modifiers everywhere)

以下是一些使用最终参数和本地的项目。 他们没有被选中突出或活动。 我不确定我会怎么做。 我从Google收集了它们:allintext:“final”导入网站:sourceforge.net wnpojo.sf.net在Java类中包装WordNet实体 spnego.sf.net在Java中集成了Windows身份验证 waterken.sf.net通过HTTP提供异步调用 jeuclid.sf.net呈现MathML statcvs.sf.net将CVS项目描述为表格和图表 以下是一些非常突出 ...

java中的final用法

如果确定你的类你不会被继承的话 就应该把类写成final的 这样可以微微的提高运行速度 final你只要记住这一条就足够了 当然还是static final 定义的常量

Java中的final方法?

将方法声明为final那有两个原因,第一就是说明你已经知道这个方法提供的功能已经满足你要求,不需要进行扩展,并且也不允许任何从此类继承的类来覆写这个方法,但是继承仍然可以继承这个方法,也就是说可以直接使用。第二就是允许编译器将所有对此方法的调用转化为inline调用的机制,它会使你在调用final方法时,直接将方法主体插入到调用处,而不是进行例行的方法调用,例如保存断点,压栈等,这样可能会使你的程序效率有所提高,然而当你的方法主体非常庞大时,或你在多处调用此方法,那么你的调用主体代码便会迅速膨胀, ...

使私有方法最终?(Make private methods final?)

添加final方法不能提高Sun HotSpot的性能。 在final可以添加的地方,HotSpot会注意到,该方法不会被覆盖,因此它也是一样的。 在Java private方法中是非虚拟的。 即使使用嵌套类,子类也可以访问它们,您不能覆盖它们。 例如,指示调用privates的方法与用于非私有的方法不同。 添加final到私人方法没有任何可能。 与以往一样,这些微观优化是不值得花时间的。 Adding final to methods does not improve performance w ...

为什么私人方法是最终的?(Why private method can not be final as well?)

基本上,这是允许的,因为他们觉得不应该放置禁止private修饰符的特殊情况。 这就像你也可以将接口上的方法声明为public或接口中的嵌套类为static ,即使这些关键字隐含在接口中。 你也可以在final堂课上声明final方法等。 当你添加冗余修饰符时,Java采取了不抱怨的立场。 他们一贯这样做。 Basically, it's allowed because they didn't feel like it's worthwhile to put a special case proh ...

在Java中,关键字“final”,“finally”和“finalize”的目的是什么?(In Java, what purpose do the keywords `final`, `finally` and `finalize` fulfil?)

最后 final可以用来标记一个变量“unchangeable” private final String name = "foo"; //the reference name can never change final也可以使方法不能“超越” public final String toString() { return "NULL"; } final也可以让班级不“继承”。 即该类不能被子类化。 public final class finalClass {...} public c ...

相关文章

更多

最新问答

更多
  • Android宽度:100%修复(网站接管问题)(Android width:100% fix (website takeover issue))
  • C ++函数/方法设计的良好实践(Good practice in C++ function/method design)
  • 计算其他表中不存在的所有记录 - SQL查询(Count all records that does not exist to other table - SQL Query)
  • 为什么我要用JPA共享ID?(Why do I get shared Ids with JPA?)
  • asp.net - 如何显示来自html格式的数据行的字段(asp.net - how to display a field from data row that is in html format)
  • 我们如何使用ActiveRecord从连接表中删除行?(How can we delete rows from a join table by using ActiveRecord?)
  • ng-class搞乱了类的顺序(ng-class messing with the order of classes)
  • oracle 12g无效数字错误(oracle 12g invalid number error)
  • 更改ng-src值onclick(Change ng-src value onclick)
  • 如何在android中自动添加自定义依赖项以创建新项目?(How to add custom dependencies automatically in android for ever a new project is created?)
  • datetime函数在PHP中(datetime function in php)
  • 在javascript中获取会话数组的值(in javascript get the value of a session array)
  • 如何在UTF8中编译LaTeX?(How can I compile LaTeX in UTF8? [closed])
  • Rspec:“array.should == another_array”,但不用担心订单(Rspec: “array.should == another_array” but without concern for order)
  • Logcat错误:无法在android片段中加载视图(Logcat error: unable to load view in android fragments)
  • JavaFX的。(JavaFX. Adding items to the list in different threads is not working)
  • 从GDATA日历资源迁移到Google Calendar Resource api(Migrate from GDATA calendar resource to Google Calendar Resource api)
  • SSRS 2008 - 以零情景处理分割(SSRS 2008 - Dealing with division by zero scenarios)
  • 我如何以编程方式添加一个listView列标题的点击事件(How can I add a listView column header a click event programmatically)
  • Wxpython:无法检索有关列表控件项XXX的信息(Wxpython: Couldn't retrieve information about list control item XXX)
  • 使用Tortoise SVN在SVN存储库中移动目录(Move Directory across SVN repository using Tortoise SVN)
  • 天蓝色服务结构集群中的web api无状态服务是否在一段时间不活动后进入休眠状态?(Do web api stateless services in azure service fabric cluster go to sleep after a period of inactivity?)
  • 我可以设置intelliJ来突出显示PHP编码风格吗?(Can I set intelliJ to highlight php coding style?)
  • 用javafx创建一个Truetype字体文件(Creating a Truetype Font file with javafx)
  • Spring ftp配置错误(Spring ftp configuration is wrong)
  • 使用gsub去除多个字符(Using gsub to strip multiple characters)
  • 续订推送证书并保持当前的App Store App正常工作(Renew Push certificate and keep current App Store App working)
  • js:ES5和ES6之间关于'this'关键字用法的一个令人困惑的观点(js: one confusing point about 'this' keyword usage between ES5 and ES6)
  • window.onload vs $(document).ready()(window.onload vs $(document).ready())
  • 在Swift中,如何声明一个符合一个或多个协议的特定类型的变量?(In Swift, how can I declare a variable of a specific type that conforms to one or more protocols?)