从类错误Java创建新对象

从类错误Java创建新对象,java,class,object,command-line,tostring,Java,Class,Object,Command Line,Tostring,我正在尝试使用JOptionPane显示我的person对象名称、年龄。Name和age是命令行参数中的字符串和整数。但是,我得到了以下错误: BasicClass.java:9: error: non-static variable this cannot be referenced from a static context Person person1 = new Person(args[0], age1); ^ BasicCla

我正在尝试使用JOptionPane显示我的person对象名称、年龄。Name和age是命令行参数中的字符串和整数。但是,我得到了以下错误:

BasicClass.java:9: error: non-static variable this cannot be referenced from a static context
      Person person1 = new Person(args[0], age1);
                       ^

BasicClass.java:10: error: non-static variable this cannot be referenced from a static context
      Person person2 = new Person(args[2], age2);
                       ^
在将第一人称对象初始化为命令行输入时,我是否处于正确的轨道上

编辑 抱歉,我忘记了我的代码示例:

import javax.swing.JOptionPane;

public class BasicClass{
   public static void main(String[] args){
      Integer age1 = Integer.parseInt(args[1]);
      Integer age2 = Integer.parseInt(args[3]);

   // Create two Person Objects
      Person person1 = new Person(args[0], age1);
      Person person2 = new Person(args[2], age2);

   // toString() method to display first & second Person Object
      String firstOutput = person1.toString();
      String secondOutput = person2.toString();
      JOptionPane.showMessageDialog(null, firstOutput);
      JOptionPane.showMessageDialog(null, secondOutput);
   }

   // Object
   class Person{
   // Data fields that will store each of the objects data
      private String name;
      private Integer age;

   // Constructor
      public Person(String n1, int a1){
         name = n1;
         age = a1;
      }

      public String toString(){
         String output = name + " is" + age + " years old.";
         return output;
      }
   }
}
Person是非静态的内部类,这意味着它是外部类BasicClass实例的成员,没有这个实例,您不能像使用方法或字段一样使用它

由于您在静态方法和静态方法中使用该类,所以此引用不考虑默认值

使Person类保持静态 或者创建外部类的实例,通过该实例可以创建Person类的实例,如

BasicClass basic = new BasicClass();
Person p = basic.new Person();
或者将Person类的代码放在BasicClass类之外


这是因为您正在静态上下文中调用非静态类。一种方法是在主类中创建Person对象,然后创建主类对象。否则,您应该将Person类声明为静态类,例如

import javax.swing.JOptionPane;

public class Main{
   public static void main(String[] args){
      Integer age1 = Integer.parseInt(args[1]);
      Integer age2 = Integer.parseInt(args[3]);

   // Create two Person Objects
      Person person1 = new Person(args[0], age1);
      Person person2 = new Person(args[2], age2);

   // toString() method to display first & second Person Object
      String firstOutput = person1.toString();
      String secondOutput = person2.toString();
      JOptionPane.showMessageDialog(null, firstOutput);
      JOptionPane.showMessageDialog(null, secondOutput);
   }

   // Object
   static class Person{
   // Data fields that will store each of the objects data
      private String name;
      private Integer age;

   // Constructor
      public Person(String n1, int a1){
         name = n1;
         age = a1;
      }

      public String toString(){
         String output = name + " is" + age + " years old.";
         return output;
      }
   }
}

请参阅。

如果不查看代码,则无法进行注释。发布Person类和发生此错误的类。创建Person类static@KugathasanAbimaran谢谢你,完全忘记了!感谢您对Pshemo的详细解释!我实际上打算关闭我的基本类…但是我没有我的结束括号。真遗憾,因为一个简单的错误,我遇到了这么多麻烦:尽管如此,我还是很感激你的解释,因为它让我更加理解你classes@Asiax3不客气: