java - 访问其他类中的对象

标签 java android class object constructor

我在一本java书中读到,为了访问一个类中的方法等,需要使用构造函数创建一个对象。下面是一个例子...

Class1
Class2 MyObject = new Class2();
MyObject.methodCall();

Class2
methodCall(){

}

现在我正在制作一个android应用程序,我使用了上面的方法,并且出现了错误,然后我读了一个blog这提供了一种从其他类访问方法等的替代方法。

Class1
Class2 myObject;
myObject.myMethod();

Class2
myMethod(){

}

如果没有上面的方法如何工作

new *InsertClassName*();

编辑

public class ButtonClickListener implements OnClickListener{
     VerificationMethods VM;
     VM.authenticateForFunctionsandNumbers();
}


public class VerificationMethods {
    ButtonClickListener BCL;
    public boolean authenticateForFunctionsandNumbers(){
         return trueOrFalse;
    }
}

日志猫:

05-25 17:19:02.195: E/AndroidRuntime(718): FATAL EXCEPTION: main
05-25 17:19:02.195: E/AndroidRuntime(718): java.lang.StackOverflowError
05-25 17:19:02.195: E/AndroidRuntime(718):  at com.example.myfirstcalculator.ButtonClickListener.<init>(ButtonClickListener.java:41)
05-25 17:19:02.195: E/AndroidRuntime(718):  at com.example.myfirstcalculator.VerificationMethods.<init>(VerificationMethods.java:5)
05-25 17:19:02.195: E/AndroidRuntime(718):  at com.example.myfirstcalculator.ButtonClickListener.<init>(ButtonClickListener.java:41)
05-25 17:19:02.195: E/AndroidRuntime(718):  at com.example.myfirstcalculator.VerificationMethods.<init>(VerificationMethods.java:5)
05-25 17:19:02.195: E/AndroidRuntime(718):  at com.example.myfirstcalculator.ButtonClickListener.<init>(ButtonClickListener.java:41)
05-25 17:19:02.195: E/AndroidRuntime(718):  at com.example.myfirstcalculator.VerificationMethods.<init>(VerificationMethods.java:5)
05-25 17:19:02.195: E/AndroidRuntime(718):  at com.example.myfirstcalculator.ButtonClickListener.<init>(ButtonClickListener.java:41)
05-25 17:19:02.195: E/AndroidRuntime(718):  at com.example.myfirstcalculator.VerificationMethods.<init>(VerificationMethods.java:5)
05-25 17:19:02.195: E/AndroidRuntime(718):  at com.example.myfirstcalculator.ButtonClickListener.<init>(ButtonClickListener.java:41)
05-25 17:19:02.195: E/AndroidRuntime(718):  at com.example.myfirstcalculator.VerificationMethods.<init>(VerificationMethods.java:5)
05-25 17:19:02.195: E/AndroidRuntime(718):  at com.example.myfirstcalculator.ButtonClickListener.<init>(ButtonClickListener.java:41)
05-25 17:19:02.195: E/AndroidRuntime(718):  at com.example.myfirstcalculator.VerificationMethods.<init>(VerificationMethods.java:5)
05-25 17:19:02.195: E/AndroidRuntime(718):  at com.example.myfirstcalculator.ButtonClickListener.<init>(ButtonClickListener.java:41)
05-25 17:19:02.195: E/AndroidRuntime(718):  at com.example.myfirstcalculator.VerificationMethods.<init>(VerificationMethods.java:5)
05-25 17:19:02.195: E/AndroidRuntime(718):  at com.example.myfirstcalculator.ButtonClickListener.<init>(ButtonClickListener.java:41)
05-25 17:19:02.195: E/AndroidRuntime(718):  at com.example.myfirstcalculator.VerificationMethods.<init>(VerificationMethods.java:5)
05-25 17:19:02.195: E/AndroidRuntime(718):  at com.example.myfirstcalculator.ButtonClickListener.<init>(ButtonClickListener.java:41)
05-25 17:19:02.195: E/AndroidRuntime(718):  at com.example.myfirstcalculator.VerificationMethods.<init>(VerificationMethods.java:5)
05-25 17:19:02.195: E/AndroidRuntime(718):  at com.example.myfirstcalculator.ButtonClickListener.<init>(ButtonClickListener.java:41)
05-25 17:19:02.195: E/AndroidRuntime(718):  at com.example.myfirstcalculator.VerificationMethods.<init>(VerificationMethods.java:5)
05-25 17:19:02.195: E/AndroidRuntime(718):  at com.example.myfirstcalculator.ButtonClickListener.<init>(ButtonClickListener.java:41)
05-25 17:19:02.195: E/AndroidRuntime(718):  at com.example.myfirstcalculator.VerificationMethods.<init>(VerificationMethods.java:5)
05-25 17:19:02.195: E/AndroidRuntime(718):  at com.example.myfirstcalculator.ButtonClickListener.<init>(ButtonClickListener.java:41)
05-25 17:19:02.195: E/AndroidRuntime(718):  at com.example.myfirstcalculator.VerificationMethods.<init>(VerificationMethods.java:5)
05-25 17:19:02.195: E/AndroidRuntime(718):  at com.example.myfirstcalculator.ButtonClickListener.<init>(ButtonClickListener.java:41)
05-25 17:19:02.195: E/AndroidRuntime(718):  at com.example.myfirstcalculator.VerificationMethods.<init>(VerificationMethods.java:5)
05-25 17:19:02.195: E/AndroidRuntime(718):  at com.example.myfirstcalculator.ButtonClickListener.<init>(ButtonClickListener.java:41)
05-25 17:19:02.195: E/AndroidRuntime(718):  at com.example.myfirstcalculator.VerificationMethods.<init>(VerificationMethods.java:5)
05-25 17:19:02.195: E/AndroidRuntime(718):  at com.example.myfirstcalculator.ButtonClickListener.<init>(ButtonClickListener.java:41)
05-25 17:19:02.195: E/AndroidRuntime(718):  at com.example.myfirstcalculator.VerificationMethods.<init>(VerificationMethods.java:5)
05-25 17:19:02.195: E/AndroidRuntime(718):  at com.example.myfirstcalculator.ButtonClickListener.<init>(ButtonClickListener.java:41)
05-25 17:19:02.195: E/AndroidRuntime(718):  at com.example.myfirstcalculator.VerificationMethods.<init>(VerificationMethods.java:5)
05-25 17:19:02.195: E/AndroidRuntime(718):  at com.example.myfirstcalculator.ButtonClickListener.<init>(ButtonClickListener.java:41)
05-25 17:19:02.195: E/AndroidRuntime(718):  at com.example.myfirstcalculator.VerificationMethods.<init>(VerificationMethods.java:5)
05-25 17:19:02.195: E/AndroidRuntime(718):  at com.example.myfirstcalculator.ButtonClickListener.<init>(ButtonClickListener.java:41)
05-25 17:19:02.195: E/AndroidRuntime(718):  at com.example.myfirstcalculator.VerificationMethods.<init>(VerificationMethods.java:5)
05-25 17:19:02.195: E/AndroidRuntime(718):  at com.example.myfirstcalculator.ButtonClickListener.<init>(ButtonClickListener.java:41)
05-25 17:19:02.195: E/AndroidRuntime(718):  at com.example.myfirstcalculator.VerificationMethods.<init>(VerificationMethods.java:5)
05-25 17:19:02.195: E/AndroidRuntime(718):  at com.example.myfirstcalculator.ButtonClickListener.<init>(ButtonClickListener.java:41)
05-25 17:19:02.195: E/AndroidRuntime(718):  at com.example.myfirstcalculator.VerificationMethods.<init>(VerificationMethods.java:5)
05-25 17:19:02.195: E/AndroidRuntime(718):  at com.example.myfirstcalculator.ButtonClickListener.<init>(ButtonClickListener.java:41)
05-25 17:19:02.195: E/AndroidRuntime(718):  at com.example.myfirstcalculator.VerificationMethods.<init>(VerificationMethods.java:5)
05-25 17:19:02.195: E/AndroidRuntime(718):  at com.example.myfirstcalculator.ButtonClickListener.<init>(ButtonClickListener.java:41)
05-25 17:19:02.195: E/AndroidRuntime(718):  at com.example.myfirstcalculator.VerificationMethods.<init>(VerificationMethods.java:5)
05-25 17:19:02.195: E/AndroidRuntime(718):  at com.example.myfirstcalculator.ButtonClickListener.<init>(ButtonCli
05-25 17:19:02.265: W/ActivityManager(61):   Force finishing activity com.example.myfirstcalculator/.MainActivity

代码:

ButtonClickListener.java

public class ButtonClickListener implements OnClickListener{
    EditText outputBoxID;
    String buttonID;
    Context context;
    static String valueofOutput;
    static double NumBeforeFunct;
    static double NumAfterFunct;
    static String rtAnswer;
    static char[] realTimeStringArray;
    static char[] valueofOutputArray;
    static StringBuilder valueofOutputBuild = new StringBuilder();
    static String NBFAS;
    static String NAFAS;
    static StringBuilder realTimeStringBuild = new StringBuilder();

    static String realTimeString;
    VerificationMethods VM = new VerificationMethods();
    //error occuring between here

    public ButtonClickListener(EditText outputBoxID, String buttonID, Context context){

        this.outputBoxID = outputBoxID;
        this.buttonID = buttonID;
        this.context = context; 

    }

    @Override
    public void onClick(View v) {

        valueofOutput = outputBoxID.getText().toString();

    ...

验证方法.java

public class VerificationMethods {
    ButtonClickListener BCL = new ButtonClickListener(null, null, null);
    //error - ...and here

    public boolean authenticateForFunctionsandNumbers(){
        if(ButtonClickListener.valueofOutput.isEmpty()){
            return true;
        }else{
            return false;
        }

    ...

最佳答案

首先,简要解释一下 new 关键字。

类就像创建对象的蓝图。所以在这段代码中:

public class Cat {

    // This is a constructor
    public Cat() {

    }

    public void purr() {
        System.out.println("prrrrrrrr");
    }

}

该类称为 Cat。每次我们编写 new Cat() 时,我们都会创建 Cat 类的一个新对象(实例)。每次我们创建一个新的猫对象时都会调用构造函数。

假设我们希望猫发出咕噜声。为此,我们首先需要创建一个猫对象(否则,什么是咕噜声?),因此我们可以编写 new Cat().purr();

这将为我们创建一只新猫,然后告诉那只猫发出咕噜声。

假设有一种方法实际上不需要猫来工作,例如:

public static void buyCatCollar() {

}

我们可以在没有猫的情况下购买猫项圈。我们不需要一只真正的猫来做到这一点。

我们在这里添加static关键字,这意味着该方法属于,而不是对象。这意味着我们可以编写 Cat.buyCatCollar(),而无需使用 cat 对象。这意味着我们不需要编写 new Cat(),因为我们实际上并不需要一只猫来购买项圈。

现在继续您的示例。

当你写下:

public class ButtonClickListener implements OnClickListener{
    VerificationMethods VM;
    VM.authenticateForFunctionsandNumbers();
}

这意味着VM是VerifcationMethods类的实例。当您编写 VM.authenticateForFunctionsandNumbers(); 时,您将得到一个空指针异常,因为您从未真正将 VM 设置为新实例。您需要将其更改为:

public class ButtonClickListener implements OnClickListener{
    VerificationMethods VM = new VerificationMethods();
    VM.authenticateForFunctionsandNumbers();
}

或者,假设您不需要新实例,您可以将 authenticateForFunctionsandNumbers() 方法设置为静态,然后编写:

public class ButtonClickListener implements OnClickListener{
    VerificationMethods.authenticateForFunctionsandNumbers();
}

但是除非您将 static 关键字添加到您的方法中,否则这将不起作用。

关于java - 访问其他类中的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23857686/

相关文章:

JavaScript 定时器类 : method coming as undefined in browser web consoles

java - 在 Maven 测试中获取 org/testng/TestNG : Unsupported major. 次要版本 52.0

javamail 无法读取多部分/混合邮件

android - iOS 中的 R.array.string 等价物

android - 将 Bundle 保存到 SharedPreferences

c++ - 类函数找不到类定义的变量

java - 如何使用 FHIR PATH 获取患者的免疫列表?

java - 从 ArrayList 中删除给定长度的字符串?

android - 在 Android 上保存自定义 View 的屏幕截图

swift - Playground 上或程序文件中的类