Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-如何使用从另一个类调用方法_Java_Arrays_Methods - Fatal编程技术网

Java-如何使用从另一个类调用方法

Java-如何使用从另一个类调用方法,java,arrays,methods,Java,Arrays,Methods,对于一个类项目,我试图从另一个类访问一个方法,但我的代码给出了错误“非静态方法printarylist()无法从静态上下文引用”。我是java初学者,因此非常感谢您的帮助。 我把代码简化了一点 这是第一节课: public class classOne { private classTwo[] arrayList; public void printArray() { classTwo.printArrayList();

对于一个类项目,我试图从另一个类访问一个方法,但我的代码给出了错误“非静态方法printarylist()无法从静态上下文引用”。我是java初学者,因此非常感谢您的帮助。 我把代码简化了一点

这是第一节课:

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()
TO
newclasstwo()


无法从静态上下文(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;)