封装的目的是为了提供变量如何更新的显式算法。例如,如果您只允许其他类直接更新变量:
var1 = 123;
...然后你就会被那些能够更新你的类变量的其他类所困,而不能控制分配的值,或者是否因为该变量被更新而应该更新任何其他变量。
但是如果你将变量声明为private
并为public
和get
提供set
访问器的变量值,那么你可以最终控制这些变量的更新方式。
例如,您可能有两个彼此相关的变量。如果更新了一个变量,那么另一个变量也应该更新。也许你有两个变量,var1
和var2
(当然,它们都声明为private
,所以没有其他类可以直接访问它们)。也许var2
应该总是比var1
的值多5。因此,当更新var
1时,使用setter
(封装)可以强制执行此要求:
void setVar1(int val) {
var1 = val;
var2 = val + 5;
}
反之,设置field2
从field1
中减去5:
void setVar2(int val) {
var2 = val;
var1 = val - 5;
}
您还可以将这些变量的值约束为特定的值范围,例如从10到200(无论出于何种原因)。您可以检查传递给setter的值并抛出异常IllegalArgumentException
,并附带一条异常消息,说明违反了哪些规则:Value of var1 must be >= 5 <= 200
。
这只是一个简单的例子,说明为什么封装是好的,应该在编写Java代码(或任何OOP类型语言)时实践,以及为什么大多数IDE会为您自动生成这些setter和getter。
基本上,如果勾选该列,NetBeans会将声明变量的所有访问级别设置为私有。
阅读更多关于访问级别here的信息。