我看到了很多像private final int variable;
这样的变量声明
我想知道我们是否可以安全地将private
更改为public
?
我认为我们使用private
的主要原因是防止变量被其他类修改,但这里的final
关键字已经阻止了任何类型的修改。
所以我想答案是肯定的?
Private不仅仅是不能更改值,它甚至不能从外部看到它。它是其他类不应该依赖的值,要么是因为它是一个实现细节,要么是由于它不是类公开它的接口的永久部分。通过将其设为私有,其他类将无法引用它,并且在值更改或完全消失时也不会断开。
封装。
通过用private
定义修饰符,可以防止类外的代码访问数据。
如果希望访问类之外的数据,则必须定义一个关于如何访问数据的公共方法。
编辑:我想你想知道我们为什么要使用private
修饰符。
这是有意见的,但这就是为什么在大多数情况下我们想要实现Encapsulation
。想象一下,你在一个类中写了一组逻辑。
public class MyClass {
private final String MyAttribute;
public MyClass() {
// logic. / initialize the MyAttribute
}
public String getMyAttribute() {
return this.MyAttribute;
}
public void setMyAttribute() {
// logic.
}
}
显然,您不希望其他代码扰乱您的逻辑。否则,可能导致:1。安全漏洞,2。Bugs。这就是使用private
修饰符的原因。为了实现encapsulation
/您定义了其他代码如何与您的类交互(如何获取数据,如何修改数据(。
我想从前面的答案中添加更多细节。
private
是可访问性。类外不能"参见";final
是一个固定值的声明。没有什么能改变它,无论是在课堂内外。
所以private final
是:
- 确保变量被隐藏在外部
- 变量具有固定值
简而言之,答案是否。private
关键字是访问修饰符的一个示例,它控制该变量是否对其他类可见。我们制作了一个变量private
,使该变量对其他类隐藏,并且不能在其定义的类之外读取或修改。
考虑以下示例:
/* Person.java */
public class Person {
private int bankBalance = 1000; // Private member
}
/* Hacker.java */
public class Hacker {
public static void main(String[] args) {
Person Tom = new Person();
int tomMoney = Tom.bankBalance; // ERROR!
}
}
在Person
类中,我们将成员变量bankBalance
设置为private
。这意味着bankBalance
只能在Person
类中访问(即可读和可修改(。因此,如果我们尝试在Hacker
类中执行int tomMoney = Tom.bankBalance;
,则会出现一个错误,称为The field Person.bankBalance is not visible
。由于bankBalance
对Hacker
类已经不可见,这意味着其他类不能修改此变量。
如果我们以不同的方式定义bankBalance
变量,则会出现以下行为:
+-------------------------------+-----------------------+-----------------------+
| | Within "Person" | Outside "Person" |
| +----------+------------+----------+------------+
| | Readable | Modifiable | Readable | Modifiable |
+-------------------------------+----------+------------+----------+------------+
| private int bankBalance | Yes | Yes | No | No |
+-------------------------------+----------+------------+----------+------------+
| private final int bankBalance | Yes | No | No | No |
+-------------------------------+----------+------------+----------+------------+
| public int bankBalance | Yes | Yes | Yes | Yes |
+-------------------------------+----------+------------+----------+------------+
| public final int bankBalance | Yes | No | Yes | No |
+-------------------------------+----------+------------+----------+------------+
- 如果
bankBalance
是私有的,那么它在Person
类之外是不可见的。因此,它不能在Person
之外可读和可修改 - 如果
bankBalance
是最终变量,则无论该变量是在Person
内部还是外部访问,都不能修改