初学者Java打印一个字符串

时间:2014-10-09 17:37:49

标签: java

public class HelloWorld {
    String name = "asad";

    public static void main(String []args){
        System.out.println("hello world" + name);//Display the string

        }
}

错误:无法对非静态字段名称进行静态引用 。 这是我试过的代码,复制粘贴但它还没有工作

8 个答案:

答案 0 :(得分:3)

您有2个选项。

  1. 创建HelloWorld实例并使用新的HelloWorld().name
  2. 使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)

您有三种选择:

  1. 创建HelloWorld实例并从实例new HelloWorld().name
  2. 获取字段
  3. name更改为static或类字段
  4. name的声明移至main()
  5. 所以,

    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属性和方法附加到。这意味着它们可以没有类的实例,更重要的是,在所有实例之间共享(因为它们属于类本身)。

另一方面,非静态属性和方法仅属于该类的实例。这些是属于该类的特定实例的东西。

您遇到的问题是mainstatic。由于在类本身上调用main,因此不知道name是什么,因为name附加到实例。因此,name在静态上下文中是未定义的。

除了使name静态之外,另一种方法是强制创建类的实例,然后以这种方式引用name

new HelloWorld().name;

但这并不是一种非常好的风格。你需要长时间地思考哪些属性/方法需要是静态的,哪些不是。静态属性引入了另一种皱纹,即你现在拥有共享状态,如果你不小心,可能会导致有趣或不良行为。

答案 7 :(得分:0)

你的问题是main是静态的,这意味着它存在而你不必初始化它所在的类。但是,你试图打印的字符串不是静态的,这意味着它只在初始化类时才存在。编译器发现在没有创建对象的情况下调用main是可能的(因为它是静态的),这意味着它将无法访问要打印的字符串,因为它不存在,所以它会抱怨。您还需要将要尝试打印的字符串设置为静态。

static String name = "asad";