如何创建适当的Java实例?

时间:2017-05-22 08:39:18

标签: java class instantiation

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

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

    }
    class Abc
    {
        int i;

    }
}

4 个答案:

答案 0 :(得分:2)

为简单起见,将类Abc放在不同的文件中并使其成为公共类。

<强> helloworld.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声明为静态类。

PS:请使用CamelCasing约定命名您的类。例如:使用HelloWorld代替helloworld

希望这有帮助!

答案 1 :(得分:1)

首先:Heed Jon的建议。也就是说,您可以通过将内部类更改为静态类来快速解决此特定问题:

static class Abc {
    int i;
}

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

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

// 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 :(得分:0)

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

的实例
Abc abc = new helloworld().new Abc();

或使Abc成为静态内部类。

static class Abc {}

答案 3 :(得分:0)

第一个芒果是正确的,但并不容易。这是类似日食项目的简单方法。

  1. 创建一个ABC类:

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

    import Abc;
    public class HelloWorld{
     private static Abc abc=new Abc();
     public static void main(String[] args){
      //do something 
     }
    }
    
  3. 您使用的所有IDE。帮助您导入类:)