java—启动对象非静态变量时,不能从静态上下文引用该变量

zbwhf8kr  于 2021-06-29  发布在  Java
关注(0)|答案(2)|浏览(303)

我是java新手,请帮助我为什么会出现这个错误。我已经搜索过了,但没有找到任何帮助。我会非常感激的!代码:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;

 public class Main{

     private class AdjMatrix{
        public AdjMatrix(){
        System.out.println("No parameters were given to class AdjMatrix");
        }
        void printAdjMatrix(int[][] arr){
        System.out.println("Elements are :");

        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[i].length; j++) {
                System.out.print("|" + arr[i][j] + "|" + "\t");
            }
            System.out.println("_______________");
        }
    }

}

   public static void main(String args[]) {
      Scanner sc = new Scanner(System.in);
      System.out.print("Enter the vertices of graphs: ");
      int ver = sc.nextInt();
      int [][] arr = new int[ver][ver];
      AdjMatrix objMatrix = new AdjMatrix();
      objMatrix.printAdjMatrix(arr);
    }   
}

I'm getting error on this line: AdjMatrix objMatrix = new AdjMatrix();
rqdpfwrv

rqdpfwrv1#

或许可以从内存管理的Angular 来考虑。非静态方法指的是对象的一个示例,即内存已被分配,并将在某个地方像堆栈一样进行管理。静态方法不绑定到任何特定的示例-它们的内存只分配一个位置,比如堆。

9gm1akwq

9gm1akwq2#

你可以移动班级 AdjMatrix 在外面 Main 班级。然后取下 private 关键字:

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("Enter the vertices of graphs: ");
        int ver = sc.nextInt();
        int [][] arr = new int[ver][ver];
        AdjMatrix objMatrix = new AdjMatrix();
        objMatrix.printAdjMatrix(arr);
    }
}

class AdjMatrix{

    public AdjMatrix() {
        System.out.println("No parameters were given to class AdjMatrix");
    }

    void printAdjMatrix(int[][] arr){
        System.out.println("Elements are :");

        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[i].length; j++) {
                System.out.print("|" + arr[i][j] + "|" + "\t");
            }
            System.out.println("_______________");
        }
    }
}

这是首选的方法。另一种避免错误的方法是将类添加到main方法中。这在技术上是正确的,但由于不能使用 AdjMatrix 在方法之外的任何地方初始化。

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("Enter the vertices of graphs: ");
        int ver = sc.nextInt();
        int [][] arr = new int[ver][ver];

        class AdjMatrix{

            public AdjMatrix() {
                System.out.println("No parameters were given to class AdjMatrix");
            }

            void printAdjMatrix(int[][] arr){
                System.out.println("Elements are :");

                for (int i = 0; i < arr.length; i++) {
                    for (int j = 0; j < arr[i].length; j++) {
                        System.out.print("|" + arr[i][j] + "|" + "\t");
                    }
                    System.out.println("_______________");
                }
            }
        }

        AdjMatrix objMatrix = new AdjMatrix();
        objMatrix.printAdjMatrix(arr);
    }
}

相关问题