引用不同类中的类

时间:2012-10-17 16:27:06

标签: java class

在我的班级B中,我希望能够使用班级A中的方法。这就是我尝试过的。

  1. 导入的A类
  2. 初始化它 - classA a = new classA(null,null);
  3. 添加到我想要使用A类方法的方法

    public void getAMethod(){     a.getTestValue;  }

  4. 我的问题是:

    1. 这是正确的方法吗?
    2. 每次执行B类时,是否始终创建A类的新实例?
    3. 如果打开A类并运行B类,B类是否获得A类中变量的当前值,或者是否因为新的classA(null,null)而得到A类默认值?
    4. 我的问题是:

      1. 我为同一个变量获得了两个不同的值。
      2. 示例:A类 -

        initialize = boolean test = false
        

        当A类对话框打开时,设置test = true

        创建方法

        public boolean getTestValue() {
           return test;
        }
        

        当我运行getTestValue时,从A类中,它始终是真的 在调用getTestValue时从B类开始,它总是返回false(即使打开了A类对话框)

        似乎类b每次都在创建一个新的A类实例,所以它只能看到类A的默认值。当类B调用类A时,我需要得到类A的当前值,而不是默认值

        修改 的 我将A类中的方法更改为静态,并修复了我遇到的问题。这对我来说是一个很大的帮助 - 感谢大家的建议!

3 个答案:

答案 0 :(得分:2)

好的,还有相当多的理由可以覆盖,但我会尽量简短并依次回答每个问题。

<强> 1。这是正确的方法吗?

通常需要在小程序中导入类。如果ClassAClassB位于同一个中,或者它们都没有分配包但位于同一目录中,则无需导入。

至于在ClassA方法中包装ClassB方法,不,。您可以随时在ClassA内访问ClassB 静态方法;

ClassA.myMethodInClassA();

如果myMethodInClassA(); 是静态的,那么您需要在ClassA实例上调用它,所以,(仍然在ClassB中)你会做的;

ClassA myA = new ClassA();
myA.myMethodInClassA();

这将我带到static vs non static字段。如果您的字段initializetest被标记为static,例如;

public static boolean initialize = false;

然后,始终所有 ClassA实例中具有相同的值,并且可以随时随地访问;

if(ClassA.initialize) {
    //something
}

如果标记为静态,那么再次(非常类似于非静态方法)您需要ClassA实例来查询像<; p>这样的字段

ClassA myA = new ClassA();
if(myA.initialize) {
    //something
}

在这种情况下,ClassA的每个实例都有自己的initialize副本,因此initialize的值取决于您查询的实例

<强> 2。每次我执行B类时,是否总是创建一个新的A类实例?

如果你在ClassA的构造函数中调用ClassB的构造函数,那么答案是肯定的,换句话说,如果你这样做;

public ClassB() {
    //constructor for ClassB
    ClassA c = new ClassA();
}

然后是的,您将在每次时创建新的ClassA ,以创建新的ClassB

第3。如果打开了A类并运行了B类,那么B类是否获得了A类中变量的当前值,或者它是否因为新的classA(null,null)而得到A类默认值?

如果通过'open'表示你运行java ClassA然后在命令提示符下运行java ClassB,那么你拥有的是两个独立的程序,两个并行运行的JVM实例。这两个程序彼此无关,除非您专门实现某些内容,否则无法以任何方式相互通信。

如果通过'open'表示构造,例如new ClassA();,那么我们再次讨论类和实例成员。

我在问题1的回答中大肆宣传staticnon-static字段和方法,其中涵盖了这一理由。总的来说,我建议你阅读一些文档,例如:

http://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html

TLDR:请阅读此链接^^

答案 1 :(得分:1)

@Jkteater因为你不支持你的问题代码片段,但根据你的问题

Is this the correct way to do it ?

Ans:您可以通过两个方法在任何其他类中使用类A的方法,一个是我在类B中创建类A的对象(classA a = new classA(); A.getTestValue();),第二个是通过继承将A类扩展到B类(B类扩展A类)。

Is every time I execute class B, is it always creating a new instance of class A?

Ans:如果你不想创建一个新的A类实例,那么要么扩展B类中的A类,要么让你的方法在类A中保持静态。在静态情况下,你只能通过类名使用它(A.getTestValue( );)

If class A is opened and I run class B, does class B get the current
  values of variables in class A, or does it get the class A defaults
   because of new classA(null, null)

Ans:classA a = new classA(null,null);此类(null,null)是一个构造函数,用于初始化类A的非静态数据成员,不会产生任何差异,B类的当前值是什么,值u将通过此构造函数,这将初始化类A的非静态数据成员。

对于您的以下问题,请粘贴确切的代码,以便我能够给出确切的答案..

答案 2 :(得分:0)

将变量测试设为静态,因为您正在创建A的新实例,值不同

这是正确的方法吗?
那取决于详细的用例

每次执行B类时,是否总是创建A类的新实例? 是的,每次创建B的实例时,它都会创建一个新的实例 如果打开了A类并运行了B类,那么B类是否在A类中获取变量的当前值,或者由于新的classA(null,null)而得到A类的默认值? 由于您要创建新实例,因此您将获得默认值