Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java初学者打印字符串_Java - Fatal编程技术网

Java初学者打印字符串

Java初学者打印字符串,java,Java,错误:无法对非静态字段名进行静态引用 . 这是我尝试过的一段代码,复制粘贴但不起作用您有两个选项 创建HelloWorld的实例并使用newHelloWorld()。name 使name静态并使用HelloWorld.name 将您引用的字符串设置为静态: public class HelloWorld { String name = "asad"; public static void main(String []args){ System.out.prin

错误:无法对非静态字段名进行静态引用 . 这是我尝试过的一段代码,复制粘贴但不起作用

您有两个选项

  • 创建HelloWorld的实例并使用new
    HelloWorld()。name
  • 使
    name
    静态并使用
    HelloWorld.name

  • 将您引用的字符串设置为静态:

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

    您可以将名称设置为静态,也可以将其放入主方法中:

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

    您只能在静态方法中调用静态属性。

    HelloWorld
    是一个类。您可以创建该类的多个实例

    下面是制作该类的两个实例的示例

    public class HelloWorld {
        static String name = "asad";
    
    public static void main(String []args){
        System.out.println("hello world" + name);//Display the string
    
        }
    }
    
    现在,
    name
    被声明为实例字段。这意味着
    HelloWorld
    的每个实例将有1个


    现在,
    main
    方法是一种静态方法。这意味着只有一个主方法周期。对于
    HelloWorld
    的每个实例,您不会得到不同的main方法。(main也是一种特殊的静态方法,用作程序的入口点)

    当您尝试从
    main
    调用
    name
    时,您的程序没有任何
    name
    实例可供参考。如果您声明了多个
    HelloWorld
    对象,它将不知道要使用哪个
    name


    如果只想从
    main
    调用
    name
    ,可以将
    name
    设为静态字段。记住,
    static
    意味着每个程序只有一个
    name

    HelloWorld helloWorld1 = new HelloWorld();
    HelloWorld helloWorld2 = new HelloWorld();
    

    您有三种选择:

  • 创建HelloWorld实例并从实例中获取字段,
    new HelloWorld()。name
  • 名称
    更改为
    静态
    或类字段
  • name
    的声明移动到
    main()
  • 所以

    或者

    或者


    简短回答:使
    name
    static;i、 e:

    public static void main(String []args){
      String name = "asad";
      System.out.println("hello world" + name);
    }
    
    详细回答:您需要理解静态和非静态之间的区别<代码>静态属性和方法附加到类。这意味着它们在没有类实例的情况下可用,更重要的是,它们在所有实例之间共享(因为它们属于类本身)

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

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

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

    static String name = "asad";
    

    但这不是很好的风格。您需要仔细考虑哪些属性/方法需要是静态的,哪些不需要。静态属性引入了另一个折痕,即您现在拥有共享状态,如果您不小心,这可能会导致有趣或不受欢迎的行为。

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

    new HelloWorld().name;
    

    您必须使
    name
    成为一个静态变量:
    static String name=“asad”。这是一个非常小的错误。简单的答案是使
    name
    static。我建议你阅读静态变量。你需要先了解静态变量和非静态变量-可能重复@ErrorAnswer-我强烈建议更改你的用户名:P。人们在投票给你的评论/答案:Pthanks之前会三思而后行。为什么System.out.println()不能打印一个非静态变量请这样想:静态意味着它永远不会改变,所以一个非更改的方法打印一些改变了的内容会让java.Thanx感到困惑。这真的很有帮助
    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);
    }
    
    static String name = "asad";
    
    new HelloWorld().name;
    
    static String name = "asad";