如何创建适当的Java实例?

如何创建适当的Java实例?,java,class,instantiation,Java,Class,Instantiation,我已经创建了一个公共类helloworld,我正在尝试为类Abc创建一个对象。我已经使用“new”关键字为Abc类创建了一个实例。但我仍然在第4行中遇到了一个错误“非静态变量这不能从静态上下文引用”。 我如何解决这个问题 public class helloworld { public static void main (String[] args) { Abc obj = new Abc(); } class Abc {

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

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

    }
    class Abc
    {
        int i;

    }
}

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

helloworld.java

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

    }
}
public class Abc
{
    int i;

}
Abc.java

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

    }
}
public class Abc
{
    int i;

}
或者您可以将您的类Abc声明为
静态

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

    }
    static class Abc
    {
        int i;

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

PS:请使用camelcasting约定来命名您的类。例如:使用
HelloWorld
而不是
HelloWorld



希望这有帮助

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

helloworld.java

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

    }
}
public class Abc
{
    int i;

}
Abc.java

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

    }
}
public class Abc
{
    int i;

}
或者您可以将您的类Abc声明为
静态

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

    }
    static class Abc
    {
        int i;

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

PS:请使用camelcasting约定来命名您的类。例如:使用
HelloWorld
而不是
HelloWorld



希望这有帮助

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

Abc abc = new helloworld().new Abc();
或者使
Abc
成为一个静态的内部类

static class Abc {}

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

Abc abc = new helloworld().new Abc();
或者使
Abc
成为一个静态的内部类

static class Abc {}

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

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

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

// 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;    
    }

}

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

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

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

// 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;    
    }

}

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

  • 创建ABC类:

    public class Abc
    {
      int i;
    
    }
    
  • 在Hello世界类中导入并声明静态:

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

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

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

  • 创建ABC类:

    public class Abc
    {
      int i;
    
    }
    
  • 在Hello世界类中导入并声明静态:

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

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

    问题在于
    Abc
    是一个内部类。如果您是Java新手,我强烈建议您暂时避免使用内部/嵌套类。它们可能非常混乱。您也可以将类Abc声明为静态的。如果你想克服这个错误。你有没有在变量i中添加关键字“public”?问题是
    Abc
    是一个内部类。如果您是Java新手,我强烈建议您暂时避免使用内部/嵌套类。它们可能非常混乱。您也可以将类Abc声明为静态的。如果你想克服这个错误。你有没有在变量i中添加关键字“public”?出于对标准的热爱,请将它命名为
    Helloworld
    ,因为
    Classnames
    are
    CamelCase
    。我理解,但我不想偏离已经有的OP。这将是一个不同的时间和不同的问题。无论如何,我在结尾加了一条注释。:)我知道:),但在我眼里,这是一件应该从开始的事情。你已经习惯了你写东西的方式,如果通用命名标准不同,那么从源代码中读取不同的代码就比较困难,或者当有人查看你自己的代码时,就很难获得帮助。这对我来说只是一个注释,阅读代码并获得自己代码的帮助在遵循它时会更容易:)你可能应该对OP的问题发表你的评论:)出于对标准的热爱,请将其命名为
    Helloworld
    作为
    类名
    CamelCase
    。我理解,但我不想偏离已经有的计划。这将是一个不同的时间和不同的问题。无论如何,我在结尾加了一条注释。:)我知道:),但在我眼里,这是一件应该从开始的事情。你已经习惯了你写东西的方式,如果通用命名标准不同,那么从源代码中读取不同的代码就比较困难,或者当有人查看你自己的代码时,就很难获得帮助。这对我来说只是一个注释,阅读代码并获得自己代码的帮助在遵循它时会更容易:)你可能应该对OP的问题发表评论:)