有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

类如何创建适当的Java实例?

我已经创建了一个公共类helloworld,我正在尝试为Abc类创建一个对象。我已经使用“new”关键字为Abc类创建了一个实例。但我仍然得到一个错误“非静态变量不能从静态上下文引用”在第四行。 我该如何解决这个问题

public class helloworld {
    public static void main (String[] args)
    {
        Abc obj = new Abc();

    }
    class Abc
    {
        int i;

    }
}

共 (4) 个答案

  1. # 1 楼答案

    首先:听从乔恩的建议。也就是说,通过将内部类更改为静态类,可以快速解决这个特定问题:

    static class Abc {
        int i;
    }
    

    我知道这看起来有点奇怪,但如果不先创建外部类的实例,就不能引用常规的内部类。因为主方法是静态的,所以还没有HelloWorld的实例。这意味着它不能仅将常规(实例绑定)内部类引用到静态内部类

    可以说,更好的解决方案是在主方法中首先创建类的实例:

    // class names should be camel case with an upper case first letter
    public class HelloWorld { 
    
        public static void main (String[] args) {
            HelloWorld app = new HelloWorld();
            app.start();
        }
    
        // note that this is not a static method
        private void start() {
            Abc obj = new Abc();   
        }
    
        private class Abc {
            int i;    
        }
    
    }
    
  2. # 2 楼答案

    Abchelloworld的一个内部类。要实例化它,需要一个helloworld

    Abc abc = new helloworld().new Abc();
    

    或者使Abc成为一个静态的内部类

    static class Abc {}
    
  3. # 3 楼答案

    第一个是正确的,但不容易。对于类似的eclipse项目,这是一种简单的方法

    1. 创建ABC类:

      public class Abc
      {
        int i;
      
      }
      
    2. 在Hello world类中导入并声明静态:

      import Abc;
      public class HelloWorld{
       private static Abc abc=new Abc();
       public static void main(String[] args){
        //do something 
       }
      }
      

    所有你使用的IDE。帮助您导入类:)

  4. # 4 楼答案

    为了简单起见,将Abc类放在另一个文件中,并使其成为公共类

    地狱世界。java

    public class helloworld {
        public static void main (String[] args)
        {
            Abc obj = new Abc();
    
        }
    }
    

    Abc。java

    public class Abc
    {
        int i;
    
    }
    

    或者您可以将您的类Abc声明为static

    public class helloworld {
        public static void main (String[] args)
        {
            Abc obj = new Abc();
    
        }
        static class Abc
        {
            int i;
    
        }
    }
    

    创建内部类时,它遵循与类成员相同的规则:类的静态成员不能直接访问实例成员。因此,需要将Abc声明为静态类

    注:请使用习惯来命名你的课程。例:用HelloWorld代替helloworld


    希望这有帮助