在课堂上,我们通常会声明全局变量和局部变量。我大部分时间都看到声明全局变量,setter,getter。这些都是必不可少的吗?如果我可以在不使用这些东西的情况下实施它,这样可以吗?
答案 0 :(得分:3)
通常,您应该总是尝试减少变量,方法,类等的可见性范围。
因此,如果需要在一个调用序列中使用的某个变量,请使用局部变量和方法参数将其值从方法传递给方法。
例如,我有两种方法foo()
和bar()
,而foo
则调用bar
:
public void foo() {
bar();
}
private void bar() {
}
假设两个工作在相同的字符串上,附加一些后缀。您可以使用局部变量,如以下示例所示:
public String foo(String s) {
s += "foo1"
bar(s);
s += "foo2"
return s;
}
private String bar(String s) {
s += "bar1"
return s;
}
或班级变量:
private String s;
public String foo() {
s += "foo1"
bar();
s += "foo2"
return s;
}
private String bar() {
s += "bar1"
return s;
}
第一种方式更好,因为:
第二个实现没有封装:可以添加更改对象状态的代码,并影响下一次调用foo()
。您必须在课程中前进和后退才能理解算法以及哪些变量受算法影响。它不是线程安全的。运行相同代码的两个并发线程可能会在更改同一变量时竞争。
答案 1 :(得分:1)
全局变量是指类成员字段?如果变量仅在方法范围内使用,则它应该是本地的。如果变量实际上是为整个类实例传递任何状态信息 - 它应该被声明为类成员字段(使用setter和getters - 如果需要将这些字段的访问权限提供给其他类)。
关于Java类的总结如下:http://docs.oracle.com/javase/tutorial/java/javaOO/summaryclasses.html
答案 2 :(得分:1)
我猜你正在将“全局变量”定义为成员字段变量(在方法的上下文之外定义)。在使用成员字段时,最好使用mutators(setter)和accessors(getters),以便更轻松地更改实现。一个很好的例子是,如果在获取或设置变量状态时检查字段周围的条件,则可以将更改封装在一个位置,而不是在每次使用时分散。
答案 3 :(得分:0)
Java中没有全局变量。
只有当字段是对象的属性时,才应存在该字段。例如,它不应该用于在对象的两个方法调用之间存储中间结果。
只有在外界需要访问信息时才应定义吸气剂。如果不需要,请不要定义getter。私有状态越多,它就越好,因为它允许类在不影响其他类的情况下进行集合。
只有在需要修改字段时才应修改setter,并且如果将该字段与其他字段分开修改是有意义的。
好的规则: