我在一本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/