问答详情
源自:8-7 Java 中的 static 使用之静态变量

用static修饰的变量,和普通成员变量有什么区别,难道成员变量不是属于整个类的么,之前为什么说成员变量和局部变量的时候,说成员变量的作用范围是从类开始到结束。

用static修饰的变量,和普通成员变量有什么区别,难道成员变量不是属于整个类的么,之前为什么说成员变量和局部变量的时候,说成员变量的作用范围是从类开始到结束。


提问者:qq_Anythingispo_0 2018-05-20 16:33

个回答

  • qq_有梦就别怕痛_0
    2018-10-20 16:48:59

    static修饰的变量是在类加载的时候就被创建并分配内存空间,而没有static修饰的变量只有在类被实例化时才会被创建并分配内存空间


  • 孤僻成瘾
    2018-07-03 16:09:42

    你联系一下后面章节的静态初始化,一般用【new 类名 】来创建对象时,会执行一个初始化块,前面构造方法也说了,没有构造方法时系统自动创建构造方法对成员变量初始化,而带了static的会优先初始化。貌似还有节约内存的好处,具体不清楚。自己的理解,有错误欢迎指出。

  • qq_英伦玫瑰空白_0
    2018-05-20 18:38:48

    static修饰的变量可以被所有方法访问,但是静态方法只能访问静态变量,不能访问普通成员变量。类的成员变量在整个类都有效,局部变量只在局部的方法中有效,你就看变量在哪个大括号范围就可以判断,比如:

    public class HelloWorld

    {

    int a=10;

    static int b=20;

    public static void say1()

    {

    int c=30;

    //System.out.println(a);//这里不能访问a,因为静态方法不能访问非静态变量a。

    System.out.println(b);//这里可以访问b,静态方法可以访问静态变量b。

    System.out.println(c);//这里可以访问c,变量c只在say1( )方法内有效

    //say1( )是静态方法,只能访问静态变量,所有不能访问静态变量b,但是可以访问非静态变量c,因为c是非静态方法say1( )的内部变量,也就是局部变量。

    }

    public void say2()

    {

    System.out.println(a);//可以访问a,变量a在整个HelloWorld类中有效,是成员变量也叫全局变量。System.out.println(b);//可以访问a,变量b在整个HelloWorld类中有效,是成员变量也叫全局变量。

    //System.out.println(c);//这里不能访问c,因为c是局部变量,只在say1( )有效

    //say2( )是非静态方法所有可以访问所有变量,但是不能访问变量c,因为c只能在say1( )内才有效

    }

    public static void main(String[] args)

    {

    HelloWorld poj1=new HelloWorld();

    poj1.say1();

    poj1.say2();

    }

    }


  • qq_英伦玫瑰空白_0
    2018-05-20 18:27:55

    static修饰的变量可以被所有方法访问,但是静态方法只能访问静态变量,不能访问普通成员变量。类的成员变量在整个类都有效,局部变量只在局部的方法中有效,你就看变量在哪个大括号范围就可以判断,比如:

    public class HelloWorld

    {

    int a=10;

    static int b=20;

    public static void say1()

    {

    int c=30;

    //System.out.println(a);//这里不能访问a,因为静态方法不能访问非静态变量a。

    System.out.println(b);//这里可以访问吧,静态方法可以访问静态变量b。

    System.out.println(c);//这里可以访问c,变量c只在say1( )方法内有效

    }

    public void say2()

    {

    System.out.println(a);//可以访问a,变量a在整个HelloWorld类中有效,是成员变量也叫全局变量。

    System.out.println(b);//可以访问a,变量a在整个HelloWorld类中有效,是成员变量也叫全局变量。

    //System.out.println(c);//这里不能访问c,因为c是局部变量,只在say1( )有效

    //非静态方法可以访问所有变量

    }

    public static void main(String[] args)

    {

    HelloWorld poj1=new HelloWorld();

    poj1.say1();

    poj.say2();

    }

    }