Java-如何使用从另一个类调用方法
对于一个类项目,我试图从另一个类访问一个方法,但我的代码给出了错误“非静态方法printarylist()无法从静态上下文引用”。我是java初学者,因此非常感谢您的帮助。 我把代码简化了一点 这是第一节课:Java-如何使用从另一个类调用方法,java,arrays,methods,Java,Arrays,Methods,对于一个类项目,我试图从另一个类访问一个方法,但我的代码给出了错误“非静态方法printarylist()无法从静态上下文引用”。我是java初学者,因此非常感谢您的帮助。 我把代码简化了一点 这是第一节课: public class classOne { private classTwo[] arrayList; public void printArray() { classTwo.printArrayList();
public class classOne
{
private classTwo[] arrayList;
public void printArray()
{
classTwo.printArrayList();
}
}
第二点:
public class classTwo
{
public void printArrayList()
{
System.out.println(arrayList);
}
}
cassTwo被定义为一个数组。您可以从Class2对象访问
printArrayList()
方法
您可以按以下方式更改代码:
public class classOne
{
private classTwo arrayList; //You have to initialize this object before you use
public void printArray()
{
arrayList.printArrayList();
}
}
在java中,非静态方法只能从包含类的实例调用或通过该实例调用。创建包含类的实例并通过该实例调用该方法。此外,还需要使数组可以从另一个类访问。为此,必须将其作为参数传递,或使另一个类嵌套或成为子类。无论哪种方式,您都必须构造数组,以便它打印除
null
以外的任何内容:
带参数:
public class classOne
{
private classTwo[] arrayList = {...}; //Make sure to construct it!
public void printArray()
{
//Create a new instance of classTwo
new classTwo().printArrayList(arrayList);
}
}
public class classTwo
{
public void printArrayList(classTwo[] arrayList) //Accept parameters
{
System.out.println(arrayList);
}
}
public class classOne
{
private classTwo[] arrayList = {...}; //Make sure to construct it!
public void printArray()
{
//Create a new instance of classTwo
new classTwo().printArrayList();
}
public class classTwo //Nested inside of classOne
{
public void printArrayList()
{
System.out.println(arrayList);
}
}
}
带嵌套:
public class classOne
{
private classTwo[] arrayList = {...}; //Make sure to construct it!
public void printArray()
{
//Create a new instance of classTwo
new classTwo().printArrayList(arrayList);
}
}
public class classTwo
{
public void printArrayList(classTwo[] arrayList) //Accept parameters
{
System.out.println(arrayList);
}
}
public class classOne
{
private classTwo[] arrayList = {...}; //Make sure to construct it!
public void printArray()
{
//Create a new instance of classTwo
new classTwo().printArrayList();
}
public class classTwo //Nested inside of classOne
{
public void printArrayList()
{
System.out.println(arrayList);
}
}
}
这就是如何访问非静态类的方法
classTwo list= new classTwo();
list.printarraylist();
基本上,“静态”是一个可以被不同类访问的类。。。将它放在public之后,以便在类之间传输
public class classOne
{
public static classTwo[] arrayList;
public static void printArray()
{
classTwo.printArrayList();
}
}
public class classTwo
{
public satic void printArrayList()
{
System.out.println(arrayList);
}
}
解决方案1:
public class classTwo
{
// add static
public static void printArrayList()
{
System.out.println(arrayList);
}
}
将非静态方法printarylist()转换为静态方法public static void printarylist()
解决方案2:
classTwo.printarylist()
TOnewclasstwo()代码>
无法从静态上下文(class2)引用非静态方法printarylist(),因此您可以在这一行中使用newclass2()
,class2.printarylist();printArrayList不是静态方法,因此无法从类2访问。您必须创建对象,然后访问该方法
public class classOne
{
private classTwo[] arrayList;
public void printArray()
{
classTwo obj2 = new classTwo();
obj2.printArrayList();
}
}
或者将printarylist()方法设为静态
public class classTwo
{
public static void printArrayList()
{
System.out.println(arrayList);
}
}
然后访问它作为
classTwo.printArrayList();
在第一个类中创建第二个类的对象
public class classOne
{
private classTwo[] arrayList;
public void printArray()
{
classTwo obj = new classTwo();
obj.printArrayList();
}
}
但是您的第一个类中仍然有一个私有数组,并且您正试图在第二个类中访问它,这是不允许的。此外,您不能将数组命名为“arraylist”,因为这是一个java关键字。试着在你的第一节课上做这个修正
static classTwo [] arr;
但正确的方法是将数组列表放在class2中并保持私有,然后创建一个构造函数来构造对象以保存该数组列表,然后通过方法访问它。。。如果您想了解更多信息,请告诉我。我看到一个问题的7个答案,只需调用另一个类的方法,让我也写下我的答案-
Method method = classTwo.getDeclaredMethod("printArrayList");
method.invoke(classTwo.newInstance());
将方法修饰符更改为static,并在父类名称的帮助下将该方法访问到另一个类
例如,classname.staticmethodname() 您在哪里调用该方法,因为错误似乎是使用类名访问该方法,通过对象或定义方法访问它仍然是错误的。它应该是arrayList.printarylist()
.Thanx@MikeAllen我错过了这个细节提示:Static并不意味着其他类可以访问。这意味着在任何情况下都可以随时访问对象/方法。静态修饰符在加载类时初始化其类/字段/对象/方法。您可能希望构造该类,以便不会获得nullpointer;)