推理方法的最终结果

对不起,这里有一个简单的问题,只是在我的笔记中找到了一些关于最终制作方法的内容。 我的笔记声称你应该为这个方法做出决定:

使强制执行不变量成为不可能。

String应该表现为String。

我真的不明白这是什么意思。 有人可以帮我分手吗? 非常感谢。

我猜应该说“有可能强制执行不变量”。 基本上,如果某人可以覆盖一个方法,那么他们可以改变影响你的类不变量的行为。

通常有两个理由使方法最终,性能和设计。 当方法是最终的时,它可以是内联的。 在HotSpot编译之前(JDK 1.1.x),这些方法通常在编译时内联,而使用HotSpot时,它们在运行时内联,除非编译器可以保证内联方法将始终与使用它的代码一起编译。 我知道创建局部变量或参数最终的原因有两个。 第一个原因是您不希望代码更改局部变量或参数。 许多人认为改变方法内部的参数是不好的风格,因为它使代码不清楚。 作为一种习惯,一些程序员将所有参数设置为“最终”以防止他们自己更改它们。 我不这样做,因为我发现它使我的方法签名有点难看。

当我们想要从内部类中访问局部变量或参数时,第二个原因就出现了。 据我所知,这是实际的原因,最终的局部变量和参数被引入到JDK 1.1中的Java语言中。 资源

是的,基本上做任何最终意味着你无法改变它。 通过相同的推理,可以在类中使方法成为最终,以使其他子类无法覆盖此方法的function。 这适用于您绝对希望这一function始终执行此操作的情况。

如果他们读到你的笔记可能会更有意义:

最后一种方法可以强制执行不变量。

换句话说,最终确定方法可确保它返回您所指的值,而不是返回其他人错误认为应该是的重写值。

那些笔记没有多大意义 – 我认为不可能应该’可能’。 我们的想法是,如果您不希望子类更改方法的行为,则可以将该方法标记为final,并且无法覆盖该方法。 这比将整个类标记为final是更精细的控制。

基本上,如果你创建一个方法final,那么你不能在子类中覆盖该方法。

如果应用程序的行为依赖于某种方法完全以某种方式运行,并且您不希望其他开发人员出现并更改此行为,那么您可以使用“final”关键字。

String在创建时是不可修改的。 这意味着它的所有内部字段都被声明为final,并且它没有提供更新其内部内容的方法。 因此,当您将字符串声明为“我是字符串”时,您知道您声明的字符串将保留该值直到时间结束。

当您不希望该方法被扩展您的方法的类覆盖时,应该将方法声明为final。 如果这些方法中的任何一个更改了类中的变量,那么只有最终方法的类仍然是可变的。

我喜欢使用不可修改的类,它确实帮助我随时了解我的程序状态,并以某种方式防止难以捕获的错误。

  class A{ public A(){ print("A"); } public void print(String t){ System.out.println(t); } } class B extends A{ public B(){ super(); } @Override public void print(String t){ System.out.println("Not A: " + t); } } new B(); 

打印“不是A:A”

如果超类方法“打印(”最终这种类型的错误不会发生。

通过最终,您可以强制执行此方法保持不变,以便A总是可以开心打印“A”