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

本文深入解析Java中的静态特性,包括静态变量、静态方法、静态代码块的概念与使用限制,以及它们在类加载过程中的作用。文章阐述了静态成员的生命周期、存储位置,以及如何正确调用静态方法和变量。

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{}定义的代码块。在类加载的时候执行一次---类只加载一次,因为静态代码块也只能执行一次

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值