Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.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 为什么我不能在main方法上的类中声明的main方法中直接打印变量值?_Java - Fatal编程技术网

Java 为什么我不能在main方法上的类中声明的main方法中直接打印变量值?

Java 为什么我不能在main方法上的类中声明的main方法中直接打印变量值?,java,Java,为什么main方法允许直接打印静态变量值,而要打印普通整型值,则需要创建对象。 虽然这是全局的,但x也在同一个类中被访问,所以我不能直接访问它 回答时,请涵盖内存分配部分 据我了解 静态,因为它是存储在永久生成上的全局变量,那么这个原语intx呢,它不是在私有堆栈上分配的吗?请帮忙 请协助程序内存分配,提前感谢字段上的字段表示该字段由整个类共享,而不仅仅是特定实例。如果没有static,则字段是类实例的一部分(使用new创建) 您的main方法,也就是static,在运行时不会对类产生任何影

为什么main方法允许直接打印静态变量值,而要打印普通整型值,则需要创建对象。

  • 虽然这是全局的,但x也在同一个类中被访问,所以我不能直接访问它
回答时,请涵盖内存分配部分

据我了解

静态,因为它是存储在永久生成上的全局变量,那么这个原语intx呢,它不是在私有堆栈上分配的吗?请帮忙

请协助程序内存分配,提前感谢

字段上的字段表示该字段由整个类共享,而不仅仅是特定实例。如果没有
static
,则字段是类实例的一部分(使用
new
创建)

您的
main
方法,也就是
static
,在运行时不会对类产生任何影响。因此,它可以访问用
static
声明的类字段(也称为“类变量”),但由于它没有实例,因此无法访问实例字段(也称为“实例变量”)

Test Test=新测试()
创建一个实例,您正在从
test
变量引用该实例。该实例有一个字段,
x
,因此您可以访问它

在内存分配方面:

  • 启动程序时,JVM将为类和各种其他类分配内存,以便它可以调用
    main
    (为
    Test
    类分配内存包括一小段
    y

  • main
    中,您通过
    newtest
    Test
    的一个实例分配内存(其中包括
    x
    的一小块内存)


x
是一个实例的成员-每个
Test
对象都有自己的
x
,而
y
是在所有对象之间共享的。请转到并重新讨论
静态关键字
@utkarsh31
静态
不是运算符的概念,这是一个关键词。我建议你在发布到SO之前先学习一些基本的Java教程。亲爱的朋友,谢谢你的推荐。我试图在几个论坛上找到,但我不清楚x的内存分配区域,然后我计划发布。
  public class Test{

    int x = 7;
    static int y = 10;

    public static void main(String[] args) {

        System.out.println("the value of y "+ y);

        //compile error on sysout for value x like this,
        //System.out.println("the value of x "+ x);

       //While in this way i am able to print x, why?

        Test test= new Test();
        System.out.println("the value of x "+test.x);

    }

}