在Java中,在接口方法中定义final参数是完全合法的,不要在实现类中遵守这个参数,例如: public interface Foo { public void foo(int bar, final int baz); } public class FooImpl implements Foo { @Override public void foo(final int bar, int baz) { … } } 在上面的例子中, bar和baz在类VS接口中有相反的final定义。 以同样的方式,当一个类方法扩展另一个时,没有final限制,无论是abstract还是非abstract 。 当final方法体内部有一些实用的值时,有没有指定final方法的参数?
任何人都可以告诉我什么是Java的上下文行的意义: finalvariables仍然可以被操纵,除非它是不可变的 据我所知,通过声明任何variables为最终的,你不能再改变它,那么它们对于上面那行不可改变的单词意味着什么?
我一直在用静态方法使用修饰符,并遇到了一个奇怪的行为。 我们知道,静态方法不能被覆盖,因为它们与类而不是实例相关联。 所以,如果我有下面的代码片段,它编译好 //Snippet 1 – Compiles fine public class A { static void ts() { } } class B extends A { static void ts() { } } 但是,如果我将final修饰符包含在A类的静态方法中,那么编译失败,B中的ts()不能覆盖A中的ts(); 重写的方法是静态的最后 。 为什么当静态方法根本无法被覆盖时发生这种情况?
我试图找出Java中的常量背后的原因我已经了解到,Java允许我们通过使用final关键字来声明常量。 我的问题是为什么没有引入一个常量( const )function。 由于很多人说它来自C ++,所以在C ++中我们有const关键字。 请分享你的想法。
我在我正在处理的代码库中遇到以下代码: public final class ConfigurationService { private static final ConfigurationService INSTANCE = new ConfigurationService(); private List providers; private ConfigurationService() { providers = new ArrayList(); } public static void addProvider(ConfigurationProvider provider) { INSTANCE.providers.add(provider); } … INSTANCE被声明为final。 为什么可以将对象添加到INSTANCE中? 不应该使最终的使用无效。 (它不)。 我假设答案必须做指针和内存的东西,但想知道肯定。
我经常遇到如下的方法: public void foo(final String a, final int[] b, final Object1 c){ } 如果调用此方法而不传递最终参数会发生什么情况。 即稍后改变的Object1(所以没有声明为final)可以传递给这个方法
我被告知,我误解了final影响。 final关键字有什么作用? 这里是我所想,我知道的简短概述: Java final修饰符(又名聚合关系) 原始variables :只能设置一次。 (内存和性能增益) 对象variables :可能被修改,最终适用于对象引用。 字段 :只能设置一次。 方法 :不能被覆盖,隐藏。 类 :不能扩展。 垃圾收集 :将强制Java代垃圾收集标记扫一扫。 可以和不可以的 可以使克隆失败(这是好的和坏的) 可以使不可变的原语又称为const 可以使空白不变 – 初始化创buildaka只读 可以使对象浅不可变 可以使范围/可见性不可变 可以使方法调用开销更小(因为它不需要虚表) 可以使方法论点作为最终(即使你不是) 可以使对象线程安全(如果对象被定义为最终的,它不会使方法参数最终) 可以做模拟testing(不是你可以做任何事情 – 你可以说错误是有意的) 不能交朋友(可以和其他朋友一起rest,不可改变) 不能做可变以后更改为不可变(但可以像修复工厂模式) 不能使数组元素永远不可变,即不可变的 无法创build对象的新实例(这是好的和坏的) 无法使序列化工作 没有final ,但有包装+私人和枚举。
在Java中禁止inheritance的好理由是什么,例如通过使用单个私有的无参数构造函数来使用最终的类或类? 做出最终方法的好理由是什么?
System.out被声明为public static final PrintStream out 。 但是你可以调用System.setOut()来重新分配它。 咦? 如果这是final这怎么可能? (同样的观点适用于System.in和System.err ) 更重要的是,如果你可以改变公共静态final域,这就意味着final给你的保证(如果有的话)是什么意思? (我从来没有意识到也没有料到System.in/out/errperformance为finalvariables)
在Java中,有什么区别: private final static int NUMBER = 10; 和 private final int NUMBER = 10; 两者都是private和final ,区别在于static属性。 什么更好? 为什么?