Java 访问其他类中的对象

Java 访问其他类中的对象,java,android,class,object,constructor,Java,Android,Class,Object,Constructor,我在一本java书中读到,为了访问一个类中的方法ect,需要使用构造函数创建一个对象。下面是一个例子 Class1 Class2 MyObject = new Class2(); MyObject.methodCall(); Class2 methodCall(){ } 现在,我正在制作一个android应用程序,我使用了上面的方法,我遇到了错误,然后我阅读了一篇文章,其中提供了一种从其他类访问方法ect的替代方法 Class1 Class2 myObject; myObject.myMe

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

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

Class2
methodCall(){

}
现在,我正在制作一个android应用程序,我使用了上面的方法,我遇到了错误,然后我阅读了一篇文章,其中提供了一种从其他类访问方法ect的替代方法

Class1
Class2 myObject;
myObject.myMethod();

Class2
myMethod(){

}
如果不使用

new *InsertClassName*();
编辑

日志:

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
VerificationMethods.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 MyClass1 {
    public static void myMethod1(){
        //something something
    }
}
这需要创建新对象:

public class MyClass2 {
    public void myMethod2(){
         //something something again
    }
}
现在您可以使用:

MyClass1 myObject1;
myObject1.myMethod1();
但是:


我猜在第二个示例中,您使用的是静态方法,它不需要使用new操作符创建新的对象实例

这将在任何地方可用,在这里您不使用新的创建对象:

public class MyClass1 {
    public static void myMethod1(){
        //something something
    }
}
这需要创建新对象:

public class MyClass2 {
    public void myMethod2(){
         //something something again
    }
}
现在您可以使用:

MyClass1 myObject1;
myObject1.myMethod1();
但是:


我猜在第二个示例中,您使用的是静态方法,它不需要使用new操作符创建新的对象实例

这将在任何地方可用,在这里您不使用新的创建对象:

public class MyClass1 {
    public static void myMethod1(){
        //something something
    }
}
这需要创建新对象:

public class MyClass2 {
    public void myMethod2(){
         //something something again
    }
}
现在您可以使用:

MyClass1 myObject1;
myObject1.myMethod1();
但是:


我猜在第二个示例中,您使用的是静态方法,它不需要使用new操作符创建新的对象实例

这将在任何地方可用,在这里您不使用新的创建对象:

public class MyClass1 {
    public static void myMethod1(){
        //something something
    }
}
这需要创建新对象:

public class MyClass2 {
    public void myMethod2(){
         //something something again
    }
}
现在您可以使用:

MyClass1 myObject1;
myObject1.myMethod1();
但是:


您必须创建一个类(类型),它是该类型的稍后实例化对象的定义

e、 g

稍后,在代码的其他地方,您可以通过调用该类型的构造函数获得该类型的实例。e、 g

MyClass instance = new MyClass();
如果向指定类添加更多方法,则可以对实例化对象调用这些方法:

instance.someMethod();

您必须创建一个类(类型),它是该类型的稍后实例化对象的定义

e、 g

稍后,在代码的其他地方,您可以通过调用该类型的构造函数获得该类型的实例。e、 g

MyClass instance = new MyClass();
如果向指定类添加更多方法,则可以对实例化对象调用这些方法:

instance.someMethod();

您必须创建一个类(类型),它是该类型的稍后实例化对象的定义

e、 g

稍后,在代码的其他地方,您可以通过调用该类型的构造函数获得该类型的实例。e、 g

MyClass instance = new MyClass();
如果向指定类添加更多方法,则可以对实例化对象调用这些方法:

instance.someMethod();

您必须创建一个类(类型),它是该类型的稍后实例化对象的定义

e、 g

稍后,在代码的其他地方,您可以通过调用该类型的构造函数获得该类型的实例。e、 g

MyClass instance = new MyClass();
如果向指定类添加更多方法,则可以对实例化对象调用这些方法:

instance.someMethod();
首先,快速解释一下
new
关键字。 类就像创建对象的蓝图。所以在这段代码中:

public class Cat {

    // This is a constructor
    public Cat() {

    }

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

}
这个班叫猫。每次编写
new Cat()
,我们都在创建Cat类的一个新对象(实例)。每次创建新的cat对象时,都会调用构造函数

假设我们想让猫咕噜叫。为此,我们首先需要创建一个cat对象(否则,什么是purring?),这样我们就可以编写
newcat().purr()

这会给我们创造一只新的猫,然后告诉那只猫咕噜叫

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

public static void buyCatCollar() {

}
我们可以买一个猫项圈而不用养猫。我们不需要一只真正的猫来这么做

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

现在继续讲你的例子。 当你写作时:

public class ButtonClickListener implements OnClickListener{
    VerificationMethods VM;
    VM.authenticateForFunctionsandNumbers();
}
这意味着VM是VerifcationMethods类的一个实例。当您编写
VM.authenticateforfunctions和numbers()时您将得到一个空指针异常,因为您从未实际将VM设置为新实例。您需要将其更改为:

public class ButtonClickListener implements OnClickListener{
    VerificationMethods VM = new VerificationMethods();
    VM.authenticateForFunctionsandNumbers();
}
或者,假设不需要新实例,可以将
authenticateForFunctionsandNumbers()方法设置为静态,然后编写:

public class ButtonClickListener implements OnClickListener{
    VerificationMethods.authenticateForFunctionsandNumbers();
}
但除非将
静态
关键字添加到方法中,否则这将不起作用。

首先,快速解释一下
新的
关键字。 类就像创建对象的蓝图。所以在这段代码中:

public class Cat {

    // This is a constructor
    public Cat() {

    }

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

}
这个班叫猫。每次编写
new Cat()
,我们都在创建Cat类的一个新对象(实例)。每次创建新的cat对象时,都会调用构造函数

假设我们想让猫咕噜叫。为此,我们首先需要创建一个cat对象(否则,什么是purring?),这样我们就可以编写
newcat().purr()

这会给我们创造一只新的猫,然后告诉那只猫咕噜叫

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

public static void buyCatCollar() {

}
我们可以买一个猫项圈而不用养猫。我们不需要一只真正的猫来这么做

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

现在继续讲你的例子。 当你写作时:

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