我创建了一个公共类helloworld,我正在尝试为类Abc创建一个对象。我使用“new”关键字为Abc类创建一个实例。但是我仍然收到一个错误“非静态变量,这不能从静态上下文中引用”。在第4行。 我该如何解决这个问题?
public class helloworld {
public static void main (String[] args)
{
Abc obj = new Abc();
}
class Abc
{
int i;
}
}
答案 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)
Abc
是helloworld
的内部类。要实例化它,您需要一个helloworld
Abc abc = new helloworld().new Abc();
或使Abc
成为静态内部类。
static class Abc {}
答案 3 :(得分:0)
第一个芒果是正确的,但并不容易。这是类似日食项目的简单方法。
创建一个ABC类:
public class Abc
{
int i;
}
在Hello world类中导入并声明static:
import Abc;
public class HelloWorld{
private static Abc abc=new Abc();
public static void main(String[] args){
//do something
}
}
您使用的所有IDE。帮助您导入类:)