博客网站主页代码html介绍在家里做的点心的网站
news/
2025/10/6 20:36:39/
文章来源:
博客网站主页代码html,介绍在家里做的点心的网站,wordpress cute主题,最新域名网站查询经过一些自己的混淆#xff0c;最终博客方法的具体含义#xff08;最终声明的方法参数#xff09;将对此博客条目进行澄清。 至少可以将方法参数上的final关键字视为Java编译器的指示符#xff0c;表明该参数不能重新分配给另一个引用。 Java参数处理始终是“按值调用” 最终博客方法的具体含义最终声明的方法参数将对此博客条目进行澄清。 至少可以将方法参数上的final关键字视为Java编译器的指示符表明该参数不能重新分配给另一个引用。 Java参数处理始终是“按值调用” 是的即使在处理对象时也是如此这是为什么。这是真的。当处理非原始数据类型时Java处理对对象的引用。 对象本身不会从被调用者传递给目标函数 而是传递一个指向所需对象的引用。 但是此引用不等同于被调用方因为它只是一个副本。 传递给函数的是将复制的引用作为值-好的每个人都还在吗 :-)也许Java应该使用更匹配的解释“按复制参考调用作为值” 。 总结一下 Java仅以“按值调用”样式传递所有方法参数 原始数据类型或对对象的引用 为了证明这一点让我们看一下下面的演示代码及其输出。 /*** Call by Value Test Application.** author Christopher Meyer* version 0.1 * Apr 21, 2012*/
public class CBVTest {public static void main(String[] args) {Integer mainInternInteger new Integer(1);/** Even references are copied during calls!** Explanation Objects are never passed, only references to them, BUT* references are copied! So only reference COPIES reach the method.* Neither changes to the reference inside/outside the method will* influence the counterpart.** Maybe it should be called Call by Copied Reference as Value.*/class RunMe implements Runnable {Integer runnerInternInteger;public RunMe(Integer i) {runnerInternInteger i;/** The following operation will have no effect on the main* thread, since the reference to i is a copied one.* Interfacing the caller reference is prevented.*/i new Integer(3);}Overridepublic void run() {while (true) {System.out.println(runnerInternInteger.intValue() \t (runner intern value));}}}Thread runner new Thread(new RunMe(mainInternInteger));runner.start();// Create a new object and assign it to mainInternInteger.mainInternInteger new Integer(2);while (true) {System.out.println(mainInternInteger.intValue() \t (main intern value));}}
} 代码的输出如下所示 ...
2 (main intern value)
2 (main intern value)
2 (main intern value)
2 (main intern value)
1 (runner intern value)
2 (main intern value)
1 (runner intern value)
2 (main intern value)
1 (runner intern value)
2 (main intern value)
1 (runner intern value)
1 (runner intern value)
1 (runner intern value)
1 (runner intern value)
1 (runner intern value)... 因此对已处理参数的赋值i new Integer3或从调用类进行的重新赋值mainInternInteger new Integer2都不会相互影响。 那么如果没有必要那又有什么价值呢 如果添加到RunMe的构造方法中公共RunMefinal Integer i则重新分配i new Integer3会引发异常线程“ main”中的异常java.lang.RuntimeException无法编译的源代码–最终参数我可能不会被分配。 它可以防止因意外重新分配而导致的故障。 意外分配给已处理的参数将始终失败 最终迫使开发人员生成准确的代码。 final关键字不是方法签名的一部分。 因此无论是否声明为final编译后的代码都是相同的每个人都可以使用diff轻松检查。 这意味着一旦声明了方法参数就不会重载该方法的参数而一旦声明则不会。 由于字节码保持相同因此对性能也绝对没有影响。 更令人困惑的是请记住在可以修改变量时例如在处理线程的匿名内部类时如果您不清楚在同一上下文中考虑多个变量则内部类需要定义一个变量final。可以更改的相同名称。 参考在Java安全和相关主题博客上 使用我们JCG合作伙伴 Christopher Meyer的方法参数上的final关键字 。 翻译自: https://www.javacodegeeks.com/2012/04/using-final-keyword-on-method.html
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/929677.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!