java必知必会

为什么static修饰的变量不能在非static修饰的方法中使用?

先明确几个名词:

  • static修饰的变量称之为 静态变量
  • 没有static修饰的变量称之为 实例变量

java本身机制设定,静态变量会在类加载的时候就被分配内存(类的静态变量共享同一块内存空间)且只会被分配一次,因此它只属于这个class本身(又称类变量);
在java中,非静态方法内要引用在类当中定义的变量,其实以 this.变量名 的方式,只不过我们通常省略了this,这个this指向的是 类对象(类实例对象)又等价 实例对象.变量名
类实例对象是我们调用new方法后才被创建(此时被分配了内存),在此之前类实例对象和静态变量之间没有一个引用关系,所以无法在非静态方法方法中使用静态变量;
然即使是被创建的实例对象还是和静态变量之间没有一个直接引用关系
但是我们可以这么用 实例对象.静态变量 ,是因为java编译器做了一件事情——根据实例对象的类型做了自动转换 类.静态变量

实例变量和静态变量之间的区别?

实例变量只属于实例对象,创建实例的时候会在内存中完全复制一份类的非静态属性
so 区别:

  1. 每个成员变量都有独属于自己的空间,互不干涉
  2. 每个静态变量是唯一内存空间,全局共享

后持续更新。。。。

posted @ 2021-03-31 09:27  萝卜园  阅读(76)  评论(0)    收藏  举报