&&&再看!!!!&&&关于静态static的一系列概念

static---静态

static是一个修饰符,可以修饰变量、方法、代码块、内部类

静态变量

static修饰变量---静态变量/类变量

静态变量在类加载的时候加载到方法区,并且在方法区中被赋予默认值。由于静态变量先于对象出现,所以可以通过类名来调用静态变量,也可以通过对象调用。这个类的所有对象存储的是这个静态变量在方法区的地址,所以所有对象是共享这个静态变量。System.out 、System.in

注意:

1. 类是加载到方法区中---类中的所有的信息都会加载方法区中

2. 类是第一次使用的时候加载到方法区,加载之后不在移除 --- 意味着类只加载一次

静态变量能否定义到构造方法中?---不可以。--- 静态变量在类加载的时候加载到方法区;构造方法是在创建对象的时候调用,在栈内存中执行。

静态变量能否定义到构造代码块中?---不可以

注意:所有的静态只能定义在类中不能定义到代码块中

静态方法

用static修饰的方法,也叫类方法。随着类的加载而加载到方法区,只是存储在方法区中,在被调用的时候到栈内存中执行静态方法先于对象存在的,所以习惯上是通过类名来调用静态方法

Arrays.sort

Arrays.copyOf

System.arraycopy

在静态方法中能否直接使用本类中的非静态属性或者非静态方法?--不可以

class A {

int i;

public void m(){}

public static ms(){

i = 10; // i是一个非静态属性,在本类中属性是通过this调用。this代表当前在活动的对象,意味着有this一定有对应的对象,而静态方法先于对象存在,因此如果通过A.ms()来调用方法,那么就没有对象产生,此时this无法代表任何对象,与this的本质相悖,因此无法使用

m();

}

}

静态方法中能否定义静态变量?---不可以。静态变量在类加载的时候加载到方法区,静态方法在调用的时候才执行,并且是在栈内存中执行。

静态方法可以重载吗?---可以

静态方法可以被继承吗?---可以

静态方法可以被重写吗?---不可以

父子类中是否可以存在方法签名一致的静态方法?---可以---构成的隐藏(hide)--- 父子类中只要存在了方法签名一致的方法,要么都是非静态(重写),要么都是静态(隐藏)

静态代码块

用static{}定义的代码块。在类加载的时候执行一次---类只加载一次,因为静态代码块也只能执行一次

执行顺序:父类静态 -> 子类静态 -> 父类非静态 -> 子类非静态

猜你喜欢

转载自blog.csdn.net/weixin_44481878/article/details/88311496