在两个不同的java类中使用变量

时间:2013-02-07 06:43:27

标签: java java-ee

我想知道是否可以在另一个java类中使用java类的变量。假定变量Time在A类中定义和计算,我如何在B类中使用它?

5 个答案:

答案 0 :(得分:7)

其他答案建议增加变量的可见性。 不要这样做。它破坏了封装:你的类使用字段来存储特定信息的事实是一个实现细节;您应该通过类的API(其方法)公开相关信息。您应该在所有案例中将字段设为私有。

同样,其他一些答案也建议将变量设为静态。 不要任意执行此操作。您需要了解静态的真正含义:它表示这条信息与类型相关,而不是与该类型的任何特定实例相关。偶尔这是合适的,但它通常是一条通向不太可测试的代码的道路 - 在许多情况下它显然是错误的。例如,Person类可能有一个name变量,但这当然不应该是静态的 - 它显然是关于单个人的一条信息。

在暴露信息之前,你应该仔细考虑 - 考虑是否有更广泛的操作,有关的类可以揭示,而不是仅仅是零散地提供其数据 - 但是当你想暴露一个字段的值,使用属性。例如:

public class Person {
    private final String name;

    public Person(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
}

通过方法公开它,您可以稍后更改实施细节,而不会破坏现有客户端。

然后从另一个班级,你只需要调用getName()方法:

// However you end up getting a reference to an instance of Person
Person person = ...;
String name = person.getName();

如果你有一个静态字段,你可以用相同的方式公开这个值,但是使用静态方法,你可以使用类名调用它。

小心返回可变的值,例如: java.util.Date。这是使用getter方法而不是允许直接访问该字段的另一个原因 - 您可以使该方法返回您需要的防御副本。

答案 1 :(得分:1)

如果声明为公开,则可以使用ClassA.yourVariable。另一方面,对于私人访问修饰符,请将getter包含到ClassA。在ClassB上,拨打ClassA.getYourVariable()

答案 2 :(得分:1)

enter image description here

另请阅读access specifiers in Java它可能会有所帮助。

答案 3 :(得分:0)

如果您将变量声明为public或static,则可以从另一个类中访问它。

这是一个非常糟糕的想法:)

答案 4 :(得分:0)

如果变量为static,您可以从任何有权访问该变量的代码中将其称为A.Time。对于所有类A,只有一个Time值。如果它是一个实例变量,并且您有类a的实例A,则可以将该变量称为{{1 }}。类a.Time的每个实例都有一个单独的值。

这取决于Java的访问规则:

  • 如果字段为A,则任何代码都可以访问它(这会使public个变量变得危险,除非它们也被声明为public
  • 如果字段为final,则只有同一个包中或protected的子类中的代码才能访问该字段
  • 如果字段具有默认访问权限,则只有与A类相同的包中的代码才能访问它
  • 如果字段为A,则只有类private中的代码(包括A的内部类)才能访问该字段。

或者,您可以在A类中提供访问者方法

A
相关问题