public class HelloWorld {
String name = "asad";
public static void main(String []args){
System.out.println("hello world" + name);//Display the string
}
}
错误:无法对非静态字段名称进行静态引用 。 这是我试过的代码,复制粘贴但它还没有工作
答案 0 :(得分:3)
您有2个选项。
HelloWorld().name
name
静态并使用HelloWorld.name
答案 1 :(得分:1)
制作您引用static
的字符串:
public class HelloWorld {
static String name = "asad";
public static void main(String []args){
System.out.println("hello world" + name);//Display the string
}
}
More on the difference between static and non-static fields/methods...
答案 2 :(得分:1)
你可以将名称设为静态,或将其放在main方法中:
public class HelloWorld {
public static void main(String []args){
String name = "asad";
System.out.println("hello world" + name);//Display the string
}
}
答案 3 :(得分:1)
public class HelloWorld {
static String name = "asad";
public static void main(String []args){
System.out.println("hello world" + name);//Display the string
}
}
您只能在静态方法中调用静态属性。
答案 4 :(得分:0)
HelloWorld
是一个班级。您可以创建此类的多个实例。
这是一个制作该类
的2个实例的示例HelloWorld helloWorld1 = new HelloWorld();
HelloWorld helloWorld2 = new HelloWorld();
现在,name
被声明为实例字段。这意味着HelloWorld
的每个实例都有1个。
现在,main
方法是一种静态方法。这意味着只有一个主要的方法期。你没有为HelloWorld
的每个实例获得不同的主方法。 (main也恰好是一个特殊的静态方法,作为程序的入口点)
当您尝试从name
致电main
时,您的程序没有任何name
个实例可供参考。如果您声明了多个HelloWorld
个对象,则无法知道要使用哪个name
。
如果您只想从name
拨打main
,可以将name
设为静态字段。请注意,static
表示每个程序只有1 name
。
static String name = "asad";
答案 5 :(得分:0)
您有三种选择:
new HelloWorld().name
name
更改为static
或类字段name
的声明移至main()
所以,
String name = "asad";
public static void main(String []args){
System.out.println("hello world" + new HelloWorld().name);
}
或者,
static String name = "asad";
public static void main(String []args){
System.out.println("hello world" + name);
}
或者,
public static void main(String []args){
String name = "asad";
System.out.println("hello world" + name);
}
答案 6 :(得分:0)
简短回答:让name
静止;即:
static String name = "asad";
答案很长:你需要了解静态和非静态之间的区别。 static
属性和方法附加到类。这意味着它们可以没有类的实例,更重要的是,在所有实例之间共享(因为它们属于类本身)。
另一方面,非静态属性和方法仅属于该类的实例。这些是属于该类的特定实例的东西。
您遇到的问题是main
是static
。由于在类本身上调用main
,因此不知道name
是什么,因为name
附加到实例。因此,name
在静态上下文中是未定义的。
除了使name
静态之外,另一种方法是强制创建类的实例,然后以这种方式引用name
:
new HelloWorld().name;
但这并不是一种非常好的风格。你需要长时间地思考哪些属性/方法需要是静态的,哪些不是。静态属性引入了另一种皱纹,即你现在拥有共享状态,如果你不小心,可能会导致有趣或不良行为。
答案 7 :(得分:0)
你的问题是main是静态的,这意味着它存在而你不必初始化它所在的类。但是,你试图打印的字符串不是静态的,这意味着它只在初始化类时才存在。编译器发现在没有创建对象的情况下调用main是可能的(因为它是静态的),这意味着它将无法访问要打印的字符串,因为它不存在,所以它会抱怨。您还需要将要尝试打印的字符串设置为静态。
static String name = "asad";