static可以修饰变量和方法
目录
修饰变量:
当类中域被static修饰,则该域就是类本身的域,既然static所修饰的域是属于类而非对象,那么就可以通过(类名.域),来调用该域。
static修饰的域存放在哪呢?
首先猜想应该是堆中,因为普通的域会被分配在堆中,但被static修饰的变量可被每一个堆中存放的对象所改变读取,而在堆中存放的是对象中的域,而对象中的域又是相互独立(普通变量)的,故不是在堆中,被static修饰的变量会被放到数据段中,那里存放静态变量、字符常量,且这个区域可以被所有对象访问到,这样所有对象访问的就是同一个变量。
修饰方法:
当类中方法被static修饰,则该方法就是类本身的方法,既然static所修饰的方法是属于类而非对象,那么就可以通过(类名.方法),来调用该方法。
考虑一点,既然static所修饰的方法可以通过类名.方法使用,那么该方法中是否可以使用对象呢?
答案:否定的,因为static不依赖对象,就没有this指针,那就不能使用对象。
因为静态方法没有自身对象,那么是不是就不能在静态方法内调用非静态方法呢?
答案:对,就因为静态方法不需要自身对象(this)的传递,而非静态方法默认是需要将调用发起者传递到this的。
总结:
通过static修饰符修饰的成员会变为类本身的成员,而不再依赖对象,可以通过类名.成员名的方式访问。